在dba眼中,redis仅仅是一个缓存,不适合作为存储来使用,不管是redis-sentinel集群还是cluster集群,在redis主节点发生意外宕机时没有机制来保证主从节点数据的一致性。但是,很遗憾,业务方很喜欢将redis作为存储来使用,作为缓存使用的很少很少。

对于正常业务使用来说,redis作为存储使用,当redis发生主从切换时,业务需要根据业务日志自己进行数据补偿。但是,进行redis迁移时,一般是由dba来推动在夜间进行,这种情况下如果新的主节点存在写丢失而后让业务立刻进行数据补偿是不合适的。

这时,可以采用如下方法来进行redis-sentinel集群数据无损迁移:

1. 在主节点上执行 config set min-slaves-to-write x 命令阻塞主节点的写操作

2. 比较主从节点的 repl_offset,来判断主从节点的数据是否一致

3. 在主从数据节点的 repl_offset一致时,进行主从切换

4. 切换完成之后,修改原主节点的 min-slaves-to-write,将其修改为 0

我们将这几步放在一个脚本中,基本可以确保在1s左右完成redis主从数据节点切换而写操作无丢失。

对于redis-cluster集群主从切换,在从节点上执行 cluster failover 会阻塞该从节点的主节点直到主从节点数据一致,再进行主从切换。

最新文章

  1. Spring Mvc + Mybatis + sqlserver maven
  2. Ubuntu环境搭建系列—JavaEE篇
  3. 深入了解Mvc路由系统
  4. eclipse快捷键调试总结【转】
  5. android 多屏幕适配 : 第一部分
  6. uva 572 oil deposits——yhx
  7. 虚拟机里面安装Openfiler 2.99
  8. MongoDB - The mongo Shell, mongo Shell Quick Reference
  9. [Everyday Mathematics]20150113
  10. YII开发技巧分享——模型(models)中rules自定义验证规则
  11. Sqlite数据库的加密
  12. Django中的Ajax
  13. 《A First Course in Probability》-chaper8-极限定理-各类不等式
  14. jQuery选择器---层次选择器总结
  15. Day2_and_Day3 文件操作
  16. “Django用户认证系统”学习资料收集
  17. 标签EL和JSTL解读
  18. pythonのpygame初体验
  19. 把存储过程结果集SELECT INTO到临时表
  20. 必须知道的Spring Boot中的一些Controller注解

热门文章

  1. docker基础命令,常用操作
  2. Ubuntu下使用C语言连接Mysql 8.0客户端教程
  3. WebGL 的 Hello World
  4. XML约束DTD
  5. mysql 在已存在的表中添加/删除字段约束AUTO_INCREMENT遇到的问题
  6. 什么是 JavaConfig?
  7. springboot 定时任务 session报错问题
  8. java中的修饰符和基本数据类型
  9. session与cookie的区别? 如果客户端禁止 cookie session 还能用吗?
  10. Linux基础学习 | 用户及用户组