Redis主从复制:
“三高”架构:高并发、高性能、高可用
点击redis的风险与问题:
1、机器故障:硬盘故障、系统崩溃
本质:数据丢失、很可能对业务造成灾难性打击
2、容量瓶颈:内存不足,从16G升级到64G,从64G升级到128G,无限升级内存
本质:穷,硬件条件跟不上
为了避免单点Redis服务器故障,准备多台服务器相互联通。数据复制多个副本在不同服务器上,连接在一起,保证数据是同步的。一台宕机其他可以提供服务,实现Redis的高可用,同时实现数据冗余备份。
主从复制:
主从复制即将master中的数据及时、有效的复制到slave中
特征:一个master可以拥有多个slave,一个slave只对应一个master
职责:
master:
1、写数据
2、执行写操作时,将出现变化的数据自动同步到slave
3、读数据(可忽略)
slave:
1、读数据
2、写数据(禁止)
主从复制的作用主要包括:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式。
- 故障恢复:当主节点故障时,从节点可以暂时替代主节点提供服务,是一种服务冗余的方式
- 负载均衡:在主从复制的基础上,配合读写分离,由主节点进行写操作,从节点进行读操作,分担服务器的负载;尤其是在多读少写的场景下,通过多个从节点分担负载,提高并发量。
- 高可用基石:主从复制还是哨兵和集群能够实施的基础。
主从复制的工作流程:
- 建立连接阶段(准备阶段)
- 数据同步阶段
- 命令传播阶段
阶段一:主从连接:
1、客户端发送命令:
slaveof <masterip> <masterport>
2、启动服务器参数:
redis-server -slaveof <materip> <masterport>
3、服务器配置:
slaveof <masterip> <materport>
阶段二:数据同步阶段工作流程
在slave除此连接master后,复制master中的所有数据到slave
将slave的数据库状态更新成master当前的数据库状态
阶段三:命令传播阶段:
部分复制:
命令传播阶段出现断网现象:
- 网络闪断闪连 忽略
- 短时间网络中断 部分复制
- 长时间网络中断 全量复制
部分复制的三个核心要素:
- 服务器的运行id(run id)
- 主服务器的复制缓冲区
- 主从服务器的复制偏移量
服务器运行ID(runnid):服务器运行id是每一台服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id
复制缓冲区:是一个先进先出(FIFO)的队列,用于存储服务器执行过的命令,每次传播命令,master都会讲传播的命令记录下来,并存储在复制缓冲区中。
由来:每台服务器启动时,如果开启有AOF或者被连接成为master节点,即创建复制缓冲区
作用:用于保存master收到的所有指令(仅影响数据变更的指令,如:set、select)
runid:服务器运行ID是每一天服务器每次运行的身份识别码,一台服务器多次运行可以生成多个运行id
主从服务器复制偏移量(offset):
一个数字,面熟复制缓冲区中的指令字节位置
分类:
master复制偏移量:记录发送给所有slave的指令字节对应的位置(多个)
slave复制偏移量:记录slave接受master发送过来的指令字节对应的位置(一个)
数据来源:
master端:发送一次记录一次
slave端:接收一次记录一次
作用:同步信息,比对master与slave的差异,当slave断线后,恢复数据使用
心跳机制:
当slave掉线过多,或延迟过高,master为保障数据稳定性,将拒绝所有信息同步操作
min-slaves-to-wirte 2
min-slaves-max-lag 8
slave数量少于2个,或所有slave的延迟都大于10s,强制关闭master写功能,停止数据同步
slave发送REPLCONF ACK命令确认slave数量和延迟
主从复制的问题:
1、频繁的全量复制:
由于重启,runid发生变化
由于网络原因:
2、频繁的网络中断
3、数据不一致