Redis主从复制方式集群及原理
0x01. 集群如何操作
现在有三台虚拟机,ip 分别为:
192.168.0.100
192.168.0.105
192.168.0.106
将 192.168.0.100 作为 master, 其他两台作为 slave
vim redis.conf
老版本 Redis
slaveof <masterip> <masterport>
新版版本 Redis
replicaof <masterip> <masterport>
这里使用 Redis 5.0.3,所以配置是
replicaof <masterip> <masterport>
分别代表主节点 ip 和主节点端口
修改两个从节点的配置,配置为如下
replicaof <masterip><masterport>
masterauth 密码
0x02. 检查是否配置成功
重启三台服务器,然后在从节点下输入指令: info replication
可以看到 role 是 slave,以及主机 ip、端口,状态等信息,即代表配置成功。
在 master 节点发送命令
在 slave 节点获取
在 slave 节点,进行写操作。发现无法在从节点上进行写的操作
0x03. 主从复制的原理
3.1 全量同步
slave 第一次连接 或 重连 到 master 上以后,会向 master 发送 sync 的命令
master 收到 sync 命令,执行 bgsave 生成 rdb 快照,新的命令会写进缓冲区
master 执行完 bgsave 后,将 rdb 文件发送给各slave节点
slave 接收到 rbd 文件,丢弃旧的 rdb 数据,执行新的 rdb 快照
master 发送完 rdb 快照后,将缓冲区数据发送到 slave
slave 完成对 rdb 的载入后,执行 master 缓冲区的写命令
3.2 增量同步
slave 服务器完成初始化,工作正常,主服务器发生写操作同步到从服务器
增量同步主要是:主服务器每执行一条写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的命令
3.3 部分同步
当 master 服务器断线后,从服务器需要重新发送 sync 命令,这样会消耗大量服务器 cpu、内存、磁盘,并且传送 rdb 还会消耗网络资源等
在 Redis 2.8 版本后,部分同步 psync 来执行同步的命令。
master在内存中给每个slave维护了一份同步日志和同步标识。每个 slave 和 master 同步都会携带自己的同步标识和上次同步的最后位置
当 master 断线重连后,slave 带着自己的同步标识,和上次同步的最后位置去找 master , 如果 slave 的偏移量在 master 同步日志中
那么 slave 从偏移量开始的位置继续同步,无需进行全量同步。
3.4 同步策略
第一次连接,进行全量同步,全量同步结束后,进行增量同步。
如果断开,尝试部分同步,不行的话,依然采用全量同步。
3.5 部分命令
通过 replconf listening-port 6379
sync,去向主服务器发送同步命令,此时进入通过输出模式,并不断发送 ping 包
master 写入数据
slave 就会输出从缓冲区来的数据
replica-server-stale-data yes 意味着必须完成 master 同步之后才能做接下来的操作。可以防止数据不一致的情况
缺点:主从复制时,当 master 宕机后,从服务器没办法进行动态选举,从只能读取旧的数据。
喜欢,在看