Redis主从复制方式集群及原理

JAVA乐园

共 1867字,需浏览 4分钟

 ·

2021-03-16 21:31

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 宕机后,从服务器没办法进行动态选举,从只能读取旧的数据。

喜欢,在看

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报