最近项目需要,所以研究了一下Redis主从的TCP链接是如何维持的,发现这一块还没有资料说明过,所以就把打算把这个东西记录一下分享出来。
这个问题可以拆成以下几个部分来说,包括:
- Redis如何建立主从关系
- Redis如何检测断链
- Redis如何重新建立主从关系
下面一一说明。
一、Redis如何建立主从关系
redis使用slaveof ip host
指令来建立主从关系,主从关系的建立会引发持续的数据同步。值得一提的是,redis的设计认为这个关系的建立是持续性的,所以也设计了重连机制、对master的验证机制、高效的数据重新同步的方法。下面具体描述这个过程及提到的几个概念。
建立主从关系
前备条件:
实例A:127.0.0.1 6379
实例B:127.0.0.1 6380
我们希望实例A实时备份实例B,所以我们对实例A发送指令slaveof 127.0.0.1 6380
,这个逻辑如下图所示。
*图1 slaveofCommand指令发送与执行过程
- redis-cli发送指令
slaveof 127.0.0.1 6379
- redis-server_6379接收
slaveof 127.0.0.1 6379
,执行slaveofCommand
指令,将ip及port写到server结构体里,并修改状态标志位,同时回复OK - r