哨兵本质也是一个 redis 服务,只是跟普通的 redis 服务提供了不一样的功能。哨兵是一个分布式架构,因为你要保证 redis 高可用,首先需要保证自己高可用,所以如果我们需要搭建哨兵的话,最少需要部署三个实例,最好是奇数个,因为在后续的故障转移中会涉及到投票。
哨兵的配置文件我们可以在 redis 的 GitHub 项目下下载,在项目下有一个叫做 sentinel.conf 的文件,可以使用它作为我们哨兵的配置模板,当然你也可以使用 redis.conf 配置文件,只需要添加哨兵相关配置就好了。
哨兵相关的配置项不多,主要有以下几个配置项:
// 端口号,默认是 redis 实例+20000,所以我们沿用这个规则就好了
port 26379
// 是否守护进程运行
daemonize yes
// 日志存放的位置,这个非常重要,通过日志可以查看故障转移的过程
logfile "26379.log"
// 监视一个名为 mymaster(自定义) 的 redis 主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 ,
// 最后面的 2 代表着至少有两个哨兵认为主服务器出现故障才会进行故障转移,否则认定主服务未失效
sentinel monitor mymaster 127.0.0.1 6379 2
// 哨兵判断服务器失效的响应时间,超过这个时间未接收到服务器的回应,就认为该服务器失效了
sentinel down-after-milliseconds mymaster 30000
// 完成故障转移之后,最多多少个从服务器可以同时发起数据复制,数字越小,说明完成全部从服务数据复制的时间越长
// 数字越大,对主服务器的压力就变大了
sentinel parallel-syncs mymaster 1
// 故障转移超时时间
sentinel failover-timeout mymaster 180000
对于每个 Sentinel 实例配置除了 port 和 logfile 不同之外,其他配置项都是一样的。修改好配置后,我们可以使用 ./redis-sentinel sentinel.conf 命令来启动哨兵,命令跟 redis 实例启动差不多,因为哨兵也是 redis 实例,所以我们可以使用 ./redis-cli -p 26379 info sentinel 命令查看当前的哨兵信息,如下图所示: