主从复制的作用
- 读写分离:master写、slave读,提高服务器的读写负载能力
- 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数 量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
- 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
- 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
- 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案
主从复制的阶段一:建立连接
建立slave到master的连接,使master能够识别slave,并保存slave端口号
建立连接的方法:
在slave的配置文件中加入一条参数
slaveof masterip 主服务器ip地址和端口
主从复制阶段二:数据同步
此过程大致分为两个阶段
- 全量复制
连接master后即开始全量复制 - 部分复制
全量复制过程中master可能会接收新的数据,此时开始部分复制。
全量复制过程中接收的命令会被存储在复制缓冲区中,部分复制就是在接收缓冲区中的命令来执行bgrewriteaof,恢复数据
注意
如果master数据量巨大,数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行
复制缓冲区的大小只有1M,可能会导致数据溢出,可以去修改复制缓冲区的大小
主从复制阶段三:命令传播
- 当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播
- master将接收到的数据变更命令发送给slave,slave接收命令后执行命令
心跳机制
进入命令传播阶段后,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线
master心跳:默认十秒一次,来判断slave是否在线
slace心跳:一秒一次,来判断master是否在线以及汇报slave自己的复制偏移量,获取最新的数据变更命令