DNS Round Robin : 브라우저가 온라인 상태 인 한 IP를 고수합니까? A 레코드를받을

대부분의 브라우저는 DNS 서버에서 여러 개의 A 레코드를받을 경우 어떻게 작동합니까? 도달 할 수있는 한 하나의 IP에 고정되어 있습니까 (IP가 작동하지 않는 경우에만 사용)? 아니면 아무 이유없이 항상 전환합니까?

대부분의 최신 브라우저가 하나의 IP에 고정되어 있으면 DNS-RR로 간단한 장애 조치 솔루션으로 충분합니다.



답변

각 브라우저에는 라운드 로빈 DNS를 처리하는 자체 방법이 있으며 오늘이 문제를 연구하는 데 시간을 보냈으며 구현 증거를 찾으면 내 응답을 업데이트하여 브라우저에 대한 응답을 제한하는 브라우저에 대한 응답을 제한합니다.

구글 크롬

Chrome (v58 사용)은 주소 (A, AAAA, CNAME)에 대한 모든 호스트 항목을 요청하여 배열 ( address_list )에 넣습니다 . 그런 다음 Chrome은 처음부터 끝까지 각 IP 주소에서 소켓을 열려고 시도합니다. 크롬은 가장 빠르거나 가장 가까운 IP를 시도하지 않으며 첫 번째 IP (업스트림 DNS 리졸버가 제공 한)가 최상의 IP라고 가정합니다. 내 테스트에서 바인드 및 Windows DNS 서버는 조회마다 다른 순서의 IP를 제공하여 각 IP에 대한 대역폭의 50/50 분할처럼 보입니다. 이 기능은chrome://net-internals/#events&q=type:SOCKET%20is:active

컬 (libcurl / 7.54.0)

컬은 또한이 장애 조치 기능을 가지고 있지만 --connect-timeout크롬의 기본값보다 훨씬 깁니다. 크롬은 즉시 페일 오버하지만 컬은 그렇지 않습니다. libcurl을 사용하고 하나의 IP가 실패하는 라운드 로빈 dns 인스턴스에서 살아남 으려면 (크롬에서는 작동하지만 코드에서는 작동하지 않음)이 값을 더 낮게 지정해야합니다.

DEFAULT_CONNECT_TIMEOUT : 0 컬이 불가능하다고 생각했습니다.

* After 149990ms connect time, move on!

브라우저 모두 에서 IP는 고정적 이지 않았 으며 DNS에 제공된 TTL을 따르고 ttl이 만료되면 (크롬에서 내부적으로 유지 보수하고 각 요청에서 curl을 요청 함) 위에서 설명한대로 매번 IP 선택이 수행됩니다.

이것은 무엇을 의미 하는가? DNS-RR은 일부 시스템에는 문제가 없지만 장애 조치 용으로 설계되지 않았습니다. DNS로 보이는 모든 결과가 (진실한 소스) 유효하고 트래픽을 처리 할 수 ​​있어야합니다. 가상 플로트 IP, BGP / 라우팅 트릭 등과 같은 IP 가용성을 보장하는 방법에는 여러 가지가 있습니다 .

IPv4 전용 환경에서 수행 된 모든 테스트는 충분한 인프라를 테스트 할 수있게되면 이중 스택 결과와 함께 반환됩니다.

이러한 변경 사항이 IPv6-Fallback RFC Happy Eyeballs 의 부작용 인 것으로 추측합니다.

업데이트
RR DNS는 노드 중 하나에 503이있는 경우 트래픽이 503 인 경우 40-60 %를 제공하는 경우 응용 프로그램 오류가 아닌로드 밸런싱 만 지원할 수 있습니다. 목록에있는 모든 IP가 도달 가능한 경우 유효한 작동 엔드 포인트라고 가정합니다.


답변

편집 : HiPerFreak가 저를 교육 한 이후 내 답변을 편집합니다.

DNS 서버는 주어진 호스트 이름에 대한 모든 A 레코드의 목록을 반환합니다. 라운드 로빈은 목록 순서대로 회전합니다. 알려진 링크는 웹 브라우저가 해당 목록을 사용하는 방법에 대한 훌륭한 예입니다.

라운드 로빈 닝은 매우 원시적 인 형태의로드 밸런싱에 사용될 수 있지만 라운드 로빈 회전의 호스트 중 하나가 다운되면 DNS 서버는 더 현명하지 않으며 여전히 다운 된 노드의 IP 주소를 목록에 넣으십시오.


답변

내 질문 및 답변 : 브라우저가 여러 IP를 처리하는 방법을 참조하십시오 .

곧 라운드 로빈 dns는 가용성을 전혀 향상시키지 않습니다. 브라우저는 하나의 IP를 선택하고 응답하지 않더라도 고정합니다. (FF와 크롬으로 확인).

브라우저 dns 캐시가 만료되면 IP 응답 여부에 관계없이 호스트 이름이 다시 확인되고 프로세스가 반복됩니다.

기본 HA의 경우 동적 DNS 또는 다양한 IP 기반 접근 방식을 사용할 수 있습니다.

편집 :이 동작은 액세스 할 수없는 호스트가 “블랙홀”역할을 할 때 발생합니다. 대신 호스트가 들어오는 연결을 의도적으로 거부하면 브라우저는 하나의 IP를 시도하고 거부하고 즉시 다른 IP를 사용하므로 꽤 잘 실패합니다.


답변

이들은 IP를 전환하며 장애 조치 솔루션이 아닙니다.

브라우저는 OS가 이름 확인을 할 수있게 해주 며, 예를 들어 Linux는 항상 IP 주소를 무작위 화하기 위해 호스트 google.com을 여러 번 시도하십시오 . IP는 임의의 순서로 제공됩니다.


답변

DNS는 목록에있는 모든 IP를 반환하지만 목록의 순서를 변경하며이 순서는 임의적이거나 1이 실패하면 변경되지 않지만로드 균형 조정을 위해 항상 동일한 순서로 IP를 반환합니다. 브라우저가 목록을 받으면 작동하지 않는 것으로 알려진 경우 목록에서 1을 선택한다고 가정합니다.


답변