每台redis服务器都是主服务器,每台主服务器可以有多个从服务器。主从服务器生效后,从服务器会清空本地的数据,然后去同步主服务器的数据。
可以info replication命令查看复制相关状态。
建立复制:
1:在配置文件中加入slaveof <masterIp> <masterPort>,随着redis启动生效。
2:在redis-server启动命令后加入--slaveof <masterIp> <masterPort>生效。
3:直接使用命令:slaveof <masterIp> <masterPort>生效。
slaveof是异步命令,执行时只保存主节点信息,后续复制流程在节点内部异步执行。
如果连接失败会一直循环连接。
关闭复制:
关闭复制之后从服务器会晋升为主服务器,之后也可以与其他主服务器建立关系。
数据同步:
全量同步:从服务器第一次连接的时候同步,或者主服务器挂了之后也会全量复制。
部分复制:中断后连接可以增量复制,将从服务器的运行ID和复制偏移量传到主服务器,对比之后如果不一致则需要同步。
在数据同步之后,主节点接收到命令会传到从服务器,以保证数据的完整性。从节点也可以作为其他从节点的主节点。
复制三要素:
复制偏移量:参与复制的主从节点都会维护自身的复制偏移量,主节点在处理完写命令后会把命令的字节长度做累加记录,从节点每秒钟上报自身的复制偏移量给主节点,因此主节点也会保存从节点的复制偏移量。
复制积压缓冲区:积压缓冲区是一个固定长度的FIFO队列(默认1M),当从节点断线后连接到主节点,会从复制积压缓冲区获取数据(根据偏移量),主节点在响应写命令时不但会把命令传给从节点还会写入复制积压缓冲区。如果重连之后从节点的偏移量在复制积压缓冲区找不到就会进行全量复制。
runid:判断之前是不是在这台主服务器上复制,如果runid相同则尝试部分复制,如果runid不同则全量复制。
原文:https://www.cnblogs.com/tjpblog/p/13202441.html