一、哨兵架构图
二、哨兵作用
1.解决主从复制需要⼈为⼲预的问题
2.提供了⾃动的⾼可⽤⽅案
三、哨兵部署前提
端口规划
redis节点 6379
哨兵节点 26379
三台redis单节点主从关系
如果redis有密码认证,则需要如下变更
四、哨兵部署
1、生成配置目录
mkdir -p /data/redis_26379
mkdir -p /opt/redis_26379/{conf,pid,logs}
2、生成配置文件
cat >/opt/redis_26379/conf/redis_26379.conf << EOF
bind $(ifconfig eth0|awk 'NR==2{print $2}') #哨兵监听地址
port 26379
daemonize yes
logfile /opt/redis_26379/logs/redis_26379.log
dir /data/redis_26379
sentinel monitor myredis 10.0.0.51 6379 2
#哨兵 监听 组名称 主节点 端口 “2”表示只要有两个选票证明节点有问题,
进行切换主库
sentinel down-after-milliseconds myredis 3000 #主库宕机3秒就进行切库
sentinel parallel-syncs myredis 1 #向主节点发给复制操作的从节点个数,1表示轮训发起复制
sentinel failover-timeout myredis 18000 #故障转移超时时间
sentinel auth-pass myredis 123456 #主节点密码信息
EOF
3、授权配置文件
chown -R redis:redis /data/redis*
chown -R redis:redis /opt/redis*
4、生成system管理文件
cat >/usr/lib/systemd/system/redis-sentinel.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-sentinel /opt/redis_26379/conf/redis_26379.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 26379 shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
5、启动哨兵
systemctl daemon-reload
systemctl start redis-sentinel
6、登录哨兵
redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 26379
7、验证主机节点
redis-cli -h 10.0.0.51 -p 26379 SENTINEL get-master-addr-by-name myredis
myredis #组名称
五、哨兵注意事项
1.哨兵发起故障转移的条件是master节点失去联系,从节点挂掉不会发起故障转移
2.哨兵会⾃⼰维护配置⽂件,不需要⼿动修改
3.如果主从的结构发⽣变化,哨兵之间会⾃动同步最新的消息并且⾃动更新配置⽂件
4.哨兵启动完成之后,不要再⾃⼰去设置主从关系
六、哨兵的常⽤命令
(一)、验证主节点
redis-cli -a 123 -h 10.0.0.151 -p 26379 SENTINEL get-master-addr-by-name myredis
(二)、查看主节点详细信息
redis-cli -a 123 -h 10.0.0.151 -p 26379 SENTINEL master myredis
(三)、查看从节点详细信息
redis-cli -a 123 -h 10.0.0.151 -p 26379 SENTINEL slaves myredis
(四)、查看可用节点
redis-cli -a 123 -h 10.0.0.151 -p 26379 SENTINEL ckquorum myredis
(五)、查看各redis节点权重
redis-cli -h 10.0.0.51 -p 6379 -a 123456 CONFIG GET slave-priority
(六)设置redis节点权重
redis-cli -h 10.0.0.51 -p 6379 -a 123456 CONFIG SET slave-priority 0
(七)、手动触发故障转移
redis-cli -h 10.0.0.51 -p 26379 -a 123456sentinel failover myredis
七、高可用实现流程
1、在从节点列表中选出⼀个节点作为新的主节点,选择⽅法如下:
a)过滤:“不健康”(主观下线、断线)、5秒内没有回复过Sentinel节点ping响应、
与主节点失联,超过down-after-milliseconds*10秒。
b)选择slave-priority(从节点优先级)最⾼的从节点列表,如果存在则返回,不存在则继续。
c)选择复制偏移量最⼤的从节点(复制的最完整),如果存在则返回,不存在则继续。
d)选择runid最⼩的从节点
2、在新主节点上执⾏slaveof no one
3、在从节点执⾏slave of 新主节点
4、⾃动更新哨兵配置
5、⾃动更新从节点配置
八、哨兵缺点
1、主库写压力太大
2、资源利用率不高
3、连接过程繁琐,效率低