Route 53에서 가중치 기반 라우팅 정책과 관련된 문제를 해결하려면 어떻게 해야 하나요?

6분 분량
0

Amazon Route 53에서 가중치 기반 라우팅 정책에 대해 DNS 해상도를 테스트할 때 예상치 못한 결과가 나타납니다.

간략한 설명

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

이름유형TTL가중치상태 확인 상태
weighted.awsexampledomain.com.TXT300“가중치가 0인 레코드”가중치=0상태 확인 관련
weighted.awsexampledomain.com.TXT300"가중치 20으로 기록"가중치=20상태 확인 관련
weighted.awsexampledomain.com.TXT300"가중치 50으로 기록"가중치=50상태 확인 관련
weighted.awsexampledomain.com.TXT300"가중치 70으로 기록"가중치=70상태 확인 관련

다음 예제에서 이 구성이 사용됩니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

가중치 기반 라우팅 정책을 테스트하여 문제를 파악합니다.

여러 개의 쿼리(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

AWS CLI에서 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 확인자는 레코드 TTL 기간 동안 DNS 응답을 캐시합니다. 해당 기간 동안 클라이언트는 캐시된 응답으로 인해 특정 엔드포인트로만 리디렉션됩니다.

예시

캐싱 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.TXT300“가중치가 0인 레코드”가중치=0상태 확인 성공
weighted.awsexampledomain.com.TXT300"가중치 20으로 기록"가중치=20상태 확인 성공
weighted.awsexampledomain.com.TXT300"가중치 50으로 기록"가중치=50상태 확인 실패
weighted.awsexampledomain.com.TXT300"가중치 70으로 기록"가중치=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.TXT300“가중치가 0인 레코드”가중치=0상태 확인 실패
weighted.awsexampledomain.com.TXT300"가중치 20으로 기록"가중치=20상태 확인 실패
weighted.awsexampledomain.com.TXT300"가중치 50으로 기록"가중치=50상태 확인 실패
weighted.awsexampledomain.com.TXT300"가중치 70으로 기록"가중치=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인 정상 레코드를 고려합니다.

예시

이름유형TTL가중치상태 확인 상태
weighted.awsexampledomain.com.TXT300“가중치가 0인 레코드”가중치=0상태 확인 패스
weighted.awsexampledomain.com.TXT300"가중치 20으로 기록"가중치=20상태 확인 패스
weighted.awsexampledomain.com.TXT300"가중치 50으로 기록"가중치=50상태 확인 실패
weighted.awsexampledomain.com.TXT300"가중치 70으로 기록"가중치=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
10000 "Record with Weight 20"

Route 53에서 가중치가 0인 레코드를 고려하지 않았음을 이 예시에서 볼 수 있습니다. 모든 가중치 레코드가 비정상인 경우를 제외하고 Route 53에서는 가중치가 0인 레코드를 반환하지 않습니다.

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

관련 정보

라우팅 정책 선택

상태 확인이 구성될 때 Amazon Route 53에서 레코드를 선택하는 방법

AWS 공식
AWS 공식업데이트됨 일 년 전