设为首页 收藏本站
查看: 910|回复: 0

[经验分享] 也谈Redis HA方案总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-11-7 07:30:04 | 显示全部楼层 |阅读模式
  Redis是一个Key Value数据库,支持丰富的数据类型,可以用做cache来也可以用做storage。目前仅支持replication。
  以下是对Redis HA方案进行总结,没有万能的解决方案,需要根据自己的生产环境的业务情况不断修改和完善自己的方案。
  一、redis_failover
  官方网站
  简介:
  使用ruby编写,通过NodeManager检查redis服务器的状态,然后更新zookeeper中的列表,zookeeper来维护当前可用服务器列表。
DSC0000.jpg

  zookeeper中保存三个列表:master、slaves、unavailable。
  NodeManager通过配置文件读取node列表。
  每个node一个NodeWatcher线程,每隔2秒钟检查一次node的状态(syncing、available、unavailable)
  如果node连续max_failures次失败的话,设置为unavailable
  NodeWatcher将 状态存放在NodeManager的状态queue中
  NodeManager的一个线程定期的检查queue中的状态,对状态进行处理:
  1.unavailable
  处理时判断node是否为master,如果为master则执行promote_new_master将选出新的master并对剩余的slave执行slaveof,如果是slave的话,则从slave列表中移除
  2.syncing
  将node加入到unavailable列表中,并从slave列表中移除
  3.available
  判断node是否在当前的available列表中,如果不在列表中,则加入到available列表中。
  可以部署多个NodeManager,一个时间只有一个 NodeManager处于可用状态,多个NodeManager注册到zookeeper中。
  缺点:
  1.现有代码需要进行改造,以支持通过zookeeper来获取可用的服务列表(有现成的客户端)。
  2.没有考虑到多机房的本地化原则(可以通过增加客户端的判断逻辑来进行)。
  3.只有一个active的NodeManager节点,如果该NodeManager节点的网络出现问题,则会出现误操作的现象。
  二、redis + sentinel (官方)
  官方网站
  简介:通过多个Sentinel一起监控redis集群,检测到master不可用时,通过投票来决定master是否需要切换。Sentinel 之间互相检测(通过在共同检测的master中写入信息来进行),Sentinel 只需要配置master节点,自动通过master来获取已经连接的slave列表。当其中的某一个Sentinel 检测到master宕机之后,标示master为SDOWN,向其他的Sentinel 发送SENTINEL is-master-down-by-addr命令来进行投票,投票确认之后标识为ODOWN,开始选择一个新的master,并且进行切换。
  缺点:
  1. 没有合适的客户端,需要自己处理各种事件。
  2. 目前还没有release。
  三、redis 双写
   DSC0001.jpg
  通过应用服务器在程序侧写入到两个节点来进行高可用.
  缺点:
  1. 数据的一致性比较欠缺。(程序侧采用随机读,如果网络出现抖动延迟,写入数据延迟,随机导致读取的数据不一致,所以后来双写的读写都在同一个节点上而不是随机读,尽量保证数据一致性)
  2. 当其中一台master挂掉之后,后续添加新的master进行运维成本比较高。(手动重做主从复制)
  典型的一个实现是淘宝的tedis,是一个redis的java客户端,通过客户端的多写随机读来实现高可用。
  四、redis + keepalived
  五、redis cluster
  完全的一个分布式解决方案,通过hash和自身的replication实现水平扩展和高可用。
  不存在类似于HBase Meta表一样的索引表,客户端在访问随机一台redis server时,redis server告知map of hash slots和nodes之间的关系,客户端缓存起来,下次访问自己进行路由;cluster发生变化之后,客户端访问时出出错并告知正确的信息然后重新访问。cluster不负责转发。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631683-1-1.html 上篇帖子: Redis常用命令集 下篇帖子: redis服务部署及配置详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表