redis的复制

2019-12-18  本文已影响0人  lionel880

redis的复制包含什么:同步(sync)和命令传播(command propagate)

一、同步

psync有2中模式,完整重同步和部分重同步。
1.full resynchronization 用于初次同步复制,执行sync命令。
2.partial resynchronzation 处理断线后重连复制,在条件符合时,主服务器将主从连接断开期间的写命令发送给从服务器


image.png

partial resynchronzation功能构成
1.主服务器的复制偏移量(replication offset)和从的复制偏移量
2.主服务器的复制积压缓存区(replication backlog)
3.服务器的运行ID

复制偏移量

image.png

主服务器当发送后,偏移量就增加,从服务器接收到之后,就更新偏移量。当主从偏移量不一致时,代表主从服务器不一致。这时,主就要去补偿从丢失的那部分数据,至于如何补偿,则和复制挤压缓冲区有关

复制缓冲区
当主进行命令传播时,不仅会将写命令发送给所有的从服务器,还会将写命令积压到复制缓冲区里面
这时一个FIFO的队列,默认大小1MB

image.png

缓冲区里有偏移量和内容,当从连接上主之后,从会发送从的复制偏移量给主。主检查缓冲区,如果偏移量在缓冲区内,则选择部分复制,否则,全量复制

tip缓冲区大小的合理设置,可以通过secondwrite_size_per_second,每秒写入时间来估算,看平均断线后,多久会连接上。估算后修改repl-backlog-size

id
每个服务器启动时,都会生成40位随机数字id,当主连接上从后,主会把id发给从,从保留主机的id,这样,当重连后,从将自己保留原来的主id发给新的主,新的主就可以比较主是否是原来的主机,如果不是 ,肯定是需要进行全量重同步。
最终肯定是主服务器通过判断,决定执行哪种同步的

image.png

二、命令传播

当完成同步后,主从服务器进入命令传播阶段。这样主服务将写命令传播给从服务器即可

命令传播里有一个心跳检测是需要注意的
心跳检测,会包含3个内容

上一篇下一篇

猜你喜欢

热点阅读