Database/Redis

[Redis] 현재 오픈되어 있는 슬롯, 없는 슬롯 확인 및 추가하는 방법

꽁담 2020. 4. 5. 03:24

슬롯이란


클러스터 키를 해시함수로 적용하여 나온 값을 슬롯에 매핑하여 저장할 수 있게 해주는 기능입니다.

해시함수로 적용하여 나온 값에 매핑되는 슬롯이 없으면 데이터가 저장될 수 없습니다.


따라서 슬롯이 정상적인지 확인을 할 수 있어야 합니다.



오픈되어 있는 슬롯, 없는 슬롯을 확인하는 방법


check 명령어를 통해서 확인할 수 있습니다.

클러스터로 묶인 노드 중 한곳에 접속해서 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ redis-cli --cluster check 127.0.0.1:7000
127.0.0.1:7000 (869859e3...) -> 2 keys | 16383 slots | 1 slaves.
127.0.0.1:8000 (dcae2685...) -> 0 keys | 0 slots | 0 slaves.
[OK] 2 keys in 2 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000
   slots:[0-9999],[10001-16383] (16383 slots) master
   1 additional replica(s)
S: a8248c454007d610685bba8e805c5a6004867d15 127.0.0.1:7001
   slots: (0 slots) slave
   replicates 869859e396c881b3c26f2a386c1495235225b57b
M: dcae268548d26662de97d3843f658318953004a7 127.0.0.1:8000
   slots: (0 slots) master
[ERR] Nodes don`t agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7000 has slots in migrating state 12539.
[WARNING] Node 127.0.0.1:8000 has slots in importing state 12539.
[WARNING] The following slots are open: 12539.
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.
 
cs


 Line

 설명

 2

 7000 마스터에 2개의 키 값이 있고 16383 의 슬롯이 있고 하나의 슬레이브 서버를 가지고 있습니다.

 7

 7000 마스터에는 0-9999, 10001-16383 까지의 슬롯이 있습니다.

 15

 에러를 출력합니다.

 17, 18, 19

 현재 오픈되어 있는 슬롯이 있습니다.

 이는 7000 에서 8000 으로 이동할 슬롯이 있고 이동이 완료되지 않다는 것을 나타냅니다.

 21

 클러스터에 16384 개의 슬롯이 없습니다.

 이 때는 addslots 옵션으로 없는 슬롯을 추가해주어야 합니다.

 없는 슬롯은 Line 8, 14 에서 계산해서 찾을 수 있습니다.



해결 방법


오픈되어 있는 슬롯을 해결하는 방법

내용이 길어서 아래 URL 을 참고해서 해결해 주면 됩니다.

https://mozi.tistory.com/384


없는 슬롯을 추가하는 방법


check로 출력된 빈 슬롯을 확인하면 10000 번이 비어있는 것을 확인할 수 있습니다.

addslots 으로 10000 슬롯을 추가해 줍니다.

1
2
127.0.0.1:7000> cluster addslots 10000
OK
cs



다시 check 명령어로 확인해 보면 WARNING 과 ERR 가 없는 것을 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ redis-cli --cluster check 127.0.0.1:7000
127.0.0.1:7000 (869859e3...) -> 2 keys | 16384 slots | 1 slaves.
127.0.0.1:8000 (dcae2685...) -> 0 keys | 0 slots | 0 slaves.
[OK] 2 keys in 2 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000
   slots:[0-16383] (16384 slots) master
   1 additional replica(s)
S: a8248c454007d610685bba8e805c5a6004867d15 127.0.0.1:7001
   slots: (0 slots) slave
   replicates 869859e396c881b3c26f2a386c1495235225b57b
M: dcae268548d26662de97d3843f658318953004a7 127.0.0.1:8000
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
cs