Áo tròn có trọng số thông qua TTL - có thể?


9

Tôi hiện đang sử dụng vòng tròn DNS để cân bằng tải, hoạt động rất tốt. Các bản ghi trông như thế này (Tôi có thời lượng là 120 giây)

;; ANSWER SECTION:
orion.2x.to.        116 IN  A   80.237.201.41
orion.2x.to.        116 IN  A   87.230.54.12
orion.2x.to.        116 IN  A   87.230.100.10
orion.2x.to.        116 IN  A   87.230.51.65

Tôi đã học được rằng không phải mọi ISP / thiết bị đều xử lý một phản ứng như vậy theo cùng một cách. Ví dụ: một số máy chủ DNS xoay địa chỉ ngẫu nhiên hoặc luôn chuyển chúng qua. Một số chỉ tuyên truyền mục đầu tiên, những người khác cố gắng xác định mục nào là tốt nhất (gần khu vực) bằng cách xem địa chỉ IP.

Tuy nhiên, nếu cơ sở người dùng đủ lớn (trải rộng trên nhiều ISP, v.v.) thì nó sẽ cân bằng khá tốt. Sự khác biệt từ máy chủ được tải cao nhất đến thấp nhất hầu như không vượt quá 15%.

Tuy nhiên, bây giờ tôi có một vấn đề là tôi đang giới thiệu nhiều máy chủ hơn vào các hệ thống và không phải tất cả đều có cùng năng lực.

Tôi hiện chỉ có máy chủ 1 Gbps, nhưng tôi muốn làm việc với 100 Mbps và cả máy chủ 10 Gbps nữa.

Vì vậy, điều tôi muốn là tôi muốn giới thiệu một máy chủ có tốc độ 10 Gbps với trọng lượng 100, máy chủ 1 Gbps có trọng lượng 10 và máy chủ 100 Mbps với trọng lượng 1.

Trước đây tôi đã thêm máy chủ hai lần để mang lại nhiều lưu lượng truy cập hơn cho chúng (hoạt động rất tốt, băng thông tăng gần gấp đôi). Nhưng việc thêm máy chủ 10 Gbps 100 lần vào DNS thì hơi vô lý.

Vì vậy, tôi nghĩ về việc sử dụng TTL.

Nếu tôi cung cấp cho máy chủ A 240 giây TTL và máy chủ B chỉ 120 giây (tức là khoảng tối thiểu để sử dụng cho vòng tròn, vì rất nhiều máy chủ DNS được đặt thành 120 nếu chỉ định TTL thấp hơn (vì vậy tôi đã nghe thấy)). Tôi nghĩ điều gì đó như thế này sẽ xảy ra trong một kịch bản lý tưởng:

First 120 seconds
50% of requests get server A -> keep it for 240 seconds.
50% of requests get server B -> keep it for 120 seconds

Second 120 seconds
50% of requests still  have server A cached -> keep it for another 120 seconds.
25% of requests get server A -> keep it for 240 seconds
25% of requests get server B -> keep it for 120 seconds

Third 120 seconds
25% will get server A (from the 50% of Server A that now expired) -> cache 240 sec
25% will get server B  (from the 50% of Server A  that now expired) -> cache 120 sec
25% will have server A cached for another 120 seconds
12.5% will get server B (from the 25% of server B that now expired) -> cache 120sec
12.5% will get server A (from the 25% of server B that now expired) -> cache 240 sec

Fourth 120 seconds
25% will have server A cached -> cache for another 120 secs
12.5% will get server A (from the 25% of b that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of b that now expired) -> cache 120 secs
12.5% will get server A (from the 25% of a that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of a that now expired) -> cache 120 secs
6.25% will get server A (from the 12.5% of b that now expired) -> cache 240 secs
6.25% will get server B (from the 12.5% of b that now expired) -> cache 120 secs
12.5% will have server A cached -> cache another 120 secs
... I think I lost something at this point, but I think you get the idea...

Như bạn có thể thấy điều này trở nên khá phức tạp để dự đoán và chắc chắn nó sẽ không diễn ra như thế này trong thực tế. Nhưng nó chắc chắn sẽ có ảnh hưởng đến việc phân phối!

Tôi biết rằng robin tròn có trọng số tồn tại và chỉ được kiểm soát bởi máy chủ gốc. Nó chỉ quay vòng qua các bản ghi DNS khi phản hồi và trả về các bản ghi DNS với xác suất được đặt tương ứng với trọng số. Máy chủ DNS của tôi không hỗ trợ điều này và yêu cầu của tôi không chính xác. Nếu nó không có trọng lượng hoàn toàn thì không sao, nhưng nó nên đi đúng hướng.

Tôi nghĩ rằng việc sử dụng trường TTL có thể là một giải pháp đơn giản và dễ dàng hơn và nó không yêu cầu máy chủ DNS điều khiển động này, giúp tiết kiệm tài nguyên, theo quan điểm của tôi về toàn bộ cân bằng tải DNS so với cân bằng tải phần cứng.

Câu hỏi của tôi bây giờ là: Có bất kỳ thực tiễn / phương pháp / quy tắc tốt nhất nào để phân phối vòng tròn trọng lượng bằng cách sử dụng thuộc tính TTL của bản ghi DNS không?

Biên tập:

Hệ thống này là một hệ thống máy chủ proxy chuyển tiếp. Lượng Băng thông (không yêu cầu) vượt quá những gì một máy chủ duy nhất có Ethernet có thể xử lý. Vì vậy, tôi cần một giải pháp cân bằng phân phối băng thông cho một số máy chủ. Có phương pháp nào khác hơn là sử dụng DNS không? Tất nhiên tôi có thể sử dụng bộ cân bằng tải với kênh sợi, v.v., nhưng chi phí thì vô lý và nó cũng chỉ tăng chiều rộng của nút cổ chai và không loại bỏ được. Điều duy nhất tôi có thể nghĩ đến là địa chỉ IP anycast (là anycast hay multicast?), Nhưng tôi không có phương tiện để thiết lập một hệ thống như vậy.


Hãy chuẩn bị để bị đánh vào đầu với một bản sao RFC 2181 § 5.2 bởi một loạt những người được hỏi.
JdeBP

tôi cũng nhận ra rằng RR không được thiết kế để cân bằng tải. nhưng nó hoạt động rất tốt ... vì vậy ... tôi cũng không biết về một sự thay thế. tất nhiên là có nhưng chúng không thể được đưa vào vị trí hoặc quá đắt hoặc quá phức tạp
The Shurrican

@JdeBP vâng, điểm tốt - các TTL trong RRset PHẢI giống nhau.
Alnitak

Câu trả lời:


2

Trước hết, tôi hoàn toàn đồng ý với @Alnitak rằng DNS không được thiết kế cho loại điều này và cách tốt nhất là không (ab) sử dụng DNS làm bộ cân bằng tải của người nghèo.

Câu hỏi của tôi bây giờ là ... có bất kỳ nguyên tắc / methos / quy tắc ngón tay cái nào để phân phối vòng tròn trọng lượng bằng cách sử dụng thuộc tính TTL của bản ghi DNS không?

Để trả lời trên tiền đề của câu hỏi, cách tiếp cận được sử dụng để thực hiện vòng tròn có trọng số cơ bản bằng DNS là:

  • Điều chỉnh sự xuất hiện tương đối của các bản ghi trong các phản hồi DNS có thẩm quyền. Tức Server Alà nếu có 1/3 lưu lượng truy cập và Server Bcó 2/3, thì 1/3 phản hồi DNS có thẩm quyền đối với proxy DNS sẽ chỉ chứa AIP và 2/3 phản hồi chỉ BIP. (Nếu 2 hoặc nhiều máy chủ chia sẻ cùng một 'trọng số', thì chúng có thể được gói lại thành một phản hồi.)
  • Giữ DNS DNS thấp để tải không cân bằng được cân bằng tương đối nhanh chóng. Vì các proxy DNS xuôi dòng có số lượng khách hàng không đồng đều phía sau chúng, nên bạn muốn xáo trộn lại các bản ghi thường xuyên.

Dịch vụ DNS tuyến 53 của Amazon sử dụng phương pháp này .

Lượng Băng thông (không yêu cầu) vượt quá những gì một máy chủ với ethernet có thể xử lý. Vì vậy, tôi cần một giải pháp cân bằng phân phối băng thông cho một số máy chủ.

Đúng. Vì vậy, theo tôi hiểu, bạn có một số loại tải xuống 'giá rẻ' / phân phối video / dịch vụ tải xuống tệp lớn, trong đó tổng tốc độ bit dịch vụ vượt quá 1 GBit.

Không biết chi tiết cụ thể chính xác về dịch vụ và bố cục máy chủ của bạn, thật khó để chính xác. Nhưng một giải pháp phổ biến trong trường hợp này là:

  • Vòng tròn DNS đến hai hoặc nhiều phiên bản cân bằng tải cấp TCP / IP hoặc HTTP.
  • Mỗi trường hợp cân bằng tải rất khả dụng (2 bộ cân bằng tải giống nhau hợp tác để giữ một địa chỉ IP luôn bật).
  • Mỗi trường hợp cân bằng tải sử dụng robin vòng có trọng số hoặc xử lý kết nối ngẫu nhiên có trọng số cho các máy chủ phụ trợ.

Kiểu thiết lập này có thể được xây dựng bằng phần mềm nguồn mở hoặc với các thiết bị được xây dựng có mục đích từ nhiều nhà cung cấp. Các cân bằng tải tag đây là một điểm khởi đầu tuyệt vời, hoặc bạn có thể thuê quản trị hệ thống, những người đã làm điều này trước để tư vấn cho bạn ...


4

Câu hỏi của tôi bây giờ là ... có bất kỳ nguyên tắc / methos / quy tắc ngón tay cái nào để phân phối vòng tròn trọng lượng bằng cách sử dụng thuộc tính TTL của bản ghi DNS không?

Vâng, thực hành tốt nhất là đừng làm điều đó !!

Hãy đọc lại theo tôi

  • DNS không phải để cân bằng tải
  • DNS không cung cấp khả năng phục hồi
  • DNS không cung cấp tiện ích dự phòng

DNS là để ánh xạ tên đến một hoặc nhiều địa chỉ IP . Bất kỳ sự cân bằng nào sau đó bạn nhận được là thông qua may mắn, không phải là thiết kế.


1
more IP addresses... làm thế nào mà không cân bằng? hơn nữa đây là lý do tại sao tôi đưa ra câu hỏi giới thiệu phù hợp. nếu tôi chưa làm xong tôi sẽ đánh giá bài viết của bạn dưới dạng COMMENT nhưng như thế này tôi phải đánh giá thấp nó. maby nó không phải là thiết kế nhưng nó hoạt động tuyệt vời và cung cấp những lợi thế tuyệt vời cho tất cả các lựa chọn thay thế. và đó là những gì các trang web như google, facebook, amazon, vv cũng nghĩ và sử dụng nó. tuy nhiên, bình luận lưu ý. tôi đã cập nhật câu hỏi của mình với nhiều thông tin hơn về kịch bản và vui lòng yêu cầu bạn đề xuất một giải pháp cân bằng thay thế
@Alnitak

2
Cân bằng trong thời trang này không đảm bảo tính đầy đủ vì rất nhiều phía khách hàng phải đối mặt với các vấn đề phát sinh ngoài tầm kiểm soát của bạn. Điều này gấp đôi vì vậy khi bạn muốn 'cân' vì về cơ bản, bạn không thể đảm bảo việc cướp vòng ngay từ đầu. DNS chỉ là một dịch vụ tư vấn, khách hàng không cần phải theo dõi nó để gửi thư. Tôi nghĩ đó là điểm mà @Alnitak muốn thực hiện
Matthew Ife

tôi hiểu điều đó một cách hoàn hảo trích dẫn từ câu hỏi của tôi: Tôi đã học được rằng không phải mọi ISP / thiết bị đều xử lý phản hồi như vậy theo cùng một cách. Ví dụ: một số máy chủ DNS xoay địa chỉ ngẫu nhiên hoặc luôn chuyển chúng qua. Một số chỉ tuyên truyền mục đầu tiên, một số khác cố gắng xác định mục nào là tốt nhất (gần khu vực) bằng cách xem địa chỉ IP. Tuy nhiên, nếu cơ sở người dùng đủ lớn (trải rộng trên nhiều ISP, v.v.), nó sẽ cân bằng khá tốt. Sự khác biệt từ máy chủ được tải cao nhất đến thấp nhất hầu như không vượt quá 15%.
Shurrican

@JoeHopfgartner cách duy nhất để cung cấp khả năng phục hồi, tái tạo và cân bằng là ở lớp IP - tức là định tuyến BGP và cân bằng tải lớp 4. Tôi đã không nói nó trong câu trả lời này bởi vì tôi đã nói nó hàng chục lần trong các câu trả lời khác.
Alnitak

Là dư thừa quan trọng đối với giải pháp của bạn? IE nếu một máy chủ ngừng hoạt động thì nó được xử lý thích hợp? Bởi vì nếu đó là việc bạn mở một lon giun bằng RR-DNS.
Matthew Ife

2

Hãy xem PowerDNS . Nó cho phép bạn tạo một phụ trợ đường ống tùy chỉnh. Tôi đã sửa đổi một phụ trợ DNS cân bằng tải ví dụ được viết bằng perl để sử dụng mô-đun Al Thuậtm :: ConsistentHash :: Ketama. Điều này cho phép tôi đặt trọng số tùy ý như vậy:

my $ketamahe = Algorithm::ConsistentHash::Ketama->new();

# Configure servers and weights
$ketamahe->add_bucket("192.168.1.2", 50);
$ketamahe->add_bucket("192.168.1.25", 50);

Và một số khác:

# multi-colo hash
my $ketamamc = Algorithm::ConsistentHash::Ketama->new();

# Configure servers and weights
$ketamamc->add_bucket("192.168.1.2", 33);
$ketamamc->add_bucket("192.168.1.25", 33);
$ketamamc->add_bucket("192.168.2.2", 17);
$ketamamc->add_bucket("192.168.2.2", 17);

Tôi đã thêm một tên từ tên miền cấp cao mong muốn của tôi vào một thư mục con mà tôi gọi là gslb hoặc Cân bằng tải máy chủ toàn cầu. Từ đó, tôi gọi máy chủ DNS tùy chỉnh này và gửi bản ghi A theo trọng số mong muốn của tôi.

Hoạt động như một nhà vô địch. Hàm băm ketama có đặc tính tốt là sự gián đoạn tối thiểu đối với cấu hình hiện có khi bạn thêm máy chủ hoặc điều chỉnh trọng lượng.

Tôi khuyên bạn nên đọc Máy chủ DNS thay thế, của Jan-Piet Mens. Ông có nhiều ý tưởng hay trong đó cũng như mã ví dụ.

Tôi cũng khuyên bạn nên từ bỏ điều chế TTL. Bạn đang trở nên khá xa và việc thêm một loại bùn khác lên trên sẽ khiến việc khắc phục sự cố và tài liệu trở nên vô cùng khó khăn.


1

Bạn có thể sử dụng PowerDNS để thực hiện vòng tròn có trọng số, mặc dù phân phối tải theo kiểu không cân bằng như vậy (100: 1?) Có thể rất thú vị, ít nhất là với các thuật toán tôi đã sử dụng trong giải pháp của mình, trong đó mỗi mục RR có trọng số liên quan đến nó , trong khoảng 1-100 và một giá trị ngẫu nhiên được sử dụng để bao gồm hoặc loại trừ các bản ghi.

Đây là một bài viết tôi đã viết về việc sử dụng phụ trợ MySQL trong PowerDNS để thực hiện RR DNS có trọng số: http://www.mccartney.ie/wordpress/2008/08/wrr-dns-with-powerdns/

RIPienaar cũng có một số ví dụ dựa trên Ruby (sử dụng phụ trợ đường ống PowerDNS): http://code.google.com.vn/p/ruby-pdns/wiki/RecipeweightedRoundRobin


1

Để đối phó với kiểu thiết lập này, bạn cần xem xét một giải pháp cân bằng tải thực. Đọc máy chủ ảo LinuxHAProxy . Bạn nhận được lợi ích bổ sung của các máy chủ tự động bị xóa khỏi nhóm nếu chúng bị lỗi và các hiệu ứng dễ hiểu hơn nhiều. Trọng số chỉ đơn giản là một thiết lập để được điều chỉnh.


Vấn đề với điều đó là tôi có vấn đề về băng thông và không phải là vấn đề về số lượng yêu cầu mà một máy chủ có thể xử lý. Vì vậy, một giải pháp mà tôi phải điều hướng tất cả lưu lượng truy cập thông qua một nút không phải là giải pháp cho tôi. Điều duy nhất tôi có thể nghĩ đến bên cạnh giải pháp DNS là một địa chỉ IP phát đa hướng. Tôi chỉnh sửa câu hỏi của tôi cho phù hợp.
Shurrican

xin lỗi tôi có nghĩa là anycast, không phải multicast (tôi nghĩ)
The Shurrican

1
Nếu băng thông là vấn đề bạn nên xem xét + LACP này trên các thiết bị chuyển mạch của mình. Sau đó, bạn có thể liên kết nhiều thẻ 10G trong (các) thiết bị cân bằng tải.
Mark Mitchigan

Tôi ủng hộ điều này bởi vì nó thú vị ... nhưng tôi có công tắc của mình là nút cổ chai!
Shurrican
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.