确认 Redis Sentinel 的运行情况

Redis Sentinel是一种高可用性解决方案,它可以检测到主服务器的故障,并动态地将复制品升级为主服务器。本文将解释当主服务器崩溃时的操作。我们将介绍主服务器的redis-server进程崩溃的情况。

Redis Sentinel Diagram-masterdown.jpg

准备Redis Sentinel

准备 Redis Sentinel 的配置。使用 Akamai 公司提供的环境,正如下述文章所述。

 

Redis Sentinel Diagram-normal.jpg

请确认Redis Sentinel的版本

redissentinel-tokyo1:/etc/redis# redis-server --version
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=3af367a78d5e21e9
redissentinel-tokyo1:/etc/redis# redis-sentinel --version
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=3af367a78d5e21e9

停止主服务器。

我们将验证当计划停止主服务器时的操作。

systemctl stop redis-server
Redis Sentinel Diagram-masterdown.jpg

Redis服务器已停止,但Redis Sentinel仍在运行。

师傅的更替过程

Redis Sentinel Diagram-masterchange.jpg

通过查看每个服务器的日志来确认主服务器的变化方式。

Redis_1 (停止主服务器)

让我们来查看当 Redis 服务器停止时的日志记录。

/变量/日志/Redis/Redis.log

21223:signal-handler (1688124943) Received SIGTERM scheduling shutdown...
21223:signal-handler (1688124943) Received SIGTERM scheduling shutdown...
21223:M 30 Jun 2023 11:35:43.835 # User requested shutdown...
21223:M 30 Jun 2023 11:35:43.836 * Waiting for replicas before shutting down.
21223:M 30 Jun 2023 11:35:44.743 * 2 of 2 replicas are in sync when shutting down.
21223:M 30 Jun 2023 11:35:44.743 * Saving the final RDB snapshot before exiting.
21223:M 30 Jun 2023 11:35:44.747 * DB saved on disk
21223:M 30 Jun 2023 11:35:44.747 * Removing the pid file.
21223:M 30 Jun 2023 11:35:44.747 # Redis is now ready to exit, bye bye...
    • TERM のシグナルを受け取っています。

 

    • shutdown するときに、2つのレプリカが同期しています。

 

    データをファイルに保存している。ファイルは /var/lib/redis/dump.rdb になります。

/var/log/redis/sentinel.log 可能的中文翻译选项:
/变量/日志/redis/哨兵.log

21283:X 30 Jun 2023 11:36:13.904 # +sdown master mymaster 192.168.198.87 6379
21283:X 30 Jun 2023 11:36:14.931 * Sentinel new configuration saved on disk
21283:X 30 Jun 2023 11:36:14.931 # +new-epoch 1
21283:X 30 Jun 2023 11:36:14.933 * Sentinel new configuration saved on disk
21283:X 30 Jun 2023 11:36:14.933 # +vote-for-leader 1c87ce18ee98b4373cf3d26826893e7fedc29d88 1
21283:X 30 Jun 2023 11:36:15.002 # +odown master mymaster 192.168.198.87 6379 #quorum 2/2
21283:X 30 Jun 2023 11:36:15.003 # Next failover delay: I will not start a failover before Fri Jun 30 11:42:15 2023
21283:X 30 Jun 2023 11:36:16.195 # +config-update-from sentinel 1c87ce18ee98b4373cf3d26826893e7fedc29d88 192.168.198.103 26379 @ mymaster 192.168.198.87 6379
21283:X 30 Jun 2023 11:36:16.196 # +switch-master mymaster 192.168.198.87 6379 192.168.198.103 6379
21283:X 30 Jun 2023 11:36:16.197 * +slave slave 192.168.198.112:6379 192.168.198.112 6379 @ mymaster 192.168.198.103 6379
21283:X 30 Jun 2023 11:36:16.197 * +slave slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379
21283:X 30 Jun 2023 11:36:16.202 * Sentinel new configuration saved on disk

11:36:13.904 の時間に 192.168.198.87 (redissentinel-tokyo1) のダウンを検知している。この時間は redis-server が SIGTERM を受け取った 11:35:43.835 から約 30 秒後になります。
sentinel.conf ファイルを更新している。マスターとレプリカの状態をコンフィグファイルに記録して書き換えています。
マスターサーバがダウンしたことを多数決で決定しています。
6 分間の間は次のフェールオーバーが起きないように設定している。
マスターを 192.168.198.103 (redissentinel-tokyo2) に設定している。

192.168.198.112 (redissentinel-tokyo3) をレプリカに設定している。

192.168.198.87 (redissentinel-tokyo1) をレプリカと設定している。
sentinel.conf ファイルを更新している。

Redis_2(从副本升级为主节点)

/var/log/redis/redis.log – Redis的日志文件路径

17497:S 30 Jun 2023 11:36:14.899 * MASTER <-> REPLICA sync started
17497:S 30 Jun 2023 11:36:14.900 # Error condition on socket for SYNC: (null)
17497:M 30 Jun 2023 11:36:15.137 * Discarding previously cached master state.
17497:M 30 Jun 2023 11:36:15.137 # Setting secondary replication ID to fac9e97e4769636aa327dbdf17c54bbfe8e2a5dc, valid up to offset: 16450434. New replication ID is 4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a
17497:M 30 Jun 2023 11:36:15.137 * MASTER MODE enabled (user request from 'id=8 addr=192.168.198.103:60290 laddr=192.168.198.103:6379 fd=12 name=sentinel-1c87ce18-cmd age=77344 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 qbuf=188 qbuf-free=20286 argv-mem=4 multi-mem=169 rbs=4096 rbp=2048 obl=45 oll=0 omem=0 tot-mem=25637 events=r cmd=exec user=default redir=-1 resp=2')
17497:M 30 Jun 2023 11:36:15.152 # CONFIG REWRITE executed with success.
17497:M 30 Jun 2023 11:36:16.372 * Replica 192.168.198.112:6379 asks for synchronization
17497:M 30 Jun 2023 11:36:16.373 * Partial resynchronization request from 192.168.198.112:6379 accepted. Sending 312 bytes of backlog starting from offset 16450434.
    • マスターとの SYNC の失敗を検知している

 

    • マスターに昇格している

 

    • CONFIG REWRITE を実行している

192.168.198.112 (redissentinel-tokyo3) に SYNC を依頼している。

/变量/日志/雷蒂斯/哨兵/日志

17725:X 30 Jun 2023 11:36:14.820 # +sdown master mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:14.921 # +odown master mymaster 192.168.198.87 6379 #quorum 2/2
17725:X 30 Jun 2023 11:36:14.921 # +new-epoch 1
17725:X 30 Jun 2023 11:36:14.922 # +try-failover master mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:14.924 * Sentinel new configuration saved on disk
17725:X 30 Jun 2023 11:36:14.924 # +vote-for-leader 1c87ce18ee98b4373cf3d26826893e7fedc29d88 1
17725:X 30 Jun 2023 11:36:14.934 # b2987056e452e83d9dbf86321430f0e05e6f701c voted for 1c87ce18ee98b4373cf3d26826893e7fedc29d88 1
17725:X 30 Jun 2023 11:36:14.941 # 79552dceee192b3e37e9bc97ef783d11b7056436 voted for 1c87ce18ee98b4373cf3d26826893e7fedc29d88 1
17725:X 30 Jun 2023 11:36:15.015 # +elected-leader master mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:15.016 # +failover-state-select-slave master mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:15.072 # +selected-slave slave 192.168.198.103:6379 192.168.198.103 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:15.072 * +failover-state-send-slaveof-noone slave 192.168.198.103:6379 192.168.198.103 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:15.136 * +failover-state-wait-promotion slave 192.168.198.103:6379 192.168.198.103 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.184 * Sentinel new configuration saved on disk
17725:X 30 Jun 2023 11:36:16.185 # +promoted-slave slave 192.168.198.103:6379 192.168.198.103 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.185 # +failover-state-reconf-slaves master mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.193 * +slave-reconf-sent slave 192.168.198.112:6379 192.168.198.112 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.424 * +slave-reconf-inprog slave 192.168.198.112:6379 192.168.198.112 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.425 * +slave-reconf-done slave 192.168.198.112:6379 192.168.198.112 6379 @ mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.500 # +failover-end master mymaster 192.168.198.87 6379
17725:X 30 Jun 2023 11:36:16.501 # +switch-master mymaster 192.168.198.87 6379 192.168.198.103 6379
17725:X 30 Jun 2023 11:36:16.502 * +slave slave 192.168.198.112:6379 192.168.198.112 6379 @ mymaster 192.168.198.103 6379
17725:X 30 Jun 2023 11:36:16.502 * +slave slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379
17725:X 30 Jun 2023 11:36:16.507 * Sentinel new configuration saved on disk
17725:X 30 Jun 2023 11:36:46.593 # +sdown slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379

11:36:14.820 に マスターである192.168.198.87 (redissentinel-tokyo1) のダウンを検知している。
何度も確認が行われている。
最終的に、192.168.198.103 (redissentinel-tokyo2) をマスターとして選出している。
Sentinel のコンフィグレーションファイルを変更している。

192.168.198.87 (redissentinel-tokyo1) はレプリカとしてダウンを検知している。

Redis_3 (复制品 -> 复制品)

/变量/日志/redis/redis.log

17366:S 30 Jun 2023 11:36:14.343 # Error condition on socket for SYNC: (null)
17366:S 30 Jun 2023 11:36:15.349 * Connecting to MASTER 192.168.198.87:6379
17366:S 30 Jun 2023 11:36:15.349 * MASTER <-> REPLICA sync started
17366:S 30 Jun 2023 11:36:15.349 # Error condition on socket for SYNC: (null)
17366:S 30 Jun 2023 11:36:16.193 * Connecting to MASTER 192.168.198.103:6379
17366:S 30 Jun 2023 11:36:16.194 * MASTER <-> REPLICA sync started
17366:S 30 Jun 2023 11:36:16.194 * REPLICAOF 192.168.198.103:6379 enabled (user request from 'id=7 addr=192.168.198.103:33152 laddr=192.168.198.112:6379 fd=12 name=sentinel-1c87ce18-cmd age=77345 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 qbuf=348 qbuf-free=20126 argv-mem=4 multi-mem=183 rbs=8192 rbp=4096 obl=45 oll=0 omem=0 tot-mem=29747 events=r cmd=exec user=default redir=-1 resp=2')
17366:S 30 Jun 2023 11:36:16.219 # CONFIG REWRITE executed with success.
17366:S 30 Jun 2023 11:36:16.345 * Non blocking connect for SYNC fired the event.
17366:S 30 Jun 2023 11:36:16.356 * Master replied to PING, replication can continue...
17366:S 30 Jun 2023 11:36:16.370 * Trying a partial resynchronization (request fac9e97e4769636aa327dbdf17c54bbfe8e2a5dc:16450434).
17366:S 30 Jun 2023 11:36:16.372 * Successful partial resynchronization with master.
17366:S 30 Jun 2023 11:36:16.372 # Master replication ID changed to 4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a
17366:S 30 Jun 2023 11:36:16.372 * MASTER <-> REPLICA sync: Master accepted a Partial Resynchronization.
    • SYNC の失敗を検知している

192.168.198.103 (redissentinel-tokyo2) をマスターと見なし同期をしている。
CONFIG REWRITE を実行している
マスターが PING 応答をし、レプリケーションが継続される。
マスターと部分的な同期が行われた。

/var/log/redis/sentinel.log 的原文進行中文翻譯

17574:X 30 Jun 2023 11:36:14.933 * Sentinel new configuration saved on disk
17574:X 30 Jun 2023 11:36:14.934 # +new-epoch 1
17574:X 30 Jun 2023 11:36:14.938 * Sentinel new configuration saved on disk
17574:X 30 Jun 2023 11:36:14.939 # +vote-for-leader 1c87ce18ee98b4373cf3d26826893e7fedc29d88 1
17574:X 30 Jun 2023 11:36:15.840 # +sdown master mymaster 192.168.198.87 6379
17574:X 30 Jun 2023 11:36:15.894 # +odown master mymaster 192.168.198.87 6379 #quorum 3/2
17574:X 30 Jun 2023 11:36:15.895 # Next failover delay: I will not start a failover before Fri Jun 30 11:42:15 2023
17574:X 30 Jun 2023 11:36:16.198 # +config-update-from sentinel 1c87ce18ee98b4373cf3d26826893e7fedc29d88 192.168.198.103 26379 @ mymaster 192.168.198.87 6379
17574:X 30 Jun 2023 11:36:16.199 # +switch-master mymaster 192.168.198.87 6379 192.168.198.103 6379
17574:X 30 Jun 2023 11:36:16.200 * +slave slave 192.168.198.112:6379 192.168.198.112 6379 @ mymaster 192.168.198.103 6379
17574:X 30 Jun 2023 11:36:16.200 * +slave slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379
17574:X 30 Jun 2023 11:36:16.206 * Sentinel new configuration saved on disk
17574:X 30 Jun 2023 11:36:46.209 # +sdown slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379
    • sentinel.conf ファイルを更新している。

 

    • マスターであった 192.168.198.87 (redissentinel-tokyo1) のダウンを検知している。

 

    • 6 分間は次のフェールオーバーが起きないように設定している。

 

    • マスターを 192.168.198.103 (redissentinel-tokyo2) にしている。

192.168.198.87 (redissentinel-tokyo1) をレプリカと設定している。
sentinel.conf ファイルを更新している。
スレーブの 192.168.198.87 (redissentinel-tokyo1) のダウンを記録している

使用redis-cli命令检查主/从复制状态。

redis_1(服务器崩溃)

redisclient:~# redis-cli -h redissentinel-tokyo1 --tls --cacert redissentinel-tokyo_ca.crt
Could not connect to Redis at redissentinel-tokyo1:6379: Connection refused

Redis_2 (从副本升级为主节点)

redisclient:~# redis-cli -h redissentinel-tokyo2 --tls --cacert redissentinel-tokyo_ca.crt
redissentinel-tokyo2:6379> ping
PONG
redissentinel-tokyo2:6379> role
1) "master"
2) (integer) 16492964
3) 1) 1) "192.168.198.112"
      2) "6379"
      3) "16492819"
redissentinel-tokyo2:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.198.112,port=6379,state=online,offset=16495596,lag=1
master_failover_state:no-failover
master_replid:4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a
master_replid2:fac9e97e4769636aa327dbdf17c54bbfe8e2a5dc
master_repl_offset:16495596
second_repl_offset:16450434
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15432268
repl_backlog_histlen:1063329
redissentinel-tokyo2:6379>

通过升级为大师级,可以进行帖子的写作。

redisclient:~# redis-cli -h redissentinel-tokyo2 --tls --cacert redissentinel-tokyo_ca.crt
redissentinel-tokyo2:6379> get scott
"dixon"
redissentinel-tokyo2:6379> set scott tiger
OK
redissentinel-tokyo2:6379> get scott
"tiger"

Redis 3(没有从副本更改角色)

redisclient:~# redis-cli -h redissentinel-tokyo3 --tls --cacert redissentinel-tokyo_ca.crt
redissentinel-tokyo3:6379> ping
PONG
redissentinel-tokyo3:6379> role
1) "slave"
2) "192.168.198.103"
3) (integer) 6379
4) "connected"
5) (integer) 16501266
redissentinel-tokyo3:6379> info replication
# Replication
role:slave
master_host:192.168.198.103
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:16503016
slave_repl_offset:16503016
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a
master_replid2:fac9e97e4769636aa327dbdf17c54bbfe8e2a5dc
master_repl_offset:16503016
second_repl_offset:16450434
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15452708
repl_backlog_histlen:1050309
redissentinel-tokyo3:6379

重新启动Redis_1

Redis Sentinel Diagram-slaveup.jpg

Redis_1

redissentinel-tokyo1:/etc/redis# systemctl start redis-server

/变量/记录/Redis/服务器/日志

31517:M 30 Jun 2023 11:41:26.650 * Ready to accept connections
31517:S 30 Jun 2023 11:41:37.261 * Before turning into a replica, using my own master parameters to synthesize a cached master: I may be able to synchronize with the new master with just a partial transfer.
31517:S 30 Jun 2023 11:41:37.262 * Connecting to MASTER 192.168.198.103:6379
31517:S 30 Jun 2023 11:41:37.262 * MASTER <-> REPLICA sync started
31517:S 30 Jun 2023 11:41:37.262 * REPLICAOF 192.168.198.103:6379 enabled (user request from 'id=3 addr=192.168.198.112:47512 laddr=192.168.198.87:6379 fd=9 name=sentinel-79552dce-cmd age=10 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 qbuf=203 qbuf-free=20271 argv-mem=4 multi-mem=183 rbs=1024 rbp=1024 obl=45 oll=0 omem=0 tot-mem=22579 events=r cmd=exec user=default redir=-1 resp=2')
31517:S 30 Jun 2023 11:41:37.354 # CONFIG REWRITE executed with success.
31517:S 30 Jun 2023 11:41:37.392 * Non blocking connect for SYNC fired the event.
31517:S 30 Jun 2023 11:41:37.401 * Master replied to PING, replication can continue...
31517:S 30 Jun 2023 11:41:37.412 * Trying a partial resynchronization (request ea8357aacfed619a5e0d9df56ada81fdbe5d73c9:16452771).
31517:S 30 Jun 2023 11:41:42.321 * Full resync from master: 4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a:16520922
31517:S 30 Jun 2023 11:41:42.324 * MASTER <-> REPLICA sync: receiving streamed RDB from master with EOF to disk
31517:S 30 Jun 2023 11:41:42.324 * Discarding previously cached master state.
31517:S 30 Jun 2023 11:41:42.325 * MASTER <-> REPLICA sync: Flushing old data
31517:S 30 Jun 2023 11:41:42.325 * MASTER <-> REPLICA sync: Loading DB in memory
31517:S 30 Jun 2023 11:41:42.327 * Loading RDB produced by version 7.0.7
31517:S 30 Jun 2023 11:41:42.328 * RDB age 0 seconds
31517:S 30 Jun 2023 11:41:42.328 * RDB memory usage when created 2.51 Mb
31517:S 30 Jun 2023 11:41:42.328 * Done loading RDB, keys loaded: 1, keys expired: 0.
31517:S 30 Jun 2023 11:41:42.328 * MASTER <-> REPLICA sync: Finished with success

    • マスターの 192.168.198.103 (redissentinel-tokyo2) に接続している。

 

    • マスターから同期している。

 

    • CONFIG WRITE を実行している。

 

    • 以前のマスターの状態を破棄している。

 

    マスターからの同期を完了している。

/var/log/redis/sentinel.log

/var/log/redis/sentinel.log

21283:X 30 Jun 2023 11:41:27.658 # -sdown slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379

192.168.198.87 (redissentinel-tokyo1)のダウンの状況を解除しています。

使用redis-cli来进行连接

我可以连接作为副本。

redisclient:~# redis-cli -h redissentinel-tokyo1 --tls --cacert redissentinel-tokyo_ca.crt
redissentinel-tokyo1:6379> ping
PONG
redissentinel-tokyo1:6379> role
1) "slave"
2) "192.168.198.103"
3) (integer) 6379
4) "connected"
5) (integer) 16549337
redissentinel-tokyo1:6379> info replication
# Replication
role:slave
master_host:192.168.198.103
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:16550074
slave_repl_offset:16550074
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:16550074
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:16520923
repl_backlog_histlen:29152

Redis_2

/变量/日志/redis/服务端/日志

17497:M 30 Jun 2023 11:41:37.414 * Replica 192.168.198.87:6379 asks for synchronization
17497:M 30 Jun 2023 11:41:37.414 * Partial resynchronization not accepted: Replication ID mismatch (Replica asked for 'ea8357aacfed619a5e0d9df56ada81fdbe5d73c9', my replication IDs are '4831258c3aa4c7d8d6c9e0eb1244acb86c511c8a' and 'fac9e97e4769636aa327dbdf17c54bbfe8e2a5dc')
17497:M 30 Jun 2023 11:41:37.414 * Delay next BGSAVE for diskless SYNC
17497:M 30 Jun 2023 11:41:42.321 * Starting BGSAVE for SYNC with target: replicas sockets
17497:M 30 Jun 2023 11:41:42.322 * Background RDB transfer started by pid 28448
28448:C 30 Jun 2023 11:41:42.325 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
17497:M 30 Jun 2023 11:41:42.326 # Diskless rdb transfer, done reading from pipe, 1 replicas still up.
17497:M 30 Jun 2023 11:41:42.331 * Background RDB transfer terminated with success
17497:M 30 Jun 2023 11:41:42.331 * Streamed RDB transfer with replica 192.168.198.87:6379 succeeded (socket). Waiting for REPLCONF ACK from slave to enable streaming
17497:M 30 Jun 2023 11:41:42.331 * Synchronization with replica 192.168.198.87:6379 succeeded

192.168.198.87 (redissentinel-tokyo1)と同期しています。

/var/log/redis/sentinel.log 可以用以下方式翻译成中文:
/变量/日志/雷迪斯/哨兵.log

17725:X 30 Jun 2023 11:41:27.664 # -sdown slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379

192.168.198.87 (redissentinel-tokyo1)のダウンの状況を解除しています。

Redis_3 = Redis三

/变量/日志/雷迪斯/服务器/日志

no log

/var/log/redis/sentinel.log 的中文翻译是什么?

17574:X 30 Jun 2023 11:41:27.196 # -sdown slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379
17574:X 30 Jun 2023 11:41:37.260 * +convert-to-slave slave 192.168.198.87:6379 192.168.198.87 6379 @ mymaster 192.168.198.103 6379

192.168.198.87 (redissentinel-tokyo1)のダウンの状況を解除しています。

配置文件的更改差异

Redis_1

redissentinel-tokyo1:/etc/redis# diff redis.conf.before redis.conf.after
> latency-tracking-info-percentiles 50 99 99.9
> replicaof 192.168.198.103 6379
> save 3600 1
> save 300 100
> save 60 10000
    スナップショットを取るタイミングの設定が追加されています。
redissentinel-tokyo1:/etc/redis# diff sentinel.conf.before sentinel.conf.after

< sentinel config-epoch mymaster 0
< sentinel leader-epoch mymaster 0
< sentinel current-epoch 0
---
> sentinel config-epoch mymaster 1
> sentinel leader-epoch mymaster 1
> sentinel current-epoch 1

< sentinel monitor mymaster 192.168.198.87 6379 2
---
> sentinel monitor mymaster 192.168.198.103 6379 2

< sentinel known-replica mymaster 192.168.198.103 6379
---
> sentinel known-replica mymaster 192.168.198.87 6379
    マスターとレプリカの IP を変更しています。

redis_2 – 重复 2

redissentinel-tokyo2:/etc/redis#  diff redis.conf.before redis.conf.after
> requirepass "y+8erSZr9YHAUIzA19zkxaS/8d+kjx4tMJ0zWqBqjuE="
> save 3600 1
> save 300 100
> save 60 10000
> latency-tracking-info-percentiles 50 99 99.9
    スナップショットを取るタイミングの設定が追加されています。
redissentinel-tokyo2:/etc/redis# diff sentinel.conf.before sentinel.conf.after

< sentinel config-epoch mymaster 0
< sentinel leader-epoch mymaster 0
< sentinel current-epoch 0

> sentinel config-epoch mymaster 1
> sentinel leader-epoch mymaster 1
> sentinel current-epoch 1
---
< sentinel monitor mymaster 192.168.198.87 6379 2
> sentinel monitor mymaster 192.168.198.103 6379 2

< sentinel known-replica mymaster 192.168.198.103 6379
> sentinel known-replica mymaster 192.168.198.87 6379
    マスターとレプリカの IP を変更しています。

Redis_3可以用中文翻译为”Redis三”。

redissentinel-tokyo3:/etc/redis# diff  --suppress-common-lines redis.conf.before redis.conf.after
< supervised auto
---
> supervised systemd
> save 3600 1
> save 300 100
> save 60 10000
> latency-tracking-info-percentiles 50 99 99.9
    スナップショットを取るタイミングの設定が追加されています。
redis_3_redis_diff.jpg
redissentinel-tokyo3:/etc/redis# diff  --suppress-common-lines sentinel.conf.before sentinel.conf.after
12,14c12,14
< sentinel config-epoch mymaster 0
< sentinel leader-epoch mymaster 0
< sentinel current-epoch 0
---
> sentinel config-epoch mymaster 1
> sentinel leader-epoch mymaster 1
> sentinel current-epoch 1
26c26
< sentinel monitor mymaster 192.168.198.87 6379 2
---
> sentinel monitor mymaster 192.168.198.103 6379 2
28c28
< sentinel known-replica mymaster 192.168.198.103 6379
---
> sentinel known-replica mymaster 192.168.198.87 6379
    マスターとレプリカの IP を変更しています。
redis_3_sentinel_diff.jpg

总结

redis-sentinel は、redis-server のマスターサーバーの障害を検出し、redis-server のマスター・レプリカの関係を動的に変更することができました。レプリカは常にマスターのコピーを持つように設計されているため、レプリカがマスターに昇格すると、それまでに同期されたデータは引き続き使用できることがわかりました。マスターの昇格には約30秒かかり、その間はRedisサーバーへの書き込みができなくなります。