redis的高可用性保障措施: 增加副本的冗余量。redis提供了主从库模式,保证数据副本的一致性,主从库采用的是读写分离的方式。
redis的主从库模式:
- 读操作:主库和从库都可以接受请求
- 写操作:首先主库进行写操作,然后主库将写操作同步到从库。
主从库第一次进行数据同步:
数据同步对主库带来影响:
1.fork子线程这个过程会阻塞主线程处理正常请求,生成RBD文件,
2传输rdb文件,会给主线程的宽带资源带来压力。
解决方式:
可以通过‘主 - 从 -从’ 这种级联方式将主库生成rdb和传输rdb的压力分散到从库身上。
主从间的持续数据传输
当主从全量数据同步完成之后,主从或者从从之间就会维护一个长连接来完成命令的传输,
主库间网络终端措施
如果主库和从库断开了连接,那么主从之间的数据同步将采用增量数据同步的方式来进行同步。增量复制会把主从库网络断连期间的命令同步给从库。
主库会有一个repl_backlog_buffer缓冲区,主从redis断连之后,这些操作命令写到 repl_backlog_buffer缓冲区。
repl_backlog_buffer缓冲区是一个环形缓冲区,主库主要会记录到写入到的位置,从库会记录读到的位置(slave_repl_offset)。
问题:
repl_backlog_buffer是一个环形的数据结构,如果缓存写满之后的话,那么新的数据会覆盖老的数据
repl_backlog_buffer的大小计算公式 缓存空间 = (主库写入速度 * 操作大小 - 主从间传输速度 * 操作大小) * 2
1 如果考虑到大小还是有压力的话 可以设置为缓存空间的4倍。如果配置的过小的话,导致从库的节点位置和主库的位置对应不上的话,就需要全量复制。
2 可以考虑切分集群来缓解单个主库的请求压力。