Route 53에서 가중치 기반 라우팅 정책의 DNS 확인 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 24일

Amazon Route 53에서 가중치 기반 라우팅 정책을 구성했습니다. 하지만 DNS 확인을 테스트할 때 예기치 않은 결과가 표시됩니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

이름이 ‘weighted.awsexampledomain.com’인 TXT 레코드를 생성했다고 가정해 보겠습니다. 레코드의 TTL(Time to Live)은 300초이고 가중치는 다음과 같이 구성했습니다.

이름 유형 TTL 가중치 상태 확인 상태
weighted.awsexampledomain.com. TXT 300 ‘가중치가 0인 레코드’ 가중치 = 0 상태 확인 연결됨
weighted.awsexampledomain.com. TXT 300 ‘가중치가 20인 레코드’ 가중치 = 20 상태 확인 연결됨
weighted.awsexampledomain.com. TXT 300 ‘가중치가 50인 레코드’ 가중치 = 50 상태 확인 연결됨
weighted.awsexampledomain.com. TXT 300 ‘가중치가 70인 레코드’ Weight = 70 상태 확인 연결됨

아래 예제에서는 이 구성을 참조합니다.

​해결 방법

가중치 기반 라우팅 정책을 테스트하여 문제 식별

다수의(10,000개 이상) 쿼리를 전송하여 가중치 기반 라우팅 정책을 테스트합니다. 여러 위치에서 DNS 확인을 테스트하거나 신뢰할 수 있는 이름 서버를 직접 쿼리하여 정책을 이해합니다. 다음 스크립트를 사용하여 도메인 이름에 대한 여러 DNS 쿼리를 전송합니다.

재귀적 해석기를 사용하여 DNS 쿼리 전송:

#!/bin/bash
for i in {1..10000}
do
domain=$(dig <domain-name> <type> @RecursiveResolver_IP +short)
echo -e  "$domain" >> RecursiveResolver_results.txt
done

DNS 쿼리를 신뢰할 수 있는 이름 서버로 직접 전송합니다.

#!/bin/bash
for i in {1..10000}
do
domain=$(dig <domain-name> <type> @AuthoritativeNameserver_IP +short)
echo -e  "$domain" >> AuthoritativeNameServer_results.txt
done

awk 도구를 사용한 예제 출력:

$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @172.16.173.64 +short); echo -e  "$domain" >> RecursiveResolver_results.txt; done

$ awk ' " " ' RecursiveResolver_results.txt | sort | uniq -c
1344 "Record with Weight 20"
3780 "Record with Weight 50"
4876 "Record with Weight 70"

테스트 결과를 사용하여 특정 문제 해결

문제: 가중치 기반 레코드의 엔드포인트 리소스가 예상 트래픽 비율을 수신하지 않습니다.

Route 53은 모든 레코드의 총 가중치에 대한 비율로 레코드에 할당한 가중치를 기반으로 트래픽을 리소스에 전송합니다. DNS 응답은 중간 DNS 해석기가 레코드 TTL 기간 동안 캐시합니다. 클라이언트는 캐시된 응답으로 인해 해당 기간 동안 특정 엔드포인트로만 전송됩니다.

예를 들어, 캐싱 DNS 해석기 192.168.1.2에 대한 쿼리를 실행하는 경우:

$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @192.168.1.2 +short); echo -e  "$domain" >> CachingResolver_results.txt; done

$ awk ' " " ' CachingResolver_results.txt | sort | uniq -c
3561 "Record with Weight 20"
1256 "Record with Weight 50"
5183 "Record with Weight 70"

재귀적 DNS 해석기의 캐시로 인해 위의 결과가 예상과 다를 수 있습니다.

문제: 일부 가중치 기반 레코드가 반환되지 않습니다.

예를 들어, 일부 상태 확인에 실패하는 경우:

이름 유형 TTL 가중치 상태 확인 상태
weighted.awsexampledomain.com. TXT 300 ‘가중치가 0인 레코드’ 가중치 = 0 상태 확인 성공
weighted.awsexampledomain.com. TXT 300 ‘가중치가 20인 레코드’ 가중치 = 20 상태 확인 성공
weighted.awsexampledomain.com. TXT 300 ‘가중치가 50인 레코드’ 가중치 = 50 상태 확인 실패
weighted.awsexampledomain.com. TXT 300 ‘가중치가 70인 레코드’ Weight = 70 상태 확인 성공
$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @192.168.1.2 +short); echo -e  "$domain" >> HealthCheck_results.txt; done

$ awk ' " " ' HealthCheck_results.txt | sort | uniq -c
3602 "Record with Weight 20"
6398 "Record with Weight 70"

상태 확인에 실패했기 때문에 Route 53이 ‘가중치가 50인 레코드’를 반환하지 않습니다.

문제: 모든 가중치 기반 레코드가 비정상입니다.

레코드 그룹의 레코드가 모두 비정상이더라도 Route 53은 DNS 쿼리에 대한 응답을 제공해야 합니다. 그러나 특정 레코드를 우선적으로 선택할 수 있는 근거는 없습니다. 이 경우에 Route 53은 그룹의 모든 레코드를 정상으로 간주합니다. 라우팅 정책 및 각 레코드에 대해 지정한 값에 따라 레코드 하나를 선택합니다.

예:

이름 유형 TTL 가중치 상태 확인 상태
weighted.awsexampledomain.com. TXT 300 ‘가중치가 0인 레코드’ 가중치 = 0 상태 확인 실패
weighted.awsexampledomain.com. TXT 300 ‘가중치가 20인 레코드’ 가중치 = 20 상태 확인 실패
weighted.awsexampledomain.com. TXT 300 ‘가중치가 50인 레코드’ 가중치 = 50 상태 확인 실패
weighted.awsexampledomain.com. TXT 300 ‘가중치가 70인 레코드’ Weight = 70 상태 확인 실패
$ for i in {1..10000}; do domain=$(dig weighted.awsexampledomain.com. TXT @205.251.194.16 +short); echo -e  "$domain" >> All_UnHealthy_results.txt; done

$ awk ' " " ' All_UnHealthy_results.txt | sort | uniq -c
1446 "Record with Weight 20"
3554 "Record with Weight 50"
5000 "Record with Weight 70"

Route 53이 모든 레코드를 정상으로 간주했습니다(Fail Open). Route 53은 구성된 비율에 따라 DNS 요청에 응답했습니다. ‘가중치가 0인 레코드’는 가중치가 0이므로 반환되지 않습니다.

참고: 일부 레코드에 0이 아닌 가중치를 설정하고 다른 레코드에 0의 가중치를 설정한 경우, 상태 확인은 모든 레코드에 0이 아닌 가중치를 설정한 것처럼 작동합니다. 다음과 같은 몇 가지 예외가 있습니다.

  • Route 53은 처음에는 0이 아닌 정상 가중치 기반 레코드만(있는 경우) 고려합니다.
  • 0이 아닌 모든 레코드가 비정상인 경우 Route 53은 정상 0 가중치 기반 레코드를 고려합니다.

그룹 내 모든 레코드의 ‘가중치’를 동일하게 설정하면 트래픽이 동일한 확률로 모든 정상 리소스로 라우팅됩니다. 그룹 내 모든 레코드의 ‘가중치’를 0으로 설정하면 트래픽이 동일한 확률로 모든 정상 리소스로 라우팅됩니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?