1 前言
前面已经搭建好了主从架构的伪集群(还不知道主从架构怎么搭建的,可以看下我之前的文章),现在我们要来加上哨兵了。在开始之前,先科普一下这个哨兵集群的作用。哨兵集群是用来监测 redis 集群的状态和实现故障转移的。
redis sentinel 的重要特性:
-
监控
Sentinel 不断检查您的主实例和副本实例是否按预期工作。
-
通知
Sentinel 可以通过 API 通知系统管理员或其他计算机程序,受监控的 Redis 实例之一出现问题。
-
自动故障转移
如果主服务器未按预期工作,Sentinel 可以启动故障转移过程,其中副本将提升为主服务器,其他附加副本将重新配置为使用新的主服务器,并通知使用 Redis 服务器的应用程序要使用的新地址连接时。
-
配置提供者
Sentinel 充当客户端服务发现的权威来源:客户端连接到 Sentinel 以询问负责给定服务的当前 Redis 主节点的地址。如果发生故障转移,Sentinels 将报告新地址。
更多详细信息请看官网
2 搭建 sentinel 集群
这些是之前搭建主从架构时配置好的目录。现在要给它们加上 sentinel 的配置 sentinel.conf,它们三个的配置都一样,默认 6379 是 master node,但是注意端口不能一样。
#当前Sentinel服务运行的端口
port 26379
# 哨兵监听的主服务器 sentinel monitor [master-name] [master ip] [master port] [票数,将master判断为失效至少需要N个Sentinel同意,仅用于检测master连接失败]
sentinel monitor mymaster 127.0.0.1 6379 2
# 5秒内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 5000
#如果1分钟内,mysater仍没启动过来,则进行故障转移
sentinel failover-timeout mymaster 60000
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
2.1 配置启动脚本
这启动脚本只是方便使用而已,不是必须的
startRedisSentinel.bat
@echo off
redis-server.exe sentinel.conf --sentinel
@pause
2.2 测试 sentinel集群
-
先启动 redis集群
再启动 sentinel集群
-
通过 redis-cli 访问 sentinel集群中任一节点
4.通过 redis-cli 访问 sentinel集群中任一节点
# 访问 26379 节点
redis-cli -p 26379
2.2.1 查看master信息
sentinel master mymaster
其中有一些信息是值得我们关注的:
-
num-other-sentinels
是 2,所以我们知道 Sentinel 已经检测到该 master 的另外两个 Sentinel。如果您检查日志,您将看到+sentinel
生成的事件。 -
flags
只是master
。如果主人不在了,我们也可以在这里看到s_down
或标记。o_down
-
num-slaves
是2,因为我这里有两个从节点。
2.2.2 查看其他哨兵信息
SENTINEL sentinels mymaster
2.2.3 获取当前 master 节点地址
SENTINEL get-master-addr-by-name mymaster
2.2.4 测试故障转移
# 访问master节点,并且让它睡眠30秒
redis-cli -p 6379 DEBUG sleep 30
如下图所示,因为 6379 睡眠了30秒,被哨兵发现了(26379控制台打印的日志可以看到有2个哨兵投票确认master失联),所以发起故障转移,6380成了新的master
再次请求 SENTINEL get-master-addr-by-name mymaster
,会得到 6380 的地址。