와 같은 도메인 이름을 가지고 있습니다 api.test.com
. 서버도 3개나 있어요.
그 사이에 중복성을 갖고 싶으므로 한 서버가 오프라인이면 도메인 이름이 api.test.com
해당 서버로 리디렉션되지 않고 다른 서버에 대해서만 리디렉션됩니다.
A
동일한 도메인 이름에 여러 / 레코드를 가질 수 있다는 것을 알았지 AAAA
만 컴퓨터 핑 여부에 관계없이 계산에 포함되지 않고 사용 가능한 모든 IP 중 하나를 무작위로 제공합니다.
중복성을 가지려면 어떻게 해야 합니까? 프록시와 같은 모든 요청을 리디렉션하는 다른 서버를 구해야 합니까?
답변1
아니요, 이것은 작동 방식이 아닙니다. 특정 유형 및 이름의 레코드를 두 개 이상 영역에 구성할 수 있습니다. 클라이언트는 일반적으로 이를 인식하지 못합니다. 특정 이름과 유형을 요청합니다(예를 들어 브라우저는 주소 상자에 입력한 이름(유형 A, AAAA)을 요청합니다).
둘 이상의 레코드가 반환되면 무작위로 하나를 선택하여 연결을 시도합니다. 다른 레코드가 있는 경우 연결을 다시 시도하는 것은 클라이언트의 몫입니다. 또한 서버는 매번 다른 레코드 순서로 동일한 쿼리에 응답하여 이러한 동작을 장려합니다. 따라서 일부 클라이언트가 "항상 첫 번째 항목을 선택"하더라도 서버에서는 무작위화가 계속 발생합니다. 이러한 방식으로 로드 밸런싱의 기본 형태가 달성됩니다.
특수 DNS 로드 밸런서는 TTL이 매우 낮은 A 레코드를 반환하므로 빠르게 만료됩니다. 따라서 서버는 응답에서 해당 주소를 생략하여 갑작스러운 로드 급증이나 백엔드 노드 중단에 신속하게 대응할 수 있습니다. Zoom의 화상 회의 서버를 해결하려고 하면 이 내용을 실제로 볼 수 있습니다. 그들은 이 기술을 사용합니다. 하지만 이를 위해서는 이 이름에 대한 DNS를 관리하기 위해 DNS 로드 밸런서인 특별한 소프트웨어가 필요하며 이는 이야기의 시작에 불과합니다.
일반적으로 A 레코드에서 수신한 처음 시도한 IP가 응답하지 않으면 시도할 다른 IP가 있더라도 웹 클라이언트는 일반적으로 실패를 반환합니다. 실제로 다시 시도하는 소프트웨어가 있습니다. 예를 들어 OpenVPN은 무한정 다시 시도할 수 있지만 이는 특별한 경우입니다.
DNS는 충분히 똑똑한 클라이언트를 기대하면서 완전히 다른 메커니즘으로 중복성을 제공합니다. 특별한 유형의 DNS 레코드가 있습니다.SRV(서비스)에는 우선순위, 가중치, 포트, 이름의 4개 데이터 필드가 있습니다.
이름이 가장 간단합니다. 이 SRV 레코드가 설명하는 A 레코드의 이름입니다. 포트는 요청된 서비스가 해당 이름의 서버에 있는 TCP 또는 UDP 포트입니다. A 또는 AAAA 레코드가 연결된 이름이어야 합니다. CNAME은 허용되지 않습니다. 해당 이름의 A 또는 AAAA 레코드가 두 개 이상 있는 경우 이 특정 SRV 레코드에 대해 일반적인 "한 번 시도" DNS 동작을 수행합니다. 그러나 클라이언트는 다른 SRV 레코드가 있는 경우(예: 더 높은 우선 순위 값으로) 시도해야 합니다.
가중치를 사용하면 로드 밸런싱을 더욱 심층적으로 제어할 수 있습니다. 우선순위가 동일한 레코드가 여러 개 있는 경우 클라이언트는 가중치에 따라 로드를 분산해야 합니다. 확률적으로 수행되는 경우가 많습니다.
우선순위는 중복성을 위한 것입니다. 가장 낮은 값을 가진 레코드를 먼저 시도한 후 다음 우선순위 등을 시도해야 합니다. 그러나 재시도는 클라이언트에 달려 있습니다.
기록은 다음과 같습니다.
_kerberos._tcp.example.net. SRV 0 100 88 dc.example.net.
밑줄은 실제로 레코드 이름에 있는 문자 그대로의 밑줄입니다. "kerberos" 서비스는 TCP를 통해 dc.example.net 포트 88에서 제공됩니다. dc.example.net은 A 또는 AAAA 레코드여야 합니다. 이 예는 적절한 작동을 위해 DNS에 크게 의존하고 이를 ldap(디렉토리) 및 kerberos(보안 프레임워크)에 사용하는 MS Active Directory에서 가져온 것입니다. AD 도메인 컨트롤러가 두 개 이상 있으면 다른 DC를 가리키는 레코드가 더 많아집니다.
이러한 유형의 레코드는 ldap, kerberos, kpasswd(kerberos 비밀번호 변경), xmpp(jabber), sip(ip 전화 통신) 및다른 것서비스.
MX이는 포트 25에 연결되어 있고 "가중치" 없이 "우선순위" 필드만 있는 "SRV의 특별한 경우"와 같습니다. 이는 SRV 이전에 발명된(그리고 이에 영감을 준) "오래된 스타일"일 뿐입니다. 그리고 이메일에만 사용됩니다.
SRV는 웹 서비스에 도움을 드릴 수 없습니다. 클라이언트가 SRV 레코드를 사용하여 서버를 검색하는 것을 알고 있는 서비스에만 도움이 됩니다. 웹 클라이언트는 절대 이런 일을 하지 않습니다.