1、redis主从复制的原理
2、哨兵机制的原理
3、分布式方案对比
为什么需要集群
1、性能
2、扩展
3、可用性
可用性、数据安全、性能都可以通过搭建多个 Reids 服务实现。其中有一个是主节 点(master),可以有多个从节点(slave)。主从之间通过数据同步,存储完全相同的数 据。如果主节点发生故障,则把某个从节点改成主节点,访问新的主节点。
主从复制
配置
在每个slave的redis.conf增加
slaveof 192.168.8.203 6379
或者在启动服务时通过参数指定 master 节点:
./redis-server --slaveof 192.168.8.203 6379
或在客户端直接执行 slaveof xx xx,使该 Redis 实例成为从节点。
启动后,查看集群状态:
redis> info replication
从节点不能写入数据,只能从master节点同步数据。get成功,set失败。
主节点写入后,slave会自动从master同步数据
断开复制
slaveof no one
主从复制原理
连接阶段
1、slavenode启动,在本地保存master node 的信息,host和ip
2、slave node 有个定时任务,每隔一秒钟检查是否有新的master node要连接和复制,如果发现,就跟masternode建立socket网络连接。如果连接成功,从节点为该socket建立一个专门复制工作的文件处理器,负责后续的复制工作。
数据同步阶段
master nodde 第一次执行全量复制,bgsave命令在本地创建一份rdb快照,发给slavenode。slave node 清除自己的旧数据,然后用master的rdb来加载数据。
生成rdb文件时,master会把所有的写命令缓存在内存里,在slavenode保存了rdb以后,再把新的写命令复制给slavenode。
命令传播阶段
master node 持续将写命令异步复制给slave node
如果有一个节点一段时间断开连接了,有一个偏移量来记录上一次复制到哪里了。
sentinel 哨兵
为redis提供高可用。
Sentinel 默认以每秒钟 1 次的频率向 Redis 服务节点发送 PING 命令。如果在 down-after-milliseconds 内都没有收到有效回复,Sentinel 会将该服务器标记为下线 (主观下线)。
这个时候 Sentinel 节点会继续询问其他的 Sentinel 节点,确认这个节点是否下线, 如果多数 Sentinel 节点都认为 master 下线,master 才真正确认被下线(客观下线), 这个时候就需要重新选举 master。