一.架构模式
二.资源分布
操作系统:Centos 7
Redis版本:6.2.14
IP | 端口 | 角色 |
192.168.157.130 | 6379 | master |
192.168.157.131 | 6379 | slave1 |
192.168.157.132 | 6379 | slave2 |
三.流程
1.创建三台虚拟机IP及端口如上且安装好Reids
说明:安装好Redis的意思是无需额外配置;Redis能正常启动即可
2.修改三个redis.conf配置文件
说明:使用默认的RDB模式持久化数据
# 允许外部所有IP访问(方便测试)
bind 0.0.0.0
# 允许以守护进程后台运行Redis
daemonize yes
# 为Redis设置访问密码
requirepass 123456
3.分别在三个redis.conf文件中指定redis实例所绑定的IP
# 在192.168.157.130 redis.conf中添加
replica-announce-ip 192.168.157.130
# 在192.168.157.131 redis.conf中添加
replica-announce-ip 192.168.157.131
# 在192.168.157.132 redis.conf中添加
replica-announce-ip 192.168.157.132
4.在两个从节点的redis.conf文件中添加主节点的访问密码
# 主节点的密码(不然启动集群时从节点无法连接到主节点)
masterauth 123456
5.配置主从关系
在两个从节点的redis.conf文件中添加replicaof<主节点IP> <主节点端口>用于指定当前从节点所绑定的主节点
# 在从节点中添加绑定的主节点信息
replicaof 192.168.157.130 6379
6.启动集群
# 分别在三个节点中执行如下启动命令(因为是在配置文件所在目录启动的redis所以此处redis.conf使用的是相对路径)
redis-server redis.conf
7.查看集群状态
# 查看集群状态命令
INFO replication
四.测试
1.测试主写从读数据情况
2.测试从节点是否能写入数据(不能)
3.测试关闭两个从节点等主节点写入数据后再重启从节点观察从节点数据同步情况(从节点重启后自动同步主节点数据)
关闭从节点的目的是模拟生产环境下Redis从节点宕机,重启从节点后数据的同步情况
五.主从集群数据同步原理
1.主从集群全量数据同步原理
主从集群第一次数据同步采取的策略是“全量同步”;
说明:
“第二阶段”为什么会生成一个repl_baklog日志文件?因为在第二阶段执行bgsave生成并发送RDB给slave是一个异步操作(异步的目的在于master同步数据到slave时不会阻塞Redis对外提供服务(Redis是单线程的)),在这异步操作期间master肯定还会有其它新写入的数据。那么这部分新写入的数据就存放在repl_baklog文件中,最终master向slave不断发送repl_baklog完成所有数据同步;
如何判断slave是否是第一次来同步数据?
slave向master发起数据同步请求会携带Replication Id 和 offset。master收到同步请求根据slave携带的Replication Id判断是否与master节点的Replication Id一致。不一致代表第一次同步master会进行一次“全量同步”(master返回自己的Replication Id给slave后续slave携带master的Replication Id和自己的offset(偏移量)去repl_baklog文件中进行“增量同步” )。若一致代表“增量同步”master会根据携带的offset来决定需要向slave同步哪些数据;
2.主从集群增量数据同步原理
主从第一次同步是“增量同步”,如果slave宕机后重启同步数据使用的是“增量同步”