Redis基础:哨兵模式下主节点宕机的自动对应

在上一篇文章中,介绍了Redis哨兵模式的构建,这篇文章继续来看一下主节点宕机的情况下的自动对应方式。

环境构建

详细的环境构建可参看:

动作确认

主从模式的动作确认,可以看到主节点用于写,从节点用于读。

liumiaocn:redis liumiao$ redis-cli -p 6379
127.0.0.1:6379> auth liumiaocn@server
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name "liumiao"
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"liumiao"
127.0.0.1:6379> exit
liumiaocn:redis liumiao$ redis-cli -p 6380
127.0.0.1:6380> auth liumiaocn@server
OK
127.0.0.1:6380> keys *
1) "name"
127.0.0.1:6380> get name
"liumiao"
127.0.0.1:6380> set version 0.1
(error) READONLY You can't write against a read only replica.
127.0.0.1:6380> exit
liumiaocn:redis liumiao$ 
liumiaocn:redis liumiao$ redis-cli -p 6381
127.0.0.1:6381> auth liumiaocn@server
OK
127.0.0.1:6381> keys *
1) "name"
127.0.0.1:6381> get name
"liumiao"
127.0.0.1:6381> set version 0.1
(error) READONLY You can't write against a read only replica.
127.0.0.1:6381> exit
liumiaocn:redis liumiao$ 

停止主节点

liumiaocn:redis liumiao$ docker stop redis-master
redis-master
liumiaocn:redis liumiao$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
d6084a0e9d2e        redis:6.0.4         "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       6379/tcp, 0.0.0.0:6381->6381/tcp     redis-slave-2
e751670b0059        redis:6.0.4         "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       6379/tcp, 0.0.0.0:26381->26379/tcp   redis-sentinel-3
ad5a080315d3        redis:6.0.4         "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       6379/tcp, 0.0.0.0:26380->26379/tcp   redis-sentinel-2
c55e3c715994        redis:6.0.4         "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       6379/tcp, 0.0.0.0:26379->26379/tcp   redis-sentinel-1
34a10aac06fe        redis:6.0.4         "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       6379/tcp, 0.0.0.0:6380->6380/tcp     redis-slave-1
liumiaocn:redis liumiao$

确认动作

从如下日志中可以详细看到主节点宕机之后哨兵模式的举动

redis-master | 1:signal-handler (1591494876) Received SIGTERM scheduling shutdown...
redis-master | 1:M 07 Jun 2020 01:54:36.142 # User requested shutdown...
redis-master | 1:M 07 Jun 2020 01:54:36.142 * Calling fsync() on the AOF file.
redis-master | 1:M 07 Jun 2020 01:54:36.142 # Redis is now ready to exit, bye bye...
redis-slave-2 | 1:S 07 Jun 2020 01:54:36.236 # Connection with master lost.
redis-slave-2 | 1:S 07 Jun 2020 01:54:36.236 * Caching the disconnected master state.
redis-slave-1 | 1:S 07 Jun 2020 01:54:36.237 # Connection with master lost.
redis-slave-1 | 1:S 07 Jun 2020 01:54:36.237 * Caching the disconnected master state.
redis-slave-2 | 1:S 07 Jun 2020 01:54:36.728 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:36.728 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:36.729 # Error condition on socket for SYNC: Operation now in progress
redis-master exited with code 0
redis-slave-1 | 1:S 07 Jun 2020 01:54:36.953 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:36.953 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:36.954 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:37.741 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:37.742 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:37.742 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:37.966 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:37.966 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:37.967 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:38.757 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:38.757 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:38.758 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:38.981 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:38.981 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:38.982 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:39.771 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:39.771 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:39.772 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:39.994 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:39.994 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:39.995 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:40.785 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:40.786 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:40.787 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:41.007 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:41.007 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:41.008 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:41.800 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:41.800 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:41.801 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:42.017 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:42.017 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:42.018 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:42.814 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:42.814 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:42.816 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:43.037 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:43.037 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:43.038 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:43.831 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:43.831 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:43.832 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:44.049 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:44.050 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:44.051 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:44.845 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:44.846 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:44.846 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:45.065 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:45.066 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:45.066 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:45.859 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:45.859 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:45.860 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:46.078 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:46.078 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:46.079 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:46.878 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:46.878 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:46.879 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:47.091 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:47.092 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:47.092 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:47.890 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:47.890 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:47.891 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:48.103 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:48.103 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:48.104 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:48.904 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:48.905 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:48.906 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:49.114 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:49.114 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:49.115 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:49.920 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:49.920 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:49.921 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:50.126 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:50.126 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:50.127 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:50.933 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:50.934 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:50.935 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:51.144 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:51.144 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:51.145 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:51.948 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:51.949 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:51.950 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:52.155 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:52.155 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:52.156 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:52.964 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:52.964 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:52.965 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:53.168 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:53.168 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:53.169 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:53.980 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:53.980 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:53.981 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:54.182 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:54.182 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:54.183 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:54.995 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:54.995 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:54.996 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:55.198 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:55.198 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:55.199 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:56.003 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:56.003 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:56.004 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:56.206 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:56.206 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:56.207 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:57.011 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:57.012 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:57.013 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:57.213 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:57.213 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:57.214 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:58.022 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:58.022 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:58.023 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:58.225 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:58.225 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:58.226 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:54:59.039 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:54:59.039 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:54:59.039 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:54:59.242 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:54:59.242 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:54:59.243 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:00.052 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:00.053 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:00.053 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:55:00.254 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:00.254 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:00.255 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:01.065 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:01.065 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:01.066 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:55:01.268 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:01.269 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:01.270 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:02.079 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:02.079 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:02.080 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:55:02.281 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:02.282 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:02.282 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:03.091 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:03.091 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:03.092 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:55:03.296 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:03.296 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:03.297 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:04.109 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:04.109 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:04.110 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:55:04.312 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:04.312 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:04.313 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:05.123 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:05.123 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:05.125 # Error condition on socket for SYNC: Operation now in progress
redis-slave-1 | 1:S 07 Jun 2020 01:55:05.327 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:05.327 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:05.328 # Error condition on socket for SYNC: Operation now in progress
redis-slave-2 | 1:S 07 Jun 2020 01:55:06.137 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:06.137 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:06.138 # Error condition on socket for SYNC: Operation now in progress
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:06.303 # +sdown master redismaster 192.168.31.242 6379
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:06.334 # +sdown master redismaster 192.168.31.242 6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:06.338 * Connecting to MASTER 192.168.31.242:6379
redis-slave-1 | 1:S 07 Jun 2020 01:55:06.339 * MASTER <-> REPLICA sync started
redis-slave-1 | 1:S 07 Jun 2020 01:55:06.339 # Error condition on socket for SYNC: Operation now in progress
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.342 # +sdown master redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.401 # +odown master redismaster 192.168.31.242 6379 #quorum 3/2
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.401 # +new-epoch 1
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.401 # +try-failover master redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.410 # +vote-for-leader 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 1
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:06.416 # +new-epoch 1
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:06.417 # +new-epoch 1
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:06.421 # +vote-for-leader 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 1
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.422 # 96f68c8a1b158d081d3c1268d220e82c5c480abb voted for 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 1
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:06.423 # +vote-for-leader 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 1
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.423 # 3258fb06b016bbdeecd506e08b343284c918a276 voted for 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 1
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:06.437 # +odown master redismaster 192.168.31.242 6379 #quorum 2/2
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:06.437 # Next failover delay: I will not start a failover before Sun Jun  7 02:01:07 2020
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.488 # +elected-leader master redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.488 # +failover-state-select-slave master redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.568 # +selected-slave slave 192.168.240.1:6380 192.168.240.1 6380 @ redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.568 * +failover-state-send-slaveof-noone slave 192.168.240.1:6380 192.168.240.1 6380 @ redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:06.632 * +failover-state-wait-promotion slave 192.168.240.1:6380 192.168.240.1 6380 @ redismaster 192.168.31.242 6379
redis-slave-1 | 1:M 07 Jun 2020 01:55:06.633 * Discarding previously cached master state.
redis-slave-1 | 1:M 07 Jun 2020 01:55:06.633 # Setting secondary replication ID to f242fca3ad938609e70c192a0c492b4bfa97fc31, valid up to offset: 155479. New replication ID is fed9d713dbcc34e732346a9e08648a679095fabc
redis-slave-1 | 1:M 07 Jun 2020 01:55:06.633 * MASTER MODE enabled (user request from 'id=9 addr=192.168.240.1:55840 fd=13 name=sentinel-1b9edaa4-cmd age=746 idle=0 flags=x db=0 sub=0 psub=0 multi=4 qbuf=188 qbuf-free=32580 obl=45 oll=0 omem=0 events=r cmd=exec user=default')
redis-slave-2 | 1:S 07 Jun 2020 01:55:07.149 * Connecting to MASTER 192.168.31.242:6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:07.149 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:07.150 # Error condition on socket for SYNC: Operation now in progress
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:07.193 # +promoted-slave slave 192.168.240.1:6380 192.168.240.1 6380 @ redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:07.193 # +failover-state-reconf-slaves master redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:07.257 * +slave-reconf-sent slave 192.168.240.1:6381 192.168.240.1 6381 @ redismaster 192.168.31.242 6379
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:07.257 # +config-update-from sentinel 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 192.168.240.2 26379 @ redismaster 192.168.31.242 6379
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:07.258 # +config-update-from sentinel 1b9edaa4b9ef749ee8c12a10c10b65a2a34542a1 192.168.240.2 26379 @ redismaster 192.168.31.242 6379
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:07.258 # +switch-master redismaster 192.168.31.242 6379 192.168.240.1 6380
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:07.258 * +slave slave 192.168.240.1:6381 192.168.240.1 6381 @ redismaster 192.168.240.1 6380
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:07.258 * +slave slave 192.168.31.242:6379 192.168.31.242 6379 @ redismaster 192.168.240.1 6380
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:07.257 # +switch-master redismaster 192.168.31.242 6379 192.168.240.1 6380
redis-slave-2 | 1:S 07 Jun 2020 01:55:07.258 * REPLICAOF 192.168.240.1:6380 enabled (user request from 'id=10 addr=192.168.240.1:59872 fd=14 name=sentinel-1b9edaa4-cmd age=747 idle=0 flags=x db=0 sub=0 psub=0 multi=4 qbuf=345 qbuf-free=32423 obl=45 oll=0 omem=0 events=r cmd=exec user=default')
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:07.259 * +slave slave 192.168.240.1:6381 192.168.240.1 6381 @ redismaster 192.168.240.1 6380
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:07.259 * +slave slave 192.168.31.242:6379 192.168.31.242 6379 @ redismaster 192.168.240.1 6380
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:07.498 * +slave-reconf-inprog slave 192.168.240.1:6381 192.168.240.1 6381 @ redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:07.587 # -odown master redismaster 192.168.31.242 6379
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.158 * Connecting to MASTER 192.168.240.1:6380
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.158 * MASTER <-> REPLICA sync started
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.158 * Non blocking connect for SYNC fired the event.
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.160 * Master replied to PING, replication can continue...
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.162 * Trying a partial resynchronization (request f242fca3ad938609e70c192a0c492b4bfa97fc31:155479).
redis-slave-1 | 1:M 07 Jun 2020 01:55:08.162 * Replica 192.168.240.1:6381 asks for synchronization
redis-slave-1 | 1:M 07 Jun 2020 01:55:08.162 * Partial resynchronization request from 192.168.240.1:6381 accepted. Sending 601 bytes of backlog starting from offset 155479.
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.163 * Successful partial resynchronization with master.
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.163 # Master replication ID changed to fed9d713dbcc34e732346a9e08648a679095fabc
redis-slave-2 | 1:S 07 Jun 2020 01:55:08.163 * MASTER <-> REPLICA sync: Master accepted a Partial Resynchronization.
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:08.527 * +slave-reconf-done slave 192.168.240.1:6381 192.168.240.1 6381 @ redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:08.618 # +failover-end master redismaster 192.168.31.242 6379
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:08.618 # +switch-master redismaster 192.168.31.242 6379 192.168.240.1 6380
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:08.619 * +slave slave 192.168.240.1:6381 192.168.240.1 6381 @ redismaster 192.168.240.1 6380
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:08.619 * +slave slave 192.168.31.242:6379 192.168.31.242 6379 @ redismaster 192.168.240.1 6380
redis-sentinel-3 | 1:X 07 Jun 2020 01:55:37.301 # +sdown slave 192.168.31.242:6379 192.168.31.242 6379 @ redismaster 192.168.240.1 6380
redis-sentinel-1 | 1:X 07 Jun 2020 01:55:37.309 # +sdown slave 192.168.31.242:6379 192.168.31.242 6379 @ redismaster 192.168.240.1 6380
redis-sentinel-2 | 1:X 07 Jun 2020 01:55:38.632 # +sdown slave 192.168.31.242:6379 192.168.31.242 6379 @ redismaster 192.168.240.1 6380

简单来说,一主两从中的主停了之后,三个哨兵发现并商量决定选择其中的一个(从日志中本次示例执行悬着了6380也就是Slave 1作为主节点)

动作确认

连接6380进行set操作,发现确实此节点此时已经是Master节点

liumiaocn:redis liumiao$ redis-cli -p 6380
127.0.0.1:6380> auth liumiaocn@server
OK
127.0.0.1:6380> keys *
1) "name"
127.0.0.1:6380> set version 0.1
OK
127.0.0.1:6380> keys *
1) "version"
2) "name"
127.0.0.1:6380> get version
"0.1"
127.0.0.1:6380> exit
liumiaocn:redis liumiao$ 

而剩余的一个节点仍然是slave节点

liumiaocn:redis liumiao$ redis-cli -p 6381
127.0.0.1:6381> auth liumiaocn@server
OK
127.0.0.1:6381> keys *
1) "version"
2) "name"
127.0.0.1:6381> get version
"0.1"
127.0.0.1:6381> 
127.0.0.1:6381> set version 0.2
(error) READONLY You can't write against a read only replica.
127.0.0.1:6381> 

恢复之前的节点6379

liumiaocn:redis liumiao$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
d6084a0e9d2e        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 17 minutes       6379/tcp, 0.0.0.0:6381->6381/tcp     redis-slave-2
e751670b0059        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 17 minutes       6379/tcp, 0.0.0.0:26381->26379/tcp   redis-sentinel-3
ad5a080315d3        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 17 minutes       6379/tcp, 0.0.0.0:26380->26379/tcp   redis-sentinel-2
c55e3c715994        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 17 minutes       6379/tcp, 0.0.0.0:26379->26379/tcp   redis-sentinel-1
34a10aac06fe        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 17 minutes       6379/tcp, 0.0.0.0:6380->6380/tcp     redis-slave-1
liumiaocn:redis liumiao$ docker start redis-master
redis-master
liumiaocn:redis liumiao$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
d6084a0e9d2e        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       6379/tcp, 0.0.0.0:6381->6381/tcp     redis-slave-2
c0370c9f685a        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 2 seconds        0.0.0.0:6379->6379/tcp               redis-master
e751670b0059        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       6379/tcp, 0.0.0.0:26381->26379/tcp   redis-sentinel-3
ad5a080315d3        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       6379/tcp, 0.0.0.0:26380->26379/tcp   redis-sentinel-2
c55e3c715994        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       6379/tcp, 0.0.0.0:26379->26379/tcp   redis-sentinel-1
34a10aac06fe        redis:6.0.4         "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       6379/tcp, 0.0.0.0:6380->6380/tcp     redis-slave-1
liumiaocn:redis liumiao$
  • 动作确认
    可以发现执行结果为,此节点现在作为从节点存在
liumiaocn:redis liumiao$ redis-cli -p 6379
127.0.0.1:6379> auth liumiaocn@server
OK
127.0.0.1:6379> keys *
1) "name"
2) "version"
127.0.0.1:6379> set greeting hello
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379>

节点确认

Master节点确认

liumiaocn:redis liumiao$ redis-cli -p 26379
127.0.0.1:26379> sentinel master redismaster
 1) "name"
 2) "redismaster"
 3) "ip"
 4) "192.168.240.1"
 5) "port"
 6) "6380"
 7) "runid"
 8) "059a12b5d15417adfcd02cbd635779071cb624cc"
 9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "413"
19) "last-ping-reply"
20) "413"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "8066"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "580838"
29) "config-epoch"
30) "1"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
127.0.0.1:26379>

slave节点确认

liumiaocn:redis liumiao$ redis-cli -p 26379
127.0.0.1:26379> sentinel slaves redismaster
1)  1) "name"
    2) "192.168.31.242:6379"
    3) "ip"
    4) "192.168.31.242"
    5) "port"
    6) "6379"
    7) "runid"
    8) "7818a1002d92750dde7203b533162a21499e7ed9"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "460"
   19) "last-ping-reply"
   20) "460"
   21) "down-after-milliseconds"
   22) "30000"
   23) "info-refresh"
   24) "460"
   25) "role-reported"
   26) "slave"
   27) "role-reported-time"
   28) "272668"
   29) "master-link-down-time"
   30) "1591495517000"
   31) "master-link-status"
   32) "err"
   33) "master-host"
   34) "192.168.240.1"
   35) "master-port"
   36) "6380"
   37) "slave-priority"
   38) "100"
   39) "slave-repl-offset"
   40) "1"
2)  1) "name"
    2) "192.168.240.1:6381"
    3) "ip"
    4) "192.168.240.1"
    5) "port"
    6) "6381"
    7) "runid"
    8) "9f9a35cdaa78c958eb85208f4cafbebf1d5f9ecb"
    9) "flags"
   10) "slave"
   11) "link-pending-commands"
   12) "0"
   13) "link-refcount"
   14) "1"
   15) "last-ping-sent"
   16) "0"
   17) "last-ok-ping-reply"
   18) "530"
   19) "last-ping-reply"
   20) "530"
   21) "down-after-milliseconds"
   22) "30000"
   23) "info-refresh"
   24) "7499"
   25) "role-reported"
   26) "slave"
   27) "role-reported-time"
   28) "610788"
   29) "master-link-down-time"
   30) "0"
   31) "master-link-status"
   32) "ok"
   33) "master-host"
   34) "192.168.240.1"
   35) "master-port"
   36) "6380"
   37) "slave-priority"
   38) "100"
   39) "slave-repl-offset"
   40) "284538"
127.0.0.1:26379> 

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/106597911