1、准备工作
哨兵节点的搭建最少需要3个节点、在开始之前我们需要先来搭建一个主从集群(一主两从)具体搭建步骤请查看https://segmentfault.com/a/1190000039261382
2、配置哨兵
哨兵的默认端口为26397、默认端口不能和其他机器指定的端口连通,只能在本地访问。在这里我们使用端口5000(可以根据自己的情况定)。
2.1 创建相应的文件夹
#存放哨兵配置文件
mkdir /etc/sentinel
#存放数据文件
mkdir -p /var/sentinel/5000
#存放日志文件
mkdir -p /var/log/snetinel
cd /var/log/snetinel
tuoch /var/log/snetinel/sentinel.log
2.2修改配置
sentinel.conf的默认配置在reids的安装目录已经有我们将它copy到/etc/sentinel下,做如下修改
cp /usr/local/redis-6.0.6/sentinel/sentinel.conf /ect/sentinel/5000.conf
vim 5000.conf
prot 5000
bind 本机IP或者直接注释掉
dir /var/sentinel/5000
sentinel monitor mymaster <masterIP> <masterPort> 2
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
logfile "/var/log/snetinel/sentinel.log"
daemonize yes
#如果redis master配置访问口令需要如下配置
sentinel auth-pass mymaster <password>
按照步骤我们将其它两台哨兵都配置好。
3、启动哨兵
在三台服务器上分别启动哨兵节点
redis-sentinel /etc/sentinal/5000.conf
哨兵状态检测
redis-cli -h <节点IP> -p 5000
sentinel master mymaster
SENTINEL slaves mymaster
SENTINEL sentinels mymaster
SENTINEL get-master-addr-by-name mymaster
哨兵启动完成查看日志顺利完成。
⚠️ *这里有个问题我们在做容灾的时候,redis集群配置了口令, 如果master节点挂了会进行故障转移重新选举master,但是当原来的master节点重启后会发现连接不上当前master,因为在原master配置中没有加 masterauth password
master节点密码的配置,给加上在重启就自动成slave节点加入到集群中。*
4、配置解释
sentinel monitor master-group-name hostname port quorum
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
quorum的解释如下:
(1)至少多少个哨兵要一致同意,master进程挂掉了,或者slave进程挂掉了,或者要启动一个故障转移操作
(2)quorum是用来识别故障的,真正执行故障转移的时候,还是要在哨兵集群执行选举,选举一个哨兵进程出来执行故障转移操作
(3)假设有5个哨兵,quorum设置了2,那么如果5个哨兵中的2个都认为master挂掉了; 2个哨兵中的一个就会做一个选举,选举一个哨兵出来,执行故障转移; 如果5个哨兵中有3个哨兵都是运行的,那么故障转移就会被允许执行
down-after-milliseconds,超过多少毫秒跟一个redis实例断了连接,哨兵就可能认为这个redis实例挂了
parallel-syncs,新的master别切换之后,同时有多少个slave被切换到去连接新master,重新做同步,数字越低,花费的时间越多
假设你的redis是1个master,4个slave
然后master宕机了,4个slave中有1个切换成了master,剩下3个slave就要挂到新的master上面去
这个时候,如果parallel-syncs是1,那么3个slave,一个一个地挂接到新的master上面去,1个挂接完,而且从新的master sync完数据之后,再挂接下一个
如果parallel-syncs是3,那么一次性就会把所有slave挂接到新的master上去
failover-timeout,执行故障转移的timeout超时时长
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。