A 레코드에 여러 IP가 있는 개인 DNS Azure가 예상했던 대로 작동하지 않습니다.

A 레코드에 여러 IP가 있는 개인 DNS Azure가 예상했던 대로 작동하지 않습니다.

당신이 도울 수 있기를 바랍니다. 미리 감사드립니다.

2개 지역의 4개 Vnet에 연결된 Azure의 Azure 개인 DNS가 있습니다. 단일 A 레코드에 2개의 IP를 넣을 수 있다는 내용을 읽었습니다(예: A 레코드 이름 sql.midomain.local IP1 192.168.1.1 / 192.168.2.1).

VM IP1의 전원이 꺼지면 클라이언트가 IP2로 확인할 수 있을 것으로 예상했지만 그런 일은 일어나지 않았습니다. "sql.domain.local"에 대해 ping을 수행하면 이 VM이 꺼져 있음에도 불구하고 항상 IP1로 확인됩니다.

지역 1의 인스턴스 SQL1이 OFF인 경우 더 많은 복원력이 필요하기 때문에 이것이 필요합니다. 클라이언트는 여전히 지역 2의 복제된 VM에 연결됩니다. Azure의 내부 부하 분산 장치는 이를 지원하지만 공용 IP를 배치하고 싶지 않습니다. 내 SQL은 외부 부하 분산을 사용합니다.

어떤 아이디어라도 어떻게 도달할 수 있나요?.

PD: 모든 Vnet이 Vnet 피어링을 통해 다른 Vnet에 연결할 수 있다는 점을 아는 것이 중요합니다. 모든 vnet에서 wathever VM에 연결할 수 있습니다.

답변1

단일 A 레코드에 2개의 IP를 넣을 수 있다는 것을 읽었습니다.

아니요. 이름은 동일하고 값은 다른 여러 A(또는 CNAME, TXT, MX) 레코드를 생성할 수 있습니다.

VM IP1의 전원이 꺼지면 클라이언트가 IP2로 확인할 수 있을 것으로 예상했지만 그런 일은 일어나지 않았습니다. "sql.domain.local"에 대해 ping을 수행하면 이 VM이 꺼져 있음에도 불구하고 항상 IP1로 확인됩니다.

특정 이름에 대해 여러 주소가 표시되면 클라이언트는~해야 한다차례로 시도해 보세요. 이에 대한 설명은 다음과 같습니다.RFC 1794. Ping은 낮은 수준의 진단 도구입니다. 여기서 그의 행동이 고의적인지, 시대착오적인지, 아니면 단순히 결함이 있는지 판단하기 위해 몇 가지 중요한 조사를 해야 할 것입니다.

브라우저는 매우 다르게 작동합니다. 라운드 로빈 DNS(rrDNS)는 HTTP[s] 서비스에 대한 고가용성을 지원하는 매우 효과적인 도구입니다. 하지만 이는 실패 감지를 구현하기 때문입니다.많이다른 TCP 클라이언트보다 짧은 시간 제한(1초 미만) 대부분의 운영 체제의 기본 TCP 구성에는 5분 이상의 오류 감지 시간 제한이 있습니다. 이는 또한 TCP 클라이언트가 적절하게 RFC를 준수한다고 가정합니다. 내 경험으로는 Java(또는 Java 위에서 실행되는 애플리케이션 코드)가 DNS 확인을 예상대로 처리하지 못하는 것 같습니다.

외부 클라이언트에 HA 액세스를 제공하는 데 비용이 많이 드는 대안은 TCP 다중 경로를 이용하는 것입니다. 2개의 다른 공급자를 사용하는 IME, 장애 조치 감지/전환에는 최소 3분이 걸렸으며 때로는 전혀 발생하지 않는 경우도 있었습니다.

외부 클라이언트에 고가용성을 제공하는 훌륭한 솔루션이지만 특정 인프라 내부의 노드 간 연결에 고가용성을 제공하는 수단으로 rrDNS를 사용하지는 않습니다.

하지만 외부 부하 분산을 사용하기 위해 SQL에 공용 IP를 추가하고 싶지 않습니다.

공개 주소에 DBMS 서버를 노출하지 않는 것이 합리적입니다. 다른 수단을 통해 연결할 수 없다는 의미는 아닙니다. 실제로 DBMS에 트랜잭션 데이터가 있다면 실제로는정말데이터베이스 노드 간의 통신을 보장할 수 있어야 합니다. Vnet 피어링을 통해 사용할 수 있고 애플리케이션이 기본 HA 클라이언트 기능을 지원하지 않는 경우 haproxy 또는 ProxySQL을 살펴보세요.

OTOH 애플리케이션이 애플리케이션 서버와 DBMS 간의 대기 시간에 다소 민감하다는 것을 알 수 있습니다(예: 간단한 ORM을 사용하는 경우). 이 경우 'A' 위치에 있는 애플리케이션 서버가 'B' 위치에 있는 DBMS에 연결하도록 허용하는 것은 바람직하지 않습니다. 여기서 격리된 스택에 대한 rrDNS는 문제를 부분적으로 해결할 수 있지만 세션 관리 및 데이터 복제 기간 동안에도 고려해야 합니다. 장애 조치/장애 복구.

답변2

"sql.domain.local"에 대해 ping을 수행하면 이 VM이 꺼져 있음에도 불구하고 항상 IP1로 확인됩니다.

이는 운영 체제가 DNS 서버에서 지정한 TTL 시간 동안 확인된 IP 주소를 캐시하기 때문에 자연스러운 현상입니다.

DNS에는 클라이언트가 해당 서버에서 직접 요청할 때마다 응답을 순환하는 라운드 로빈 메커니즘이 있지만 이는 귀하와 같은 장애 조치 시나리오용으로 설계되지 않았습니다. 나는 귀하의 환경에 대해 모르지만 일반적으로 역방향 프록시를 사용하여 조언을 드리겠습니다.

관련 정보