大家好,今天分享Redis集群master节点挂掉之后的处理方式

我们前面做的主从复制

在这里插入图片描述
是这样的一个结构

在这里插入图片描述
要改成这样

在这里插入图片描述

将6303的主节点接到6302

127.0.0.1:6303> SLAVEOF 127.0.0.1 6302
OK
127.0.0.1:6303> 

在6303上看,它的主节点变成了6302

127.0.0.1:6303> INFO replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6302
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:4397
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d41907987e0a9dd87fa62e7f54b6d2ce27740621
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4397
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4397

在原先的主节点上看,他只有6302这个从节点了

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6302,state=online,offset=4523,lag=0
master_replid:d41907987e0a9dd87fa62e7f54b6d2ce27740621
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4523
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4523
127.0.0.1:6379> 

我们发现6302 还是一个从节点(它是不可以写入数据的)

127.0.0.1:6302> INFO replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:4747
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=127.0.0.1,port=6303,state=online,offset=4747,lag=1
master_replid:d41907987e0a9dd87fa62e7f54b6d2ce27740621
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4747
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1626
repl_backlog_histlen:3122

在原先的主节点上写点数据

127.0.0.1:6379> set gw jiao
OK

在6302上获取数据

127.0.0.1:6302> get gw
"jiao"
127.0.0.1:6302> 

在6303上获取数据

127.0.0.1:6303> get gw
"jiao"

这样也可以完成主从复制

断掉主节点

127.0.0.1:6379> SHUTDOWN
not connected> exit
[root@localhost bin]# 

这时我们已经没有主节点了

这时,在从节点上使用这个命令

可以让这个从节点变成主节点

127.0.0.1:6302> SLAVEOF no one
OK
127.0.0.1:6302> 

6302这个从节点已经变成了主节点

127.0.0.1:6302> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6303,state=online,offset=5669,lag=0    //注意这一行(6303成为了6302的从节点)
master_replid:fe8fffc61e1c21c0892bffb64d51c8224ad5ec93
master_replid2:d41907987e0a9dd87fa62e7f54b6d2ce27740621
master_repl_offset:5669
second_repl_offset:5432
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1626
repl_backlog_histlen:4044
127.0.0.1:6302> 

之后,我们使用命令行的方式让其它的从节点(除了原先的主节点以外)连接上这个主节点

连接原先的主节点(即: 6379)

[root@localhost bin]# redis-server redistest/redis01.conf 
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

它现在还是主节点(但是它的下面已经从节点了

因为6302已经取代了它主节点(就是老大的意思)的地位

它再次开启也没有用了

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:d4f9a27b0db5279fa847cc95488bf9a9fbe04045
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 

如果想让原先的主节点再度成为主节点(master),在命令行上加上去就可以了

这样做

127.0.0.1:6302> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6302> 

这样做

127.0.0.1:6303> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6303> 

这样它的主节点地位就又回来了(即:6379 又变成了master)

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6302,state=online,offset=98,lag=0
slave1:ip=127.0.0.1,port=6303,state=online,offset=98,lag=1
master_replid:5c4f2e117c26c9a1c1d1310e327f166dc7a88c2e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98
127.0.0.1:6379> 

好了,有关于Redis集群master节点挂掉之后的处理方式就到这里了,谢谢大家

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐