ElastiCache for Redis를 사용하고 있습니다. Redis 클라이언트 읽기 요청이 항상 샤드의 기본 노드에서 읽어지거나 기본 노드로 리디렉션되는 이유는 무엇인가요?

최종 업데이트 날짜: 2021년 3월 23일

Amazon ElastiCache for Redis를 사용하고 있습니다. Redis 클라이언트 읽기 요청이 항상 샤드의 기본 노드에서 읽어지거나 기본 노드로 리디렉션되는 이유는 무엇인가요?

해결 방법

Redis 클러스터의 모든 노드는 Redis 클라이언트로부터 쿼리를 수신할 수 있습니다. 클라이언트가 읽기/쓰기 쿼리를 복제본 노드에 보내면 노드는 요청을 분석하여 샤드의 동일한 해시 슬롯에 속하는 단일 키 또는 다중 키 작업인지 확인합니다. 클러스터 모드가 활성화된 클러스터에서 복제본 노드의 기본 동작은 모든 클라이언트 읽기/쓰기 요청을 키의 해시 슬롯에 속한 샤드의 신뢰할 수 있는 기본 노드로 리디렉션하는 것입니다. 복제본 노드는 해당 샤드가 해시 슬롯에 속하고 클라이언트에서 readonly 명령을 시작하는 경우에만 읽기 요청을 처리합니다. 즉, 복제본 노드는 요청 전에 클라이언트가 readonly를 발행한 경우에만 요청을 처리합니다. 그렇지 않으면, 해시 슬롯이 속한 샤드의 기본 노드로 요청이 리디렉션됩니다.

예제

1.    클러스터에 로그인하여 키를 설정합니다.

172.31.21.72:6379> set key8 "This is testing for readonly"
-> Redirected to slot [13004] located at 172.31.21.72:6379
OK
172.31.21.72:6379>

2.    복제본 노드에 연결합니다.

다음 예제에서는 readonly 명령이 전송되지 않고 요청이 기본 노드로 리디렉션됩니다.

172.31.30.175:6379> info replication
 # Replication
 role:slave
 master_host:172.31.21.72
 master_port:6379
 master_link_status:up
 172.31.30.175:637> CLUSTER KEYSLOT key8
 (integer) 13004 
 172.31.30.175:637> get key8
 (error) MOVED 13004 172.31.21.72:6379
 172.31.30.175:637> get key8
 -> Redirected to slot [13004] located at 172.31.21.72:6379
 "This is testing for readonly"
 172.31.21.72:6379>

참고: 이전 예제에 표시된 MOVED 오류는 Redis 클러스터 클라이언트가 클러스터를 인식하지 못하고 기본 노드에 대한 리디렉션 요청을 처리할 수 없을 때 발생합니다. MOVED 오류에 대한 자세한 내용은 Redis.io 웹 사이트에서 Redis 클러스터 사양 – 리디렉션 및 리샤딩을 참조하세요.

다음 예제에서는 readonly 명령이 먼저 전송되므로 복제본 노드가 요청을 기본 노드로 리디렉션하는 대신 요청을 처리합니다.

172.31.30.175:6379> readonly
OK
172.31.30.175:6379> get key8
"This is testing for readonly"
172.31.30.175:6379>

readonly명령은 클라이언트가 처음으로 노드에 연결할 때 발행되어야 합니다. 이 명령은 클라이언트가 동일한 노드에서 키를 읽을 때까지만 활성화됩니다. 클라이언트가 동일하거나 다른 샤드의 다른 복제 노드에 연결하는 경우 새 readonly 명령을 발행해야 할 수 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?