Redis-Sentinel安装

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

 

 

 

你可能感兴趣的:(redis,Redis-sentinel,redis高可用)