ElastiCache for Redis 클러스터에 연결할 수 없는 이유는 무엇입니까?

6분 분량
0

Amazon ElastiCache for Redis 클러스터에 연결할 수 없습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

연결 문제의 근본 원인은 여러 가지일 수 있습니다. 가장 일반적인 문제는 다음과 같습니다.

  • 클러스터가 준비되지 않았습니다.
  • 클러스터가 비정상입니다.
  • 네트워크 구성이 올바르지 않습니다.
  • 클라이언트 구성이 올바르지 않습니다.

해결 방법

클러스터가 준비되었는지 확인

최근에 클러스터를 생성한 경우 클러스터 생성이 완료되었고 클러스터가 연결을 수락할 준비가 되었는지 확인합니다.

ElastiCache 콘솔, AWS Command Line Interface(AWS CLI) 또는 ElastiCache API를 사용하여 클러스터의 상태를 확인합니다. 상태 열에서 다음 사항을 검토합니다.

  • 상태 열에 사용 가능이 표시되면 클러스터가 준비된 것입니다.
  • 상태 열에 생성 중이 표시되면 클러스터 생성이 계속 진행 중인 것입니다. 사용 가능으로 업데이트될 때까지 몇 분 정도 기다립니다.
  • 상태 열에 수정 중이 표시되면 클러스터의 구성이 업데이트 중인 것입니다. 수정이 완료되고 상태가 사용 가능으로 변경될 때까지 몇 분 정도 기다립니다.

클러스터가 정상인지 확인

정상 클러스터에서 각 개별 노드는 사용 가능 상태여야 합니다. 클러스터의 상태를 확인하려면 다음을 수행합니다.

클러스터와 클라이언트 리소스 간의 네트워크 수준 연결 확인

지연 시간을 최소화하려면 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 ElastiCache에 액세스하십시오. 동일한 Amazon Virtual Private Cloud(VPC) 내 다른 리소스에서 Amazon ElastiCache에 액세스하면 지연 시간 최소화에 도움이 됩니다. 하지만 VPC 외부 또는 AWS 외부에서도 연결할 수 있습니다.

ElastiCache에 연결하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

연결 프로세스를 자동화하려면 VPC 네트워크 액세스 분석기 서비스를 사용하여 AWS 리소스 간의 연결 문제를 해결하십시오.

보안 그룹 및 네트워크 ACL에서 연결을 허용하는지 확인

ElastiCache 클러스터 및 연결을 시작하는 리소스에서 이 단계를 수행합니다. 클라이언트 리소스의 예는 다음과 같습니다.

  • Amazon EC2 인스턴스입니다.
  • AWS Lambda 함수입니다.
  • Amazon Elastic Container Service(Amazon ECS) 또는 Amazon Elastic Kubernetes Service(Amazon EKS) 컨테이너 등입니다.

ElastiCache에서 보안 그룹이 올바르게 구성되었는지 확인합니다. 다른 리소스의 경우 보안 그룹 및 네트워크 ACL을 확인합니다.

ElastiCache 클러스터의 보안 그룹을 확인

1.    클러스터 이름을 Redis 클러스터 메뉴에서 선택한 다음 네트워크 및 보안 탭을 선택합니다.

2.    연결된 보안 그룹 중 하나 이상이 클라이언트 리소스에서 클러스터 포트의 클러스터로의 인바운드 연결을 허용하는지 확인합니다.

3.    포트 번호를 확인하려면 클러스터의 엔드포인트를 확인합니다. 엔드포인트는 domain_name:port 형식입니다.

참고: 클러스터의 포트는 기본적으로 6379/TCP입니다. 클러스터를 생성하는 동안 포트 번호를 재정의할 수 있습니다.

4.    클라이언트 리소스에서 보안 그룹이 클러스터 포트 및 클러스터 서브넷의 CIDR 블록에 대한 아웃바운드 연결을 허용하는지 확인합니다.

5.    네트워크 ACL이 클라이언트와 클러스터 간의 송신 및 수신 연결을 허용하는지 확인합니다. 기본 네트워크 ACL은 일반적으로 모든 연결을 허용합니다.

참고: VPC 네트워크 액세스 분석기 서비스를 사용하여 보안 그룹 및 네트워크 ACL 구성 문제를 해결할 수 있습니다.

연결에 적합한 엔드포인트 식별

권장 연결 엔드포인트는 클러스터 구성에 따라 달라집니다. 올바른 엔드포인트 및 가능한 구성을 찾는 방법에 대한 자세한 내용은 연결 엔드포인트 찾기를 참조하십시오.

DNS 확인이 클라이언트 측에서 작동하는지 확인

DNS 문제는 일반적으로 알 수 없는 이름 또는 서비스NXDOMAIN 오류 메시지로 식별됩니다.

$ nslookup nonexistent.1234id.clustercfg.euw1.cache.amazonaws.com
Server:         172.31.0.2
Address:        172.31.0.2#53

** server can't find nonexistent.1234id.clustercfg.euw1.cache.amazonaws.com: NXDOMAIN
$ redis-cli -h nonexistent.1234id.clustercfg.euw1.cache.amazonaws.com
Could not connect to Redis at nonexistent.1234id.clustercfg.euw1.cache.amazonaws.com:6379: Name or service not known

위의 오류가 표시되면 VPC 클라이언트 리소스의 DNS 속성을 확인하십시오.

가능하면 Amazon DNS 서버를 사용하는 것이 좋습니다. 자세한 내용은 Amazon DNS 서버를 참조하십시오.

클라이언트와 Redis 간의 TCP 연결 확인

curl 또는 telnet 명령을 사용하여 TCP 연결을 설정하고 연결을 확인합니다.

$ curl -v telnet://test.1234id.clustercfg.euw1.cache.amazonaws.com:6379
*  Trying 172.31.1.242:6379...
* Connected to test.1234id.clustercfg.euw1.cache.amazonaws.com (172.31.1.242) port 6379 (#0)

위의 예제에서 Connected 키워드는 TCP 연결이 작동함을 보여 줍니다.

명령 결과에 Connected가 나타나지 않으면 다음을 확인합니다.

ElastiCache 클러스터에서

  • 보안 그룹은 클러스터 포트에서의 연결을 허용해야 합니다. 클러스터 구성 페이지에서 포트 값을 확인합니다(기본값은 TCP/6379). 자세한 내용은 ElastiCache 클러스터 수정 단원을 참조하십시오.
  • 클러스터와 모든 샤드 및 노드는 사용 가능한 상태여야 합니다. 자세한 내용은 클러스터 세부 정보 보기를 참조하십시오.

클라이언트 리소스에서

  • 보안 그룹은 클러스터의 IP 및 포트에 대한 발신 연결을 허용해야 합니다.
  • 라우팅 테이블에 클러스터에 연결할 수 있는 적절한 경로가 있어야 합니다.
  • 리소스는 동일한 VPC에 있을 수 있습니다. 또는 리소스가 다른 VPC에 있거나, AWS 외부에 있는 경우, 적절한 연결이 구성되어 있는지 확인합니다. VPN 또는 VPC 피어링, DirectLink 등일 수 있습니다. 자세한 내용은 클러스터 또는 복제 그룹 액세스를 참조하십시오.
    참고: Amazon ElastiCache는 짧은 지연 시간을 보장하기 위해 동일한 VPC에서 액세스할 수 있도록 설계되었습니다. VPC 외부에 연결하면 추가 지연 시간이 발생합니다. 이러한 추가 지연 시간은 공용 인터넷에 대한 직접 연결 또는 터널링을 통한 연결에서 특히 일반적입니다. Redis는 지연 시간에 매우 민감하기 때문에 추가 지연 시간으로 연결 및 시간 초과 문제가 발생할 수 있습니다.

VPC Reachability Analyzer는 액세스 차단 요소를 확인하는 데 도움이 되는 도구입니다.

전송 중 암호화를 사용하여 클러스터에 연결 문제 해결

전송 중 암호화는 TLS를 통해 Redis 트래픽을 전송하여 작동합니다. 연결이 작동하려면 클라이언트가 TLS 지원을 보유해야 합니다.

$ redis-cli -h encrypted.1234id.clustercfg.euw1.cache.amazonaws.com

redis-cli가 설치되어 있고 TLS를 지원하는 경우, 명령에 --tls 인수를 추가합니다.

$ redis-cli -h encrypted.1234id.clustercfg.euw1.cache.amazonaws.com --tls
encrypted.1234id.clustercfg.euw1.cache.amazonaws.com:6379>

redis-cli가 TLS 지원 없이 컴파일된 경우 다음 오류가 표시됩니다.

$ redis-cli -h encrypted.1234id.clustercfg.euw1.cache.amazonaws.com --tls
Unrecognized option or bad number of args for: '--tls'

앞서 언급한 오류를 해결하려면 다음 중 하나를 수행합니다.

TLS 지원으로 redis-cli를 컴파일하는 것이 가장 좋습니다(나중에 redis-cli를 사용할 경우) Amazon Linux 2 및 Amazon Linux에 대한 단계는 redis-cli 다운로드 및 설치4단계: 클러스터의 노드에 연결에서 참조하십시오.

-또는-

openssl 등의 대체 명령을 사용합니다. openssl 명령은 대부분의 시스템에서 사용할 수 있으며, TLS를 지원하는 redis-cli를 사용할 수 없는 경우에 유용합니다. 다음은 openssl 명령에 대한 예입니다.

$ openssl s_client -connect encrypted.1234id.clustercfg.euw1.cache.amazonaws.com:6379
CONNECTED(00000003)
----- omitted --------
INFO
# Server
redis_version:6.2.6
----- omitted -----

자세한 내용은 암호화/인증 활성화 클러스터에 연결 섹션을 단계 4: 클러스터의 노드에 연결에서 참조하십시오.

인증을 통해 클러스터에 대한 연결 문제 해결

redis-cli

인증을 사용하는 모든 클러스터에는 TLS가 필요합니다. redis-cli 명령에는 --tls--askpass (또는 -a) 인수가 필요합니다.

--askpass 인자가 제공되지 않으면 다음 내용이 출력됩니다.

$ redis-cli -h auth-cluster.1234id.clustercfg.euw1.cache.amazonaws.com --tls
auth-cluster.1234id.clustercfg.euw1.cache.amazonaws.com:6379> INFO # or any other Redis command
NOAUTH Authentication required.

명령에 잘못된 암호가 포함된 경우, 다음 내용이 출력됩니다.

$ redis-cli -h auth-cluster.1234id.clustercfg.euw1.cache.amazonaws.com --tls --askpass
Please input password: *************
Warning: AUTH failed

다음은 올바른 암호를 사용하여 예상대로 작동하는 Redis 명령의 예입니다.

$ redis-cli -h auth-cluster.1234id.clustercfg.euw1.cache.amazonaws.com --tls --askpass
Please input password: ******************
auth-cluster.1234id.clustercfg.euw1.cache.amazonaws.com:6379> INFO
# Server
redis_version:6.2.6
----- omitted -----

openssl

openssl 명령을 사용하여 연결을 테스트할 수 있습니다. 디버깅 용도로만 이 명령을 사용하십시오.

$ openssl s_client -connect master.auth-cluster.3i1yig.euw1.cache.amazonaws.com:6379
CONNECTED(00000003)
----- omitted -----
---
AUTH topsecretpassword
+OK
INFO
# Server
redis_version:6.2.6
----- omitted -----

자세한 내용은 암호화/인증 활성화 클러스터에 연결 섹션을 단계 4: 클러스터의 노드에 연결에서 참조하십시오.

ElastiCache 연결 문제 해결에 대한 자세한 내용은 문제 해결을 참조하십시오.


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