主节点的复制id,主节点重新启动,或者从节点晋级成主节点,都会生成一个replicationid
- 同一个节点,每次重启,生成的
replicationid
也会变化
从节点和主节点建立连接之后,就会获取到主节点的replicationid
通过info replication
即可看到replicationid
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:1da596acecf5a34b4b2aae45bd35be785691ae69
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
关于master_replid
和master_replid2
,每个节点需要记录两组master_replid
,这个设定解决的问题场景是这样的:
- 比如当前有两个节点A和B,A为
master
,B为slave
- 如果网络出现抖动,B以为A挂了,B自己就会成为主节点,于是B给自己分配了新的
master_replid
,此时就会使用master_replid2
来保存之前A的master_replid
- 后续如果网络恢复了,B就可以根据
master_replid2
找回之前的主节点
- 后续如果网络没有恢复,B就按照新的
master_replid
自成一派,继续处理后续的数据
明辨replid
和runid
?
-
runid
:主要用在支撑实现Redis哨兵这个功能,和主从复制没关系
-
replid
:主要在主从复制中起到作用