高可用:
1.数据尽量少丢失 aof/rdb
2.服务尽量少中断 主从模式
读写分离 从库读操作 主库支持读写操作
为什么分离 如果主从都可以写,必然涉及 加锁,实例协商
主从同步过程
1.从库执行slave of 主库地址,当该命令执行后,会发送给主库一个命令,告知主库开始给我同步
2.主库fork一个子进程,开始生产rdb文件.
为什么不用aof ?rdb小,带宽消耗小. 解析速度快
注意:fork操作其实是会阻塞的.
再看一下增量同步
1. repl_backlog_buffer用于主从间的增量同步。主节点只有一个repl_backlog_buffer缓冲区,各个从节点的offset偏移量都是相对该缓冲区而言的。
2. replication buffer用于主节点与各个从节点间 数据的批量交互。主节点为各个从节点分别创建一个缓冲区,由于各个从节点的处理能力差异,各个缓冲区数据可能不同
repl_backlog_buffer里面存的也是写操作命令
replication buffer就是 bufferedWriter,写缓冲区.每个client都有
repl_backlog_buffer是所有从库共享的,slave_repl_offset是由从库自己记录的,这也是因为每个从库的复制进度不一定相同
为什么有主从从同步?
主从从同步
1.为什么出现级联同步
主同步时,会fork生成rdb文件,可能会阻塞,会消耗内存,cpu.传输会消耗带宽
总结:
- Redis采用读写分离的好处:避免了加锁,实例间协商是否完成修改等复杂操作
- 全量同步的发生时机:首次上线 和 从库的环形缓冲区位置标识被覆盖
- 增量同步保障机制依赖于一个特殊的数据结构:环形缓冲区
- 首次同步分为三个阶段,①:建立连接,②:同步RDB文件,③:同步增量数据
- 全量同步需要主机fork子进程,产生全量RDB文件,并发送,为了减轻主机的压力,从机之间也可用互相同步
- 增量同步可以缓解主机全量同步的压力,它需要特殊机制保障:replication buffer,环形缓冲区,master_repl_offset,slave_repl_offset
- 从机的同步位置标识,在环形缓冲区被覆盖后,会触发新的一轮全量同步,所repl_backlog_buffer的大小是redis重要的调优参数
- 主从同步有三种机制:全量同步,基于长链接的命令传播(在写这个笔记时把它忽略了),增量同步
怎么解决主从同步延迟问题.
1.默认从库会响应读请求.我们可以设置从主库读取(slave-serve-stale-data)
2.监控.
可以监控主从同步的差距.如果太大,可以动态设置禁止读从库吧.
其他不清楚了