Redirection
Client는 모든 Cluster Node에게 요청 메시지(Query)를 보낼 수 있다. (Master, Slave 다 포함해서)
이전 포스팅에서도 언급했지만 Cluster Node는 Cluster 내의 모든 Node와 통신을 하기 때문에, 즉 각 Node의 상태를 알고 있기 때문에 Client가 어떤 Node에 접근하든 상관하지 않는다.
다만, Redis Cluster가 Hash Slot을 사용하기 때문에 요청 메시지의 Key 값이 접근하는 Node 에 존재하지 않을 수 있다.
이런 경우에 요청 받은 Node는 Node Map을 확인하고 MOVED 에러를 발생시킨다.
그림 1. MOVED Error
위 그림 1을 확인해보자.
Redis Client가 Node 0에 접근하여 Slot 1에 해당하는 "GET foo" 요청을 했을 때, Node 0에는 Slot 1이 존재하지 않는다. 하지만 단순히 접근 에러를 발생시키는 것이 아닌 Client에게 친절(?)하게 Node 1로 접근하라는 MOVED 에러를 포함하여 요청을 반환해준다.
그럼 아래 예시를 확인해 보자.
GET foo -MOVED 3999 127.0.0.1:6381
반환된 값에 MOVED가 포함되어 있다. Redis Cluster에서는 Client가 적합한 Node에 접근할 수 있도록 MOVED [Hash Slot] [IP:Port] 포맷을 맞추어 전달한다. (여기서 IP:Port는 Hash Slot이 존재하는 Node의 주소이다.)
Reference
'IT > Database' 카테고리의 다른 글
MCC (Multiversion Concurrency Control) (0) | 2019.02.19 |
---|---|
[Redis] Cluster Overview (1) | 2019.01.06 |
[Redis] Partitioning (0) | 2018.12.10 |
Redis 성능에 영향을 끼치는 것 (0) | 2018.07.16 |
댓글