现在有三台虚拟机,ip 分别为:
192.168.0.100 192.168.0.105 192.168.0.106
将 192.168.0.100 作为 master, 其他两台作为 slave
-
vim redis.conf
老版本 Redis
slaveof
新版版本 Redis
replicaof
这里使用 Redis 5.0.3,所以配置是
replicaof
分别代表主节点 ip 和主节点端口
-
修改两个从节点的配置,配置为如下
replicaof masterauth 密码
重启三台服务器,然后在从节点下输入指令: info replication
可以看到 role 是 slave,以及主机 ip、端口,状态等信息,即代表配置成功。
在 master 节点发送命令
在 slave 节点获取
在 slave 节点,进行写操作。发现无法在从节点上进行写的操作
-
slave 第一次连接 或 重连 到 master 上以后,会向 master 发送 sync 的命令
-
master 收到 sync 命令,执行 bgsave 生成 rdb 快照,新的命令会写进缓冲区
-
master 执行完 bgsave 后,将 rdb 文件发送给各slave节点
-
slave 接收到 rbd 文件,丢弃旧的 rdb 数据,执行新的 rdb 快照
-
master 发送完 rdb 快照后,将缓冲区数据发送到 slave
-
slave 完成对 rdb 的载入后,执行 master 缓冲区的写命令
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 宕机后,从服务器没办法进行动态选举,从只能读取旧的数据。
喜欢,在看