本文不对redis sentinel 的原理和部署做更多说明,通过简单的介绍部署说明一下sentinel客户的实现及部署应该注意的一些问题。想对redis sentinel原理了解更多请求参考:http://redis.cn/topics/sentinel.html
redis sentinel 部署示意图:
从图中可以看到sentinel,介于client和redis之间,请求redis之前,从sentinel获取redis信息。
sentinel 客户端实现流程:
大概分为四步:
1、获取sentinel节点,遍历这些节点,并选出一个可用节点
2、向可用的sentinel节点发送get-master-addr-by-name和master-name,获取当前master;发送slaves和master-name获取所有slave节点,并根据s-down-time等属性,判断slave是否可用
3、获得master后执行一次role来验证是否是master节点
4、根据获得的master和slave节点信息,访问redis服务
python 的redis客户端支持sentinel :https://github.com/andymccurdy/redis-py
部署及注意的问题:
方案一:互备,读写master,slave只做备份使用
优点:结构简单,而且可以把一些影响性能的操作只在slave开启,比如持久化
缺点:支付的服务场景较简单,对访问量大的应用单机支持存在瓶颈,需要更具业务拆分到不同的机器
方案二:读写分离,即master负责写,slave负责读
优点:读写分离,能支持更大访问请求
缺点:想要在服务的机器上关闭持久化等,需要再增加slave的slave实现,所有master的slave都会被读到服务环境(除非客户端中排除)
注意的问题:
1、如果redis配置需要密码才能访问,那么主从密码应该设置成一样的,不然故障转移后,sentinel会访问不到节点
2、特别需要注意的是初始的master上也要配置masterauth,不然切换后主从后同步会异常
3、注意client-output-buffer-limit,min-slaves-to-write等配置
原文:https://www.cnblogs.com/pk-tiger/p/11905860.html