目录
一、CAP原理
分布式系统理论基石是CAP原理,保证可用性的前提下,才有了一致性。主从复制目的是为了数据的最终一致性,但是无法达到严格一致性,只是尽量做到数据不丢失。主从复制也可以达到读写分离,由replica-read-only配置参数决定。
C:Consistent(一致性):各节点数据相同
A:Avaliability(可用性):节点挂掉,整个服务可用
P:Partition tolerance(分区容忍性):不同分区数据差别不大
网络分区:网络断开导致各节点数据不一致,导致了C与A两难全。
二、增量同步
如上图所示,增量同步的核心是:定长的环形数组buffer,该数组大小由repl-backlog-size配置参数决定。存放修改指令并异步同步到从节点。网络连接不好或repl-backlog-size太小,导致buffer头被覆盖,进而导致增量同步失败,则需进行快照同步(第三节)。
如下所示,是redis主从复制相关的配置参数:
# 主从复制
################################# REPLICATION #################################
# 从节点配置主节点的IP及端口号
# replicaof <masterip> <masterport>
# 主节点的auth(主节点配置了requirepass)
masterauth abcdef
# 主节点的用户
# masteruser <username>
# 主从复制时,yes:可以回复客户端请求;no:复制进行中
replica-serve-stale-data yes
# 从节点只读模式
replica-read-only yes
# 是否启用无盘复制(默认不):disk or socket
repl-diskless-sync no
# 启用无盘复制的的延迟时间,以便等待更多的从服务器连接上来
repl-diskless-sync-delay 5
# 环形定长数组buffer的大小设置
# repl-backlog-size 1mb
# 其他配置参数
repl-diskless-load disabled
# repl-ping-replica-period 10
# repl-timeout 60
repl-disable-tcp-nodelay no
# repl-backlog-ttl 3600
replica-priority 100
# min-replicas-to-write 3
# min-replicas-max-lag 10
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234
三、快照同步
如图所示,快照同步进行一次bgsave生成快照文件,该文件发送到从节点完成数据复制。这期间产生的修改,使用增量同步。最终达到数据数据一致性。避免快照复制死循环,repl-backlog-size配置尤为重要(见第二节)。
四、无盘复制
无盘复制,复制期间没有磁盘的参与,即:无需bgsave,直接遍历redis内存通过socket发送给从节点。是否启用无盘复制由repl-diskless-sync配置参数决定,默认no不启用。