Redis2.X版本是不支持分布式集群的,只能通过第三方的组件进行实现。上一篇文章介绍了twitter的twemproxy,但twemproxy实现的是将value平均分布到各个服务器上,且只能将失败节点移除,这样就保证不了高可用性了。下面介绍下redis的Sentinel,Sentinel也是redis作者开发的,目前已经集成在redis的安装包里,主要目的就是实现redis的高可用性。
我认为,Sentinel实现的最主要的一个功能就是能做到自动故障迁移,即当某一个master挂了的时候,可以自动的将某一个slave提升为新的master,且原master的所有slave也都自动的将自己的master改为新提升的master,这样我们的程序的可用性大大提高了。
--------------------------------------------------------------------------------------------------------------
下面记录下安装即配置过程:
1、安装非常简单,只要redis安装完成,Sentinel就安装完成了,Sentinel集成在redis里了
2、配置,牵扯到的配置文件为redis安装目录下的:sentinel.conf
port 26380 #Sentinel启动端口
dir "/tmp/6380" #Sentinel的工作目录
sentinel monitor mymaster 192.168.100.90 6380 2
#Sentine监听的maste地址,第一个参数是给master起的名字,第二个参数为master IP,第三个为master端口,第四个为当该master挂了的时候,若想将该master判为失效,在Sentine集群中必须至少2个Sentine同意才行,只要该数量不达标,则就不会发生故障迁移。
sentinel down-after-milliseconds mymaster 30000
#master在多长时间内一直没有给Sentine返回有效信息,则认定该master主观下线
sentinel parallel-syncs mymaster 1
#当在执行故障转移时,设置几个slave同时进行切换master,该值越大,则可能就有越多的slave在切换master时不可用,可以将该值设置为1,即一个一个来,这样在某个slave进行切换master同步数据时,其余的slave还能正常工作
sentinel failover-timeout mymaster 180000
#执行故障迁移超时时间,即在指定时间内没有大多数的sentinel 反馈master下线,该故障迁移计划则失效
#在同一个配置文件里可以配置多个master监听
3、启动Sentinel
#方式一,使用redis-sentinel命令启动 redis-sentinel /path/to/sentinel.conf #方式二, 使用redis-server 命令,启动一个运行在 Sentinel 模式下的 Redis 服务器,即redis与sentinel同时启动 redis-server /path/to/sentinel.conf --sentinel
注:不论哪种方式启动,必须要指定sentinel配置文件的路径
--------------------------------------------------------------------------------------------------------------
名词解释:
1、主观下线:如果服务器在down-after-milliseconds给定的毫秒数之内, 没有返回 Sentinel 发送的 PING 命令的回复, 或者返回一个错误, 那么 Sentinel 将这个服务器标记为主观下线(SDOWN
)
2、客观下线:只有在足够数量的 Sentinel 都将一个服务器标记为主观下线之后, 服务器才会被标记为客观下线(ODOWN
)
只有当master被认定为客观下线时,才会发生故障迁移
--------------------------------------------------------------------------------------------------------------
注意事项:
1、只有Sentinel 集群中大多数服务器认定master主观下线时master才会被认定为客观下线,才可以进行故障迁移,也就是说,即使不管我们在sentinel monitor中设置的数是多少,就算是满足了该值,只要达不到大多数,就不会发生故障迁移。
2、官方建议sentinel至少部署三台,且分布在不同机器。这里主要考虑到sentinel的可用性,假如我们只部署了两台sentinel,且quorum设置为1,也可以实现自动故障迁移,但假如其中一台sentinel挂了,就永远不会触发自动故障迁移,因为永远达不到大多数sentinel认定master主观下线了。
3、sentinel monitor配置中的master IP尽量不要写127.0.0.1或localhost,因为客户端,如jedis获取master是根据这个获取的,若这样配置,jedis获取的ip则是127.0.0.1,这样就可能导致程序连接不上master
4、当sentinel 启动后会自动的修改sentinel.conf文件,如已发现的master的slave信息,和集群中其它sentinel 的信息等,这样即使重启sentinel也能保持原来的状态。注意,当集群服务器调整时,如更换sentinel的机器,或者新配置一个sentinel,请不要直接复制原来运行过得sentinel配置文件,因为其里面自动生成了以上说的那些信息,我们应该复制一个新的配置文件或者把自动生成的信息给删掉。
5、当发生故障迁移的时候,master的变更记录与slave更换master的修改会自动同步到redis的配置文件,这样即使重启redis也能保持变更后的状态。
--------------------------------------------------------------------------------------------------------------
sentinel命令:
我们可以使用 redis-cli -p sentinel端口 打开一个redis客户端去执行这些命令
- PING :返回
PONG
。 - SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态。
SENTINEL slaves <master name>
:列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。SENTINEL get-master-addr-by-name <master name>
: 返回给定名字的主服务器的 IP 地址和端口号。 如果这个主服务器正在执行故障转移操作, 或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP 地址和端口号。SENTINEL reset <pattern>
: 重置所有名字和给定模式pattern
相匹配的主服务器。pattern
参数是一个 Glob 风格的模式。 重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。SENTINEL failover <master name>
: 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移 (不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新)
--------------------------------------------------------------------------------------------------------------
客户端:
Jedis支持sentinel
//通过以下方式即可获取连接池,注意这里填写的master名字,应与sentinel配置文件中配置的一致 JedisSentinelPool pool=new JedisSentinelPool("mymaster", hosts, config); Jedis jedis=pool.getResource(); jedis.set("name","zhangsan");
参考:http://redisdoc.com/topic/sentinel.html
相关推荐
Windows环境Redis-Sentinel安装,如需使用,请查看http://blog.csdn.net/u010648555/article/details/79430105 博文的介绍!
示例:$sentinel = new \Jenner\RedisSentinel\Sentinel(); $sentinel->connect('127.0.0.1', 6379); $address = $sentinel->getMasterAddrByName('mymaster'); $redis = new Redis(); $redis->connect($...
redis-sentinel(哨兵机制)集群安装包,解压即可使用;在linux环境上快速搭建一个简单的基于哨兵模式的redis集群
该资源是本人在学习redis过程中积累总结的经验以分享给大家:redis-sentinel高可用一键配置工具就是一键帮你从下载->安装->配置 好 redis 高可用的服务环境,省去了很多弯路,节约了更多的时间花在自己项目的主要...
dir "/usr/local/etc/redis6370" # 修改启动端口,依次修改为,26371,26372,26373 port 26370 # 添加关闭保护模式 protected-mode no # 修改sentinel monitor,这个不需要改动,都一样就可以,注意顺序,这个...
docker-compose安装redis-sentinel集群(1主+2副+2哨兵)
redis-sentinel集群及双机热备
Bitnami包装的Redis(TM)Sentinel是什么? 免责声明:REDIS(r)是Redis Labs Ltd.的注册商标。RedisLabs Ltd.保留任何权利。Bitnami的任何使用仅供参考,并不表示Redis Labs Ltd之间有任何赞助,认可或从属关系。 ...
资源来自pypi官网。 资源全名:django-redis-sentinel-plugin-1.0.0.tar.gz
redis-sentinel 组建脚本
搭建Redis高可用集群的哨兵模式(Redis-Sentinel)的实例配置,可以为 Redis 容灾+高可用 应用场景提供解决方案Demo
redis 哨兵(sentinel)与springboot集成实战-redis-sentinel
Redis-Sentinel高可用架构学习
redis-sentinel介绍.rar
redis-sentinel哨兵集群搭建并整合springboot完美解决方案
$ docker run --name redis-sentinel-exporter bitnami/redis-sentinel-exporter:latest 为什么要使用Bitnami Images? Bitnami密切跟踪上游源代码变化,并使用我们的自动化系统及时发布该图像的新版本。 对于...
redis的主从设置,以及redis-sentinel 哨兵的高可用配置。只要解压将文件放置在对应的redis服务下,修改对应的ip,就可以直接运行。如果不通的话,要考虑端口是否开放。
修复 STRALGO LCS 的整数溢出(CVE-2021-32625) 。在 Redis 6.0 或更新的...Sentinel:修复空字符串 sentinel-user/sentinel-pass 配置的 CONFIG SET ( #8958 ) 在没有流量时强制执行客户端输出缓冲区软限制 ( #8833 )
redis-sentinel-demo redis-sentinel示例,实现高可用(Auto Failover:自动故障转移),主从自动切换.包含redis配置,redis-sentinel配置,以及Java示例代码. 参考原帖地址:...
NULL 博文链接:https://yuhuiblog695685688425687986842568269.iteye.com/blog/2391347