ex) 마스터(6382), 복제(6383), 센티널(5000)(defalut : 26379)
redis.conf
127.0.0.1:6383> slaveof 127.0.0.1 6382
127.0.0.1:6383> replicaof 127.0.0.1 6382
sentinel.conf
sentinel monitor mymaster 127.0.0.1 6382 1 : IP와 port 그리고 마지막 숫자를 1로 입력.
IP와 port는 감시할 마스터의 주소입니다. 마스터 주소만 설정하면 된다. 복제는 마스터에서 정보를 가져온다.
마지막 숫자(default 2)는 quorum(의사진행에 필요한 정족수)이라고 한다.
(기본적으로 3대 이상의 홀수로 센티넬을 구성하는것을 권장. defalut 2)
sentinel down-after-milliseconds mymaster 3000 : 단위는 millisecond 입니다.
이 값은 마스터가 다운되었다고 인지하는 시간이다.
즉, 마스터 서버에 정기적으로 PING을 보내는데, 이 시간 동안 응답이 없으면 다운된 것으로 판단하고 장애조치(failover) 작업을 시작한다. 30초는 매우 긴편이며 3~5초를 권장.
1. 레디스 마스터 중지 -> 레디스 클라이언트에서 shutdown 입력.
( sentinel down-after-milliseconds mymaster 3000 값에 따라 3초 후 failover)
12745:X 22:51:10.590 # +sdown master mymaster 127.0.0.1 6382
12745:X 22:51:10.590 # +odown master mymaster 127.0.0.1 6382 #quorum 1/1
12745:X 22:51:10.590 # +new-epoch 180001
12745:X 22:51:10.590 # +try-failover master mymaster 127.0.0.1 6382
12745:X 22:51:10.611 # +vote-for-leader 968dbf46cf52b2ba8bdb8a641020eaeded1a1b0d 180001
12745:X 22:51:10.611 # +elected-leader master mymaster 127.0.0.1 6382
12745:X 22:51:10.611 # +failover-state-select-slave master mymaster 127.0.0.1 6382
12745:X 22:51:10.677 # +selected-slave slave 127.0.0.1:6383 127.0.0.1 6383 @ mymaster 127.0.0.1 6382
12745:X 22:51:10.677 * +failover-state-send-slaveof-noone slave 127.0.0.1:6383 127.0.0.1 6383 @ mymaster 127.0.0.1 6382
12745:X 22:51:10.760 * +failover-state-wait-promotion slave 127.0.0.1:6383 127.0.0.1 6383 @ mymaster 127.0.0.1 6382
12745:X 22:51:11.658 # +promoted-slave slave 127.0.0.1:6383 127.0.0.1 6383 @ mymaster 127.0.0.1 6382
12745:X 22:51:11.658 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6382
12745:X 22:51:11.697 # +failover-end master mymaster 127.0.0.1 6382
12745:X 22:51:11.697 # +switch-master mymaster 127.0.0.1 6382 127.0.0.1 6383
12745:X 22:51:11.697 * +slave slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6383
12745:X 22:51:14.786 # +sdown slave 127.0.0.1:6382 127.0.0.1 6382 @ mymaster 127.0.0.1 6383
2. 센티널에 접속해서 마스터를 확인해 보면 6383으로 나온다.
127.0.0.1:5000> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6383,slaves=1,sentinels=1
3. 복제에서 마스터로 승격된 6383 서버의 메시지.
12735:S 22:51:07.524 # Connection with master lost.
12735:S 22:51:07.524 * Caching the disconnected master state.
12735:S 22:51:08.418 * Connecting to MASTER 127.0.0.1:6382
12735:S 22:51:08.418 * MASTER <-> SLAVE sync started
12735:S 22:51:08.418 # Error condition on socket for SYNC: Connection refused
12735:S 22:51:09.419 * Connecting to MASTER 127.0.0.1:6382
12735:S 22:51:09.419 * MASTER <-> SLAVE sync started
12735:S 22:51:09.419 # Error condition on socket for SYNC: Connection refused
12735:S 22:51:10.421 * Connecting to MASTER 127.0.0.1:6382
12735:S 22:51:10.421 * MASTER <-> SLAVE sync started
12735:S 22:51:10.421 # Error condition on socket for SYNC: Connection refused
12735:M 22:51:10.760 * Discarding previously cached master state.
12735:M 22:51:10.760 * MASTER MODE enabled (user request)
12735:M 22:51:10.761 # CONFIG REWRITE executed with success.
현재 상태 :
마스터(6382) -> down
복제(6383) -> Master로 승격
4. 다운되어 있는 6382 서버를 다시 시작.
13744:M 23:12:16.881 # Server started, Redis version 4.0.6
13744:M 23:12:16.882 * DB loaded from append only file: 0.000 seconds
13744:M 23:12:16.882 * The server is now ready to accept connections on port 6382
13744:S 23:12:26.939 * SLAVE OF 127.0.0.1:6383 enabled (user request)
13744:S 23:12:26.940 # CONFIG REWRITE executed with success.
13744:S 23:12:27.900 * Connecting to MASTER 127.0.0.1:6383
주의사항 : 레디스 버전 3.2.0은 6382 서버를 재 시작했을 때 버그로 인하여 복제로 전환되지 않는다. (3.2.1에서 수정됨)
2016년 6월 17일에 발표된 3.2.1 릴리즈 노트에 있는 버그 관련 내용
현재 상태 :
마스터(6382) -> down -> 복제
복제(6383) -> Master로 승격 -> 마스터
마스터(6382) -> 마스터 -> Down
복제(6383) -> Down -> Down
127.0.0.1:5000> sentinel get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6382"
127.0.0.1:5000> info sentinel
master0:name=mymaster,status=odown,address=127.0.0.1:6383,slaves=1,sentinels=1
마스터(6382) -> 마스터 -> Down -> Down
복제(6383) -> Down -> Down -> Start(복제)
Master -> Slave 6383(1차 복제) -> Slave 6384(2차 복제)
Master(6382) -> Down -> Start(Slave)
Slave1(6383) -> Master -> Master
Slave2(6384) -> Slave -> Slave
Slave 6382(1차 복제) <- Master 6383 -> Slave 6384(1차 복제)
| Redis - Hashes (1) | 2024.06.16 |
|---|---|
| Redis - Sorted Sets (0) | 2024.06.16 |
| Redis - Sets (0) | 2024.06.16 |
| Redis - Lists 데이터 타입, 명령어 (3) | 2024.06.16 |
| Redis - String 데이터 타입, 명령어 (1) | 2024.06.16 |