Pipline及主从同步
Pipline和主从同步
Pipline
- Pipline和Linux管道类似
- Redis基于请求/响应模型,单个请求处理需要一一作答
- Pipline批量执行命令,节省多次I/O往返时间
- 有顺序依赖的指令建议分批发送
Redis同步机制
主从同步原理
全量同步过程
- Slave发送一个sync同步命令给Master要求全量同步。
- Master接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成RDB文件。
- Master将保存数据快照期间收到的写命令缓存起来
- Mater完成写文件操作后将RDB文件发送给Slave
- Slave将接收到的RDB文件载入自己的redis内存。
- 待Slave将RDB载入完成后,主服务再将缓冲区所有写命令发送给从服务。
- 从服务在将主服务所有的写命令载入内存从而实现数据的完整同步。
- 从服务下次在需要同步数据时只需要发送自己的offset位置(相当于MySQL binlog的位置)即可,只同步新增加的数据,再不需要全量同步。
增量同步过程
- Master接收到用户的操作指令,判断是否需要传播到slave
- 将操作记录追加到AOF文件
- 将操作传播到其他Slave:
- 对齐主从库
- 往响应缓存写入指令
- 将缓存中的数据发给Slave
主从模式弊端
不具备高可用性
Master挂掉后就不能进行写操作
Redis Sentinel(Redis 哨兵)
解决主从同步Master宕机后的主从切换问题
- 监控:检查主从服务器是否运行正常
- 提醒:通过API向管理员发送故障通知
- 自动故障迁移:主从切换
流言协议 Gossip
在杂乱无章中寻求一致
- 每个节点随机的与对方通信,最终所有节点状态达成一致
- 种子节点定期随机向其他节点发送节点列表以及需要传播的消息
- 不保证信息一定会传给所有节点,但最终会趋于一致
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Alfred的小站!