一、Sentinel-Redis,实现主从切换
上一篇讲解了redis主从复制,在我们实际环境当中,实现redis集群,如果主redis宕机,那个从redis则要顶替主redis进行工作(并变为主redis),当挂掉的redis再次启动,它将变成从redis,这就是sentinel的工作方式,Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程。
1、配置Sentinel ,进入我们解压之后的redis目录,下面可以看到sentinel.conf配置文件
这里我只有一台服务器,就再复制了sentinel.conf 为sentinel1.conf
vi sentinel.conf
进行配置文件编辑:
sentinel.conf:
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 5
sentinel1.conf:
port 26479
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 5
<!-- redis-Sentinel ÅäÖà ¶àÀýģʽ -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="127.0.0.1:26379,127.0.0.1:26479" />
第一行配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。
不过需要注意的是,无论你设置要多少个 Sentinel 同意才能判断一个服务器失效,一个 Sentinel 都需要获得系统中多数(majority) Sentinel 的支持,才能发起一次自动故障迁移,并预留一个给定的配置纪元 (Configuration Epoch ,一个配置纪元就是一个新主服务器配置的版本号)。也就是说,如果只有少数(minority)Sentinel 进程正常运作的情况下,是不能执行自动故障迁移的。
down-after-milliseconds 选项指定了 Sentinel 认为服务器已经断线所需的毫秒数(判定为主观下线SDOWN)。
parallel-syncs 选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用。可以通过将这个值设为 1 来保证每次只有一个从服务器处于不能处理命令请求的状态。
在当前目录执行:
redis-server sentinel.conf --sentinel
redis-server sentinel1.conf --sentinel
将两个sentinel服务启动。
我的内存比较小,所以有问题,不过,不妨碍运行。
现在我们的主redis是6379端口,现在我们停止6379端口redis:
可以看到6379端口宕机,6380端口redis变为主redis,我们可以看看tomcat日志:
之前使用6379端口redis共享session,现在切换为6380端口redis
现在我们再启动6379端口redis
可以看到6379端口redis重新增加到集群中。
二 tomcat配置文件:
进入tomcat下的conf文件夹,可以看到context.xml配置文件:
编辑context.xml
使用redis-sentinel配置:
<!-- redis-Sentinel -->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="127.0.0.1:26379,127.0.0.1:26479" />
保存,重启tomcat即可
下面是网上更详细的说明:
http://www.cnblogs.com/Xrinehart/p/3502198.html
http://www.linuxidc.com/Linux/2013-11/92287p3.htm
http://www.linuxidc.com/Linux/2014-02/96079.htm