Redis Cluster Node 중 1개를 재시작하면 Cluster에서 빠지거나 데이터가 유실됐다
캐싱된 데이터가 없으면 에러가 발생하는 API들이 존재했기에 관련 Batch들을 전부 다시 돌려야했다
기존 Backup 데이터가 없기 때문이라 판단하여 RDB를 추가하기로 했다
Why RDB?
RDB, AOF 방식 중에 고민이 됐는데 스냅샷 방식인 RDB를 선택했다
우리가 해결하고 싶었던 것은 운영에서 무중단으로 재기동했을 때 정상 동작이었다
이는 RDB만으로 충분하고, 유지보수하기에도 편할 것이라 생각했다
그런데 이미 shutdown SAVE를 하면 스냅샷 저장이 되는데 운영에 적용이 안되고 있는지 의문이었다
Progress
설정 파일 수정
redis.conf
# 900초 동안 명령어 1개 이상 들어오면 스냅샷 생성
save 900 1
save 300 10
save 60 10000
# 스냅샷 Backup 파일 이름
dbfilename dump.rdb
# 스냅샷 Backup 파일 저장 경로# 기존에는 'dir ./'로 되어있다dir /data01/sw/redis/redis-5.0.5/data
# 스냅샷을 저장하다가 에러가 났을 때 write 명령어를 멈출 것이냐?# yes해서 운영중에 에러나면 아작나니 당연히 'no'로 하는 것이 좋다
stop-writes-on-bgsave-error no
127.0.0.1:6379> info replication
# Replication
role:slave
master_host: 마스터노드 Host
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:84296568300763
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b00db58b6dcb79e99d8d3b96d4908722d77ab843
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:84296568300763
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:84296567252188
repl_backlog_histlen:1048576
# master_link_status: 제대로 올라왔으면 up, 아니면 down# master_sync_in_progress: 마스터 노드와 sync 완료면 0, 진행중이면 1
Master - Slave 관계 바꾸기
Slave 노드는 그냥 껐켰해도 기존 Cluster 관계에 맞게 들어간다
Master 노드는 꺼지면 Slave 노드가 Master가 되버리기 때문에, 기존대로 Master로 올라오려고 하면 적용이 안 된다
나같은 경우는 아래 명령어로 Master-Slave를 일단 바꾼 다음에 Slave로 올리고, 기존 관계로 다시 돌렸다
127.0.0.1:6379> cluster failover
# 진행 순서
Master A ON - Slave B ON
Master B ON - Slave A ON <- failover
Master B ON SLAVE A OFF <- 'A' 재실행
Master A ON - Slave B ON <- failover
Backup 재실행 시 유의사항
Backup 데이터인 dump.rdb만 필요하면 된다고 생각했는데 이것만 있으면 Node가 기존 Cluster 관계 참조를 못한다
Redis는 설정 파일 dir 경로 값 경로에 dump.rdb뿐만 아니라 Cluster 구조가 들어간 node-6379.conf도 저장한다
Leave a comment