主从复制
复制过程
- 从节点连接上主节点 并且保存主节点的信息
- 与主节点建立连接
- 从节发送ping信号 主节点返回pong 双方通信ok
- 主节点会将所有数据发送给从节点
- 接下来再持续将主节点的写命令推送给从节点 保持主从数据的一致性
同步详细过程
- 每个redis节点启动的时候都会生成一个唯一的uuid。
- 主节点和从节点都各自维护自己的主从复制偏移量,当主节点有写入命令的时候 会修改偏移量长度,然后发给从节点,从节点执行命令之后也修改自己的偏移量长度,然后把自己的偏移量长度发送给主节点,这样主节点同时有自己的偏移量以及从节点的偏移量,通过对比,就可以知道主从数据是否一致的问题。
- 主节点同时也维护一个固定长度的队列 大概是1m,主节点发送数据给从节点的过程中,主节点同时还会有写操作,这个时候数据存储在复制缓冲区里面,从节点同步主节点数据完成之后,主节点会将缓冲区中的数据继续发送给从节点,进行部分复制,主节点响应命令的时候不但会把命令发送给从节点,还会写入复制缓冲区,这样防止复制命令丢失可以进行补救
缺点
- 主节点挂了,从节点要晋级主节点,还要修改其他应用方的主节点地址,还要命令所有从节点去复制新的主节点,整个过程需要人工干预。
- 部分复制步成功的时候会进行全量同步,如果数据量很大 进行全量同步,会导致系统卡顿
哨兵模式
分为哨兵和redis节点两块
最少配置是一主一从
- 每个哨兵节点都会定期每秒一次,向他所知的主从服务器以及其他哨兵节点发送一个ping命令
- 如果某一台没有响应或者说超时了,那么这个时候在这个哨兵节点这里会将这一台标记为主观下线,意思就是这个节点在我这里判断它挂了,
- 如果有一个主服务器被标记为主观下线,那么正在监视这台服务器的所有哨兵节点,要以每秒一次的频率确认主服务器确实进入了主观下线状态
- 如果主服务器被标记为主观下线,并且有够多的哨兵节点(配置文件)在指定的时间访问内统一了这一判断,那么这个主服务器就被标记为客观下线,意思就是他真的挂了
- 哨兵节点会协商投票自动选出新的主节点,并且将剩下的从节点指向新的主节点进行数据复制