环境搭建
节点 | ip | 端口 | 监听Redis节点 |
---|---|---|---|
Sentinel1 | 192.168.211.141 | 8001 | 7001 |
Sentinel2 | 192.168.211.141 | 8002 | 7002 |
Sentinel3 | 192.168.211.141 | 8003 | 7003 |
拷贝 /usr/local/server/redis-cluster 下的单节点 redis 到 /usr/local/server/redis-cluster/sentinel/目录下,分别拷贝3分,命名为 sentinel , sentinel2 , sentinel3 ,并且修改每个目录下的配置文件sentinel.conf ,修改 port 、监听节点信息、后台运行,配置如下:
第1台的 sentinel.conf :
port 8001
sentinel monitor mymaster 192.168.211.141 7001 2
daemonize yes
第2台的 sentinel.conf :
port 8002
sentinel monitor mymaster 192.168.211.141 7002 2
daemonize yes
第3台的 sentinel.conf :
port 8003
sentinel monitor mymaster 192.168.211.141 7003 2
daemonize yes
参数说明:
sentinel monitor mymaster 192.168.211.141 7003 2
表示执行Sentinel监控,mymaster给当前监控取个名字,可以随意取,192.168.211.141 7003,表示监听该主节点,2
表示有2个sentinel主观(sdown)认为该节点宕机了,则该节点就编程下线状态(odown)
启动:(到每台sentinel的bin目录下执行启动)
./redis-sentinel ./sentinel.conf
Sentinel集群讲解
测试下故障自动转移,停掉 redis-7001 节点,可以看到如下日志:
此时哨兵这边会出现如下日志,表示7001节点客观上宕机次数-1,并且将该节点添加为7005的从节点:
日志信息说明表
+reset-master <instance details> :主服务器已被重置。
+slave <instance details> :一个新的从服务器已经被 Sentinel 识别并关联。
+failover-state-reconf-slaves <instance details> :故障转移状态切换到了 reconf-slaves 状态。
+failover-detected <instance details> :另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成
了主服务器。
+slave-reconf-sent <instance details> :领头(leader)的 Sentinel 向实例发送了 SLAVEOF 命令,为实例
设置新的主服务器。
+slave-reconf-inprog <instance details> :实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程
仍未完成。
+slave-reconf-done <instance details> :从服务器已经成功完成对新主服务器的同步。
-dup-sentinel <instance details> :对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除
—— 当 Sentinel 实例重启的时候,就会出现这种情况。
+sentinel <instance details> :一个监视给定主服务器的新 Sentinel 已经被识别并添加。
+sdown <instance details> :给定的实例现在处于主观下线状态。
-sdown <instance details> :给定的实例已经不再处于主观下线状态。
+odown <instance details> :给定的实例现在处于客观下线状态。
-odown <instance details> :给定的实例已经不再处于客观下线状态。
+new-epoch <instance details> :当前的纪元(epoch)已经被更新。
+try-failover <instance details> :一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中
(waiting to be elected by the majority)。
+elected-leader <instance details> :赢得指定纪元的选举,可以进行故障迁移操作了。
+failover-state-select-slave <instance details> :故障转移操作现在处于 select-slave 状态 ——
Sentinel 正在寻找可以升级为主服务器的从服务器。
no-good-slave <instance details> :Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间
之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。
selected-slave <instance details> :Sentinel 顺利找到适合进行升级的从服务器。
failover-state-send-slaveof-noone <instance details> :Sentinel 正在将指定的从服务器升级为主服务
器,等待升级功能完成。
failover-end-for-timeout <instance details> :故障转移因为超时而中止,不过最终所有从服务器都会开始复制
新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。
failover-end <instance details> :故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。
+switch-master <master name> <oldip> <oldport> <newip> <newport> :配置变更,主服务器的 IP 和地址
已经改变。 这是绝大多数外部用户都关心的信息。
+tilt :进入 tilt 模式。
-tilt :退出 tilt 模式。
项目中链接Redis集群或者Redis哨兵,只需要配置一下 application.yml即可 :
spring:
#Redis
redis:
#timeout: 50000
sentinel:
nodes: 192.168.211.141:8001,192.168.211.141:8002,192.168.211.141:8003
#cluster:
# nodes: 192.168.211.141:7001,192.168.211.141:7002,192.168.211.141:7003,192.168.211.141:7004,192.168.211.141:7005,192.168.211.141:7006