DNS Round Robin: Các trình duyệt có dính vào một IP miễn là nó trực tuyến không?


14

Làm thế nào để hầu hết các trình duyệt hoạt động nếu họ nhận được nhiều bản ghi A từ máy chủ DNS? Có dính vào một IP miễn là có thể truy cập (và chỉ sử dụng một IP khác nếu IP bị hỏng)? Hay họ chuyển đổi tất cả thời gian không có lý do?

Nếu phần lớn các trình duyệt hiện tại dính vào một IP, DNS-RR sẽ là đủ cho tôi như một giải pháp chuyển đổi dự phòng đơn giản.


1
Tôi không thể trả lời trực tiếp câu hỏi của bạn, nhưng tôi sẽ chỉ ra cho bạn rằng bạn phải đối phó với bộ nhớ đệm ở cả cấp độ trình duyệt và hệ điều hành! Hãy vui vẻ :)
SpacemanSpiff


1
@Iain - Liên kết tuyệt vời
SpacemanSpiff

Bạn có bao nhiêu máy cho một phụ trợ? Nếu 2 máy có thụ động chủ động ổn, hãy lấy địa chỉ IP thứ ba và sử dụng nhịp tim để chuyển đổi giữa các máy vật lý. Ngoài ra, tôi nghĩ ultramonkey hỗ trợ gán cho phụ trợ dựa trên IP nguồn, gần giống như một máy khách. Bạn cũng có thể hack một cái gì đó cùng nhau bằng cách đặt mỗi phụ trợ đặt một cookie duy nhất và có proxy máy chủ web frontend thành phụ trợ tùy thuộc vào cookie. (Mod_rewrite của Apache có lẽ có thể làm điều đó.)
jon

Không có quy tắc duy nhất bao trùm tất cả các trình duyệt, do đó, ít nhất bạn cần chỉ định một / trình duyệt nào bạn quan tâm.
John Gardeniers

Câu trả lời:


7

Mỗi trình duyệt có phương pháp xử lý DNS vòng tròn riêng, tôi đã dành thời gian hôm nay để nghiên cứu vấn đề này và sẽ tiếp tục cập nhật câu trả lời của tôi khi tôi tìm thấy bằng chứng thực hiện sẽ giới hạn câu trả lời của tôi cho các trình duyệt phơi bày hành vi của họ.

Google Chrome

Google Chrome (v58 đã sử dụng) sẽ yêu cầu tất cả các mục lưu trữ cho một địa chỉ (A, AAAA, CNAME) và đặt chúng vào một mảng ( address_list ). Chrome sau đó sẽ cố gắng mở một ổ cắm trên mỗi địa chỉ IP theo thứ tự từ đầu đến cuối, chrome sẽ không thử IP nhanh nhất hoặc gần nhất, nó giả sử IP đầu tiên (được cung cấp bởi bộ phân giải dns ngược dòng của bạn) là IP tốt nhất. Trong các thử nghiệm của tôi, máy chủ dns và windows dns đưa ra một thứ tự IP khác nhau cho mỗi lần tra cứu, đưa ra mức chia 50/50 băng thông cho mỗi IP. Chức năng này được thể hiện trongchrome://net-internals/#events&q=type:SOCKET%20is:active

Curl (libcurl / 7.54.0)

Curl cũng có chức năng chuyển đổi dự phòng này nhưng --connect-timeoutdài hơn nhiều so với mặc định trong chrome, chrome bị lỗi ngay lập tức, Curl thì không. Nếu bạn sử dụng libcurl và muốn tồn tại một trường hợp dns tròn trong đó một IP bị lỗi, (hoạt động trong chrome nhưng không phải trong mã), hãy chắc chắn chỉ định giá trị này thấp hơn.

DEFAULT_CONNECT_TIMEOUT: 0 khiến tôi nghĩ rằng điều này là không thể với curl.

* After 149990ms connect time, move on!

Trên cả hai trình duyệt , IP không bị dính , chúng tuân theo chỉ số TTL được cung cấp trong DNS và khi ttl hết hạn (chrome duy trì nội bộ này, curl hỏi từng yêu cầu), việc chọn ip được thực hiện mỗi lần như mô tả ở trên.

Điều đó có nghĩa là gì? DNS-RR phù hợp với một số hệ thống, nhưng nó không được thiết kế để chuyển đổi dự phòng. Bạn nên mong đợi rằng tất cả các kết quả từ tìm kiếm DNS là (một nguồn sự thật) hợp lệ và có sẵn để phục vụ lưu lượng truy cập. Có nhiều cách để đảm bảo tính khả dụng của IP, chẳng hạn như IP float ảo, thủ thuật BGP / Định tuyến, v.v ... Sử dụng chúng .

Tất cả các thử nghiệm được thực hiện trong môi trường chỉ IPv4, sẽ trả về với kết quả xếp chồng kép sau khi có đủ cơ sở hạ tầng để kiểm tra.

Tôi suy đoán những thay đổi này là tác dụng phụ của Nhãn cầu RFC Happy -Rback IPv6

Cập nhật Một cân nhắc hữu ích, RR DNS chỉ có thể hỗ trợ cân bằng tải, không phải lỗi ứng dụng, nếu một trong các nút của bạn có 503, bạn sẽ phục vụ 40-60% nếu lưu lượng truy cập 503 của bạn. Giả định được đưa ra là tất cả các IP được liệt kê là điểm cuối làm việc hợp lệ nếu có thể truy cập


2

chỉnh sửa: Chỉnh sửa câu trả lời của tôi kể từ khi HiPerFreak dạy tôi.

Các máy chủ DNS sẽ trả về một danh sách tất cả các bản ghi A có cho một tên máy chủ nhất định. Trường hợp vòng tròn xuất hiện là nó xoay vòng cách danh sách được sắp xếp. Liên kết được đăng tải là một ví dụ tuyệt vời về cách các trình duyệt web sẽ sử dụng danh sách đó.

Round Robinning có thể được sử dụng cho một hình thức cân bằng tải rất nguyên thủy, nhưng là một sự thay thế rất kém cho việc cân bằng tải thực sự, vì nếu một trong các máy chủ trong vòng quay vòng tròn đi xuống, máy chủ DNS sẽ không phải là người khôn ngoan hơn và vẫn sẽ đặt địa chỉ IP của nút bị giảm trong danh sách.


Máy chủ DNS luôn cung cấp TẤT CẢ các địa chỉ. Trình duyệt là một trong những người quyết định cái nào sẽ được sử dụng (như không khuyến khích nhiều lần ở đây và ở nơi khác). Ngoài ra, HĐH chuyển tất cả IP cho trình duyệt.
HiPerFreak

2
@HiPerFreak Cấu hình thường thấy (đặc biệt đối với số lượng lớn A-Records) là DNS cung cấp một số địa chỉ (mặc dù không phải tất cả, thường để đảm bảo chúng phù hợp với gói UDP 512 byte và không phải chịu chi phí không cần thiết) , thường theo thứ tự thay đổi.
the-wmus

Tôi đã nghĩ đến 2 hoặc 3 IP.
HiPerFreak

@HiPerFreak: Tôi chỉ muốn nói rằng bạn đúng khi máy chủ DNS xử lý tất cả các bản ghi A khi truy vấn tên nếu có nhiều bản ghi A cho tên đó. Tôi có một máy chủ DNS và vừa thực hiện một gói chụp với Wireshark trong khi tôi ping tên máy chủ để xác nhận. Cảm ơn bạn - tôi đã học được một cái gì đó ngày hôm nay! :)
Ryan Ries

2

Xem câu hỏi này của tôi (và câu trả lời): Cách trình duyệt xử lý nhiều IP .

Một thời gian ngắn - robin dns tròn không cải thiện tính khả dụng. Trình duyệt chọn một IP và bám vào nó, ngay cả khi nó không phản hồi. (Đã kiểm tra với FF và chrome).

Khi trình duyệt dns cache hết hạn, tên máy chủ được giải quyết lại và quá trình được lặp lại, bất kể IP có trả lời hay không.

Đối với HA cơ bản, bạn có thể sử dụng DNS động hoặc các phương pháp dựa trên IP khác nhau.

EDIT: Hành vi này sẽ diễn ra khi máy chủ không thể truy cập hoạt động như một "lỗ đen". Nếu thay vào đó, máy chủ từ chối một cách tích cực các kết nối đến, trình duyệt sẽ thử một ip, từ chối và ngay lập tức sử dụng một ip khác và do đó nó sẽ thất bại khá tốt.


2
Có thể điều này đã thay đổi trong những năm gần đây, nhưng tôi có thể xác nhận rằng khi nhiều lần làm mới trong Firefox, IP thực tế đã thay đổi, mặc dù không quá thường xuyên. Có thể câu trả lời này là lỗi thời?
Yeti

Nghiên cứu của tôi (từ năm 2015) là Chrome, Firefox và MSIE KHÔNG hoạt động như Sandman4 mô tả. MSIE khác biệt đáng chú ý ở chỗ nó yêu cầu thời gian chờ TCP đầy đủ trước khi thử kết nối đến địa chỉ tiếp theo được liệt kê nếu lần đầu tiên thất bại.
symcbean

0

Họ chuyển đổi IP, đó không phải là một giải pháp chuyển đổi dự phòng.

Các trình duyệt cho phép HĐH thực hiện phân giải tên và để kiểm tra Linux luôn chọn ngẫu nhiên các địa chỉ IP, hãy thử lưu trữ google.com nhiều lần. Các IP sẽ đến theo thứ tự ngẫu nhiên.


Tại sao họ làm điều này một cách ngẫu nhiên và không có lý do? Sẽ không có ý nghĩa gì khi sử dụng lại một IP biết làm việc miễn là nó hoạt động được?
HiPerFreak

1
Nó là để cân bằng tải.
Đá


@HiPerFreak: Vì lý do nó không dính vào IP đã biết là độ phân giải tên không biết gì về việc IP đó hoạt động bây giờ hay có trong quá khứ. Trình duyệt không dính vào một IP duy nhất, vì độ phân giải tên đang bảo nó sử dụng các IP khác nhau. :-)
Sean Reifschneider

@Sean: Như đã thảo luận trong câu trả lời thổi, độ phân giải tên cung cấp cho trình duyệt TẤT CẢ IP và trình duyệt quyết định sử dụng cái nào. Và trình duyệt biết IP nào đã hoạt động và cái nào không. Vì vậy, đây không thể là lý do.
HiPerFreak

0

DNS trả về tất cả IP trong danh sách nhưng chúng thay đổi thứ tự của danh sách và thứ tự này không ngẫu nhiên hoặc thay đổi khi 1 thất bại nhưng chúng luôn trả lại IP theo cùng một chuỗi vì lý do cân bằng tải. Khi trình duyệt nhận được danh sách, tôi cho rằng nó chọn thứ 1 trong danh sách nếu không được gọi là không hoạt động.

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.