ElastiCache Redis 클라이언트의 오류 메시지를 해결하려면 어떻게 해야 합니까?
Redis 클라이언트를 사용하여 Amazon ElastiCache Redis 클러스터에 연결할 때 오류 메시지가 표시됩니다.
해결 방법
"Connection reset by peer" 오류
Redis 서버가 연결을 종료하면 다음 오류 메시지가 표시됩니다.
"java.io.IOException: Connection reset by peer
io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer"
이 오류는 서버 또는 클라이언트에서 발생할 수 있습니다.
서버에서 오류를 수신하는 경우 다음 조치를 수행하여 문제를 해결하십시오.
- 기본 하드웨어 또는 네트워크 문제를 확인합니다.
- CLIENT LIST 명령을 실행하여 클라이언트 출력 버퍼 할당량을 확인합니다. 자세한 내용은 Redis 웹사이트에서 CLIENT LIST를 참조하십시오. 클러스터 파라미터 그룹의 파라미터는 ElastiCache의 클라이언트 출력 버퍼 할당량을 정의합니다.
- ElastiCache 파라미터 그룹의 시간 제한 값이 할당량에 도달했는지 확인합니다.
클라이언트로부터 오류를 수신하는 경우 다음 조치를 수행하여 문제를 해결하십시오.
- 애플리케이션의 시간 제한 설정이 너무 낮지 않은지 확인합니다.
- Redis 클라이언트 라이브러리의 공식 문서 또는 지원 페이지에서 연결 재설정과 관련된 알려진 버그를 확인합니다.
- Redis 클라이언트가 최신 버전인지 확인합니다.
- 클러스터에 대해 TLS를 설정한 경우 클라이언트에서 암호화를 구성했는지 확인합니다.
"Connection refused" 또는 "Unable to connect to Redis" 오류
서버에서 연결을 거부하면 다음 오류 메시지가 표시됩니다.
"JedisConnectionException: java.net.ConnectException: Connection refused
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException:
Connection refused
ECONNREFUSED
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis org.redisson.client.RedisConnectionException: Unable to connect to Redis server ###"
이 문제를 해결하려면 다음 사항을 확인합니다.
- Redis 엔드포인트에 연결할 수 있습니다. telnet 또는 redis-cli와 같은 도구를 사용할 수 있습니다.
- 보안 그룹 규칙이 포트 6379에서의 트래픽을 허용합니다.
- 연결을 차단하는 방화벽이 없습니다.
- 메모리, CPU, 네트워크 또는 연결 리소스 제약이 없습니다.
참고: tcpdump와 같은 도구를 사용하여 연결 시도를 분석할 수 있습니다.
"Connection timed out" 오류
연결 제한 시간에 도달하면 다음 오류 메시지가 표시됩니다.
"redis.exceptions.TimeoutError: Timeout connecting to server io.netty.channel.ConnectTimeoutException: connection timed out org.redisson.client.RedisTimeoutException: Unable to acquire connection!"
Connection timed out 오류는 지속적이거나 간헐적일 수 있습니다.
제한 시간 오류가 계속되면 다음 조치를 수행하여 문제를 해결하십시오.
- 네트워크 연결 및 구성을 확인하여 ElastiCache Redis 클러스터에 대한 연결을 확인합니다.
- 올바른 Redis 엔드포인트를 지정했는지 확인합니다.
지속적 제한 시간 오류를 해결하려면 지속적 연결 문제를 참조하십시오.
제한 시간 오류가 간헐적으로 발생하는 경우 다음 조치를 수행하여 문제를 해결하십시오.
- ElastiCache 콘솔을 사용하여 노드 복구 또는 장애 조치 이벤트를 확인합니다.
- 메모리, CPU, 네트워크 또는 연결 리소스 제약이 있는지 확인합니다.
- 문제 발생 시점에 지연 시간이 길었는지 확인합니다.
- 클라이언트 애플리케이션의 제한 시간 구성을 확인합니다.
"Read timed out" 오류
구성한 제한 시간 값 내에 명령이 완료되지 않으면 다음 오류 메시지가 표시됩니다.
"StackExchange.Redis.RedisTimeoutException: Timeout performing GET (5000ms) io.lettuce.core.RedisCommandTimeoutException: Command timed out org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketTimeoutException: Read timed out redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out"
이 오류는 Redis 스레드가 복잡하거나 장시간 실행되는 명령을 처리할 때 발생합니다.
이 문제를 해결하려면 다음 조치를 취하십시오.
- 메모리, CPU, 네트워크 또는 연결 리소스 제약이 있는지 확인합니다.
- 클라이언트 측에 리소스 스로틀링이 없는지 확인합니다.
- 문제 발생 시점에 지연 시간이 길었는지 확인합니다.
- Redis는 한 번에 하나의 쿼리를 처리하는 단일 스레드 엔진이므로 장시간 실행되어 Redis 엔진을 막는 명령이 있는지 확인합니다. 지침은 Redis 웹사이트의 SLOWLOG GET을 참조하십시오.
- 단위 시간당 명령이 너무 많은지 확인합니다. 지침은 Redis 웹사이트의 INFO를 참조하십시오.
"Operation timed out" error
구성한 제한 시간 값보다 오래 연결이 유휴 상태로 유지되면 다음 오류 메시지가 표시됩니다.
"io.lettuce.core.RedisException: java.io.IOException: Operation timed out"
다음과 같은 이유로 Operation timed out 오류가 표시될 수 있습니다.
- ElastiCache 클러스터의 부하가 높아 명령을 제시간에 처리할 수 없습니다.
- 네트워크 트래픽이 클러스터 또는 클라이언트 측의 대역폭 할당량을 초과합니다.
이 문제를 해결하려면 다음 조치를 취하십시오.
- 메모리, CPU, 네트워크 또는 연결 리소스 제약이 있는지 확인합니다.
- 클라이언트 측에 리소스 스로틀링이 없는지 확인합니다.
- 장시간 실행되어 Redis 엔진을 막는 명령이 있는지 확인합니다. 지침은 Redis 웹사이트의 SLOWLOG GET을 참조하십시오.
- 클라이언트 애플리케이션 및 클러스터의 제한 시간 구성을 확인하고, 적절한 제한 시간 파라미터를 설정하여 유휴 연결이 끊어지지 않도록 합니다.
"NOAUTH Authentication required" 오류
인증이 필요하지만 Redis 서버에 연결하지만 유효한 자격 증명을 제공하지 않으면 NOAUTH Authentication required 오류 메시지가 표시됩니다.
이 문제를 해결하려면 다음 조치를 취하십시오.
- 클러스터에 연결하기 위한 올바른 사용자 이름과 암호를 입력합니다.
- 클라이언트 라이브러리 구성 및 연결 문자열의 구문이 올바른지 확인합니다.
"ERR max number of clients reached" 오류
클러스터 노드가 최대 연결 할당량에 도달하면 ERR max number of clients reached 오류 메시지가 표시됩니다.
이 문제를 해결하려면 다음 조치를 취하십시오.
- CurrConnections 지표를 확인하고 maxclients 할당량 범위 내에 있는지 확인합니다. 자세한 내용은 Redis 웹사이트에서 최대 동시 연결 클라이언트 수를 참조하십시오.
- 연결 풀링을 사용하여 연결을 재사용합니다.
- 클라이언트 구성에서 적절한 제한 시간 값을 설정합니다.
- 읽기 작업을 위해 읽기 전용 복제본에 직접 연결하여 클러스터 노드 전체에 부하를 분산하도록 클라이언트를 구성합니다.
"LOADING Redis is loading the dataset in memory" 오류
시작 또는 복제본 동기화 중에 데이터세트를 메모리에 로드하는 노드에 연결하면 다음 오류 메시지가 표시됩니다.
"LOADING Redis is loading the dataset in memory (error) LOADING Redis is loading the dataset in memory"
백오프를 구현하는 것이 좋습니다. 자세한 내용은 Redis 클러스터 클라이언트 검색 및 지수 백오프 섹션을 모범 사례: Redis 클라이언트 및 Amazon ElastiCache for Redis에서 참조하십시오.
"OOM command not allowed when used memory > 'maxmemory'" 오류
maxmemory 파라미터는 Redis 노드가 데이터 저장에 사용할 수 있는 최대 메모리 양을 설정합니다.
메모리 사용량이 maxmemory 할당량을 초과하면 Redis는 파라미터 그룹에 설정한 maxmemory-policy를 적용합니다. maxmemory-policy를 기반으로 Redis는 키를 제거하거나 OOM command not allowed 오류를 반환합니다.
이 문제를 해결하려면 다음 조치를 취하십시오.
- 애플리케이션 요구 사항을 기반으로 키를 제거하도록 maxmemory-policy를 구성합니다.
- 메모리 사용량이 지속적으로 할당량을 초과하는 경우 클러스터를 더 큰 노드 유형으로 업그레이드합니다.
"CROSSSLOT Keys in request don't hash to the same slot" 오류
클러스터 모드가 켜져 있고 해시 슬롯이 서로 다른 클러스터에서 다중 키 작업을 실행하면 CROSSSLOT 오류가 발생합니다.
이 문제를 해결하려면 ElastiCache(Redis OSS) 자체 설계 클러스터에서 다중 키 작업을 사용할 때 발생하는 CROSSLOT 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
"CLUSTERDOWN The cluster is down" 오류
노드가 응답을 중지하면 클러스터를 사용할 수 없게 되고 The cluster is down 오류 메시지가 표시됩니다.
이 문제를 해결하려면 다음 조치를 취하십시오.
- ElastiCache 콘솔을 사용하여 노드 복구 또는 장애 조치 이벤트를 확인합니다.
- 메모리, CPU, 네트워크 또는 연결 리소스 제약이 있는지 확인합니다.
- 실행 속도가 느린 명령에서 문제가 발생하는지 확인합니다. 지침은 Redis 웹사이트의 SLOWLOG GET을 참조하십시오.
"READONLY You can't write against a read-only replica" 오류
다음과 같은 이유로 읽기 전용 복제본으로 구성한 Redis 노드에 쓰려고 할 때 오류가 발생합니다.
- 애플리케이션이 읽기 전용 복제본에 직접 연결됩니다.
- 애플리케이션의 DNS 캐싱이 트래픽을 이전 프라이머리 노드로 라우팅합니다.
문제를 해결하려면 ElastiCache for Redis 자체 설계 클러스터에서 장애 조치 후 발생하는 읽기 전용 오류 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
"MOVED [slot] [IP address] [port]" 오류
MOVED 리디렉션 메시지에는 요청된 키에 대한 노드의 해시 슬롯, IP 주소 및 포트가 포함됩니다.
"-MOVED 3999 127.0.0.1:6381"
다음과 같은 이유로 MOVED 오류가 발생할 수 있습니다.
- 클라이언트가 연결된 노드에 없는 해시 슬롯의 키에 액세스하려고 합니다.
- 클러스터의 클러스터 모드를 켰지만 클라이언트가 클러스터를 인식하지 못합니다.
- 읽기 전용 복제본에는 readonly 플래그가 없습니다.
- 클라이언트에 오래된 클러스터 정보(예: 샤드 또는 노드 수가 변경됨)가 있습니다.
이러한 문제를 해결하려면 다음 작업을 수행하십시오.
- 클러스터 모드를 켠 경우 클라이언트가 클러스터를 인식하는지 확인합니다.
- readonly 명령을 실행하여 복제본 노드가 요청을 읽고 있는지 확인합니다. 자세한 내용은 ElastiCache for Redis에서 복제본 노드 대신 샤드의 프라이머리 노드로 리디렉션되는 Redis 클라이언트 읽기 요청을 해결하려면 어떻게 해야 합니까?를 참조하십시오.
- 클러스터 토폴로지를 자주 쿼리하도록 클라이언트를 구성합니다.
참고: 클러스터 샤드의 세부 정보를 보려면 CLUSTER SHARDS 명령을 실행합니다. 클러스터 노드 세부 정보를 보려면 CLUSTER NODES 명령을 실행합니다. 자세한 내용은 Redis 웹사이트의 CLUSTER SHARDS 및 CLUSTER NODES를 참조하십시오.
