Redis CLUSTER SETSLOT

<< CLUSTER GETKEYSINSLOT CLUSTER SLOTS >>

Redis CLUSTER SETSLOT

CLUSTER SETSLOT은 슬롯을 이동하는 명령이다.
MIGRATING/IMPORTING 명령 후에 CLUSTER NODES에 해당 슬롯의 정보를 볼 수 있다.   빈 슬롯은 SETSLOT 명령만으로 이동이 가능하나, 키가 있는 슬롯은 importing/migrating 후 MIGRATE 명령으로 데이터를 이동한 후, setslot node를 사용해야 한다.

이 문서는 버전 3.2.0을 기준으로 만들었습니다.

사용법


CLUSTER SETSLOT MIGRATING

사용법: source-node> CLUSTER SETSLOT <slot> MIGRATING <destination-node-id>
다음은 7000번 서버에서 4998 슬롯을 7001번 서버로 보내기(migrating) 예약하는 명령이다.   4998 슬롯은 키 "key2"를 가지고 있다.   실제 이동은 SETSLOT <slot> NODE <node-id> 명령으로 한다.

127.0.0.1:7000> cluster setslot 4998 migrating 9c69d0294c880bdb76e43405abf2a8050ab13be8
OK

예약의 효과: 예약을 하면 그 슬롯에 더 이상 키를 입력받지 않아, 슬롯 이동을 수월하게 한다.

보내기 예약을 한 후 그 슬롯에 대한 키 입력 처리 방식

  • 예약 시점에 슬롯에 키가 있었다면, 그 키에 대한 명령은 정상적으로 처리된다.   "key2"가 슬롯 4998인데, 4998을 보내기 예약했을 때, SET, GET, DEL 명령 등은 정상적으로 처리된다.
  • 예약한 슬롯에 현재 키가 없는데, SET, GET, DEL 명령을 입력하면 다음과 같은 메시지가 나오고 처리되지 않는다.   예약한 시점에 키가 있다가 DEL로 삭제된 후에는 "현재 키가 없는 상태"이므로 다시 입력할 수 없다.
  • 127.0.0.1:7000> get key2
    (error) ASK 4998 127.0.0.1:7001
    127.0.0.1:7000> set key2 VALUE
    (error) ASK 4998 127.0.0.1:7001

CLUSTER SETSLOT IMPORTING

사용법: destination-node> CLUSTER SETSLOT <slot> IMPORTING <source-node-id>
다음은 7000번 서버에서 7001번이 가지고 있는 9189 슬롯을 가져오기 예약하는 명령이다.
가져오기 후에도 7001번 서버는 지정한 슬롯에 해당하는 키를 SET, GET, DEL 같은 명령을 실행할 수 있다.

127.0.0.1:7000> cluster setslot 9189 importing 9c69d0294c880bdb76e43405abf2a8050ab13be8
OK

CLUSTER SETSLOT STABLE

사용법: CLUSTER SETSLOT <slot> STABLE
보내기(migrating), 가져오기(importing) 예약을 취소하는 명령이다.
다음은 예약 후 cluster nodes로 정보를 조회해 본 다음 stable로 취소하고, 다시 조회해 본 것이다.

127.0.0.1:7000> cluster nodes
df85034d1e2296df6177a132e48dd8a567bc38d1 127.0.0.1:7000 myself,master - 0 0 6 connected 1-5000 [9189-<-9c69d0294c880bdb76e43405abf2a8050ab13be8]
127.0.0.1:7000> cluster setslot 9189 stable
OK
127.0.0.1:7000> cluster nodes
df85034d1e2296df6177a132e48dd8a567bc38d1 127.0.0.1:7000 myself,master - 0 0 6 connected 1-5000

CLUSTER SETSLOT NODE

사용법: source/destination-node> CLUSTER SETSLOT <slot> NODE <destination-node-id>
슬롯을 대상 노드로 이동시킨다.   슬롯은 비어있어야 한다.   이 명령은 source 노드와 destination 노드에서 각각 실행해야 한다.
보내기(migrating) 또는 가져오기(importing) 예약을 할 필요는 없다.   예약을 했던 하지 않았던 이동 명령은 실행된다.   슬롯에 키가 있다면 COUNTKEYSINSLOT, GETKEYSINSLOT으로 확인 후 MIGRATE 명령으로 키를 이동시킨다.
내부적으로 CLUSTER DELSLOTS과 ADDSLOTS을 실행한다.

많은 슬롯을 한 번에 이동하기 위해서 다음과 같이 쉘 명령을 이용할 수 있다.

# for i in {0..100};
do redis-cli -c -p 7000 cluster setslot $i node df85034d1e2296df6177a132e48dd8a567bc38d1;
done
OK

명령문

CLUSTER SETSLOT slot IMPORTING|MIGRATING|STABLE|NODE [node-id]

  • 이 명령은 version 3.0.0 부터 사용할 수 있다.
  • 논리적 처리 소요시간은 O(1)이다.

Clients for Java Jedis, Lettuce
Clients for C Hiredis


<< CLUSTER GETKEYSINSLOT CLUSTER SETSLOT CLUSTER SLOTS >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 답글이 올라오면 이메일로 알려드리겠습니다.