目录
Redis集群:
主从同步原理:
replid和offset:
全量同步和增量同步:
repl_baklog文件:
主从集群的优化:
Redis集群:
部署多台Redis我们称之为Redis集群,他有一个主节点(负责写操作),多个从节点(负责读操作),它有高可用性、可扩展性、性能提升、自动分片以及无中心架构等优势。
如果想让A成为B的从节点,使用命令
我们在从节点使用slaveof masterIp masterport 或者 replicaof masterIp masterport
主从同步原理:
- 第一阶段:判断replid是否相同,如果不同,那么代表是第一次建立连接,这是做的操作是修改从节点的replid。
- 第二阶段:主节点执行bgsave命令,然后将RDB文件发送给从节点,在记录RDB和发送文件的同时,主节点所作的写操作会记录到一个日志文件中repl_baklog。
- 第三阶段:发送repl_baklog命令,从节点同步并执行里面的命令。
replid和offset:
replid:用于判断两者是否是第一次连接
offset:是偏移量,主节点每做一次写操作,偏移量会+1,然后从节点每做一次增量同步操作,就是执行repl_baklog命令,offset也会跟着改变,所以当主机点和从节点的offset不同时,就会做主从同步。
全量同步和增量同步:
全量同步(也就是第一次同步)流程:
slave建立连接判断replid是否相同 -> 不同拒绝增量同步,并修改replid/相同进行增量同步 ->master节点做bgsave生成RDB文件发送给从节点 -> 从节点做全量同步 -> master做bgsave期间的命令记录在repl_baklog中,并持续将该文件中的命令发送给从节点 -> 从节点执行log中命令(offset起作用了)保证主从一致。
增量同步:
增量同步是从节点更新repl_baklog文件中offset偏移量之后的那些操作。
repl_baklog文件:
repl_baklog文件可以理解为一个闭环的数组,当master做写操作时,主节点的offset会增加,当文件写满了时,会从头开始,覆盖旧数据,所以当从节点宕机了,主节点一直在写数据,导致转了一圈到了从节点的offset的地方了,那么就会触发全量同步。
主从集群的优化:
- 从RDB角度->
在master中配置repl-diskless-sync yes启用无磁盘复制,直接通过网络传输到从节点。
Redis单节点内存占用不要太大,减少RDB导致的过多磁盘IO。
- 从增量同步角度
适当增大repl_baklog文件的大小,发现slave宕机尽快实现故障恢复
限制一个master上的slave节点数量,如果slave数量太多,建议采用主-从-从链式结构。