前提环境:已经实现 主从复制
准备三台服务器 A B C ,目标:A作为主 B C 作为从
1:在B 和 C 打开 redis.conf 配置文件, 搜索 REP
2:在注释的命令下面写上 replicaof master的IP地址 端口
# replicaof <masterip> <masterport>
3:在当前页面找到 masterauth 这行注释, 在下面写上 masteratuh master的密码
# masterauth <master-password>
4:然后保存文件 :wq
5:在 A 的 redis 根目录下,打开 sentinel.conf 文件 ,这个文件主要就是实现哨兵机制的配置文件
6:主要有这7个参数要设置
1. protected-mode
2. daemonize
3. logfile
4. dir
5. sentinel monitor
6. sentinel auth-pass
7. sentinel down-after-milliseconds
- protected-mode no 代表关闭保护模式
- daemonize yes 开启后台运行
- logfile /usr/local/redis/sentinel/sentinel.log 哨兵的日志文件命名和写在哪个目录下(这边根据自己的实际路径配)
- dir /usr/local/redis/sentinel 设置sentinel相关的文件存放位置(这边根据自己的实际路径配)
- sentinel monitor mymaster A的ip 6379 2 设置master的ip 端口 投票数 最后一个参数 quorum 设置选举投票通过数, 如果你有5个 sentinel进程,并且给主服务器仲裁设置为2。当master 发生故障时,如果有两个哨兵同时就master不可访问达成一致,则其中两个将尝试启动故障转移。 如果总共至少有三个Sentinel可以访问,则故障转移将被授权实际开始
- sentinel auth-pass A的ip 密码 设置A的ip地址 ,所有服务器Redis 密码设置为一个。这样每个Sentinel都可以与其他的Sentinel进行对话,而无需为每个Sentinel 配置访问所有其他Sentinel的密码。 在使用此配置之前,要确保客户端能够将Auth 命令发送到Sentinel 实例
- sentinel down-after-milliseconds mymaster 10000 这边为了设置设置为10秒,生产环境建议不进行改动。当10内其他Sentinels 检测不到master 的心跳时,开始选举,设置故障转移
7:将刚刚在 A 中配置好的 Sentinel 文件复制到 B 和 C 中
8:将所有机子的 redis 相关进程进行关闭 ,开始测试
第1个窗口为 监听 A(master) 的sentinel 日志
第2、3、4个窗口为 A、B、C 当前状态
9: 当前Sentinel 状态 , 在未关闭 master 服务前 一主二从
10:将A(Master) 进行关闭 ,查看A Sentinel 日志,进行了选举 B 成为了新master
11:将A 之前 down 掉的master 进行恢复,查看日志发现被 转换成 slave 了 。也就是说当master 挂掉后,在重新恢复后会变成Slave