32 | Redis主从同步与故障切换,有哪些坑?

极客时间 | 《Redis核心技术与实战》学习笔记目录

原文

主从数据不一致

出现原因

主从库间的命令复制是异步进行的

  • 网络延迟
  • 即使从库及时收到了主库的命令,但是,也可能会因为正在处理其它复杂度高的命令(例如集合操作命令)而阻塞

解决方案

  • 在硬件环境配置方面,尽量保证主从库间的网络连接状况良好
  • 使用外部程序来监控主从库间的复制进度
    • Redis 的 INFO replication 命令
      • master_repl_offset 查看主库接收写命令的进度信息
      • slave_repl_offset 从库复制写命令的进度信息

读取过期数据

出现原因

由 Redis 的过期数据删除策略引起

  • Redis 同时使用了两种策略来删除过期的数据,分别是惰性删除策略定期删除策略
  • 有些命令给数据设置的过期时间在从库上可能会被延后,导致应该过期的数据又在从库上被读取到了

不合理配置项导致的服务挂掉

  • protected-mode 限定哨兵实例能否被其他服务器访问
    • 在应用主从集群时,要注意将 protected-mode 配置项设置为 no,并且将 bind 配置项设置为其它哨兵实例的 IP 地址。这样一来,只有在 bind 中设置了 IP 地址的哨兵,才可以访问当前实例,既保证了实例间能够通信进行主从切换,也保证了哨兵的安全性。
  • cluster-node-timeout 设置了 Redis Cluster 中实例响应心跳消息的超时时间
    • 建议将 cluster-node-timeout 调大些(例如 10 到 20 秒)
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus