主从复制

构建一个高可用的系统,全年未宕机时间>99.999%

配置 作用
requirepass ****** 设置数据库密码
masterauth ****** 记住主数据库的密码
slaveof ip port 从机连接到主机
repl-backlog-size 1mb slave端失连缓冲区,当一个slave要重连时,不需要完全同步,执行局部同步即可。backlog设置的越大,slave可以失连的时间就越长。
slave-read-only yes 从机只读
slave-serve-stale-data no 从机在主从复制的时候不提供服务
min-slaves-to-write 2 当slave数量少于某个值,master停止写入
min-slaves-max-lag 8 当所有slave的延迟大于等于10s时,master停止写入
repl-backlog-size 修改复制缓冲区大小,避免因为太小而丢数据反复全量复制,推荐设置为 2延迟时间每秒master写入量
repl-timeout 60 master的CPU占用过高/slave频繁断开slave接到了耗时很长的查询命令,master发现slave不响应,master设置合理的超时时间,超时则释放slave
repl-ping-slave-period slave与master断开连接:master的ping丢包,ping频率低,超时时间很短,应该提高ping的频率,一般超时时间为ping的5-10倍
slave-server-atale-data yes/no 多个slave获取相同数据不同步:如果slave延迟过大,暂时屏蔽slave的数据访问,开启后仅响应info,slaveof等少数命令,慎用,建议slave和master在一个机房

复制缓冲区buffer类似aof格式,它有offset(偏移量)标记不同slave同步到哪个位置

首先slave创建socket连接master
全量复制发生在首次连接:slave发psync ?-1,主机发runid和offset,从机保存主机信息,主机发rdb和buffer,从机更新数据和持久化文件。

部分复制的流程:slave网络中断,数据丢失,向主节点发送psync offset runid,master通过自己的offset和slave的offset进行比对,找出缺失的命令,发给slave,如果缺失的命令过多或无法恢复,则进行全量复制。

命令传输阶段:正常运行时,master收到命令累加offset,slave收到命令累加offset,slave每秒心跳将offset告诉master,master每10秒心跳检测slave是否在线,master发现偏移量不一致则将复制缓冲区中相差的命令向slave传输。

redis4.0中:当slave掉线重连,发送psync2,其中包括原masterId和新msterId,主机检测Id1和Id2是否符合自己的id,如果有一个符合则考虑部分复制,否则认为不是自己的slave全量复制。

放两张图

Redis进阶:集群与企业级解决方案

Redis进阶:集群与企业级解决方案

哨兵

集群

参考资料

https://blog.csdn.net/chenssy/article/details/105760344

相关文章:

  • 2021-10-25
  • 2021-05-05
  • 2021-06-18
  • 2020-06-04
  • 2021-05-30
  • 2021-12-06
  • 2021-12-01
  • 2021-11-07
猜你喜欢
  • 2021-10-21
  • 2021-10-12
  • 2021-08-21
  • 2021-08-10
  • 2021-10-21
  • 2018-07-12
  • 2021-10-06
相关资源
相似解决方案