redis哨兵部署

Redis Sentinel(哨兵)

1.哨兵的作用

1.解决主从复制需要人为干预的问题
2.提供了自动的高可用方案

画图:

2.目录和端口规划

redis节点  6379
哨兵节点   26379

3.部署3台redis单节点主从关系

db01操作

pkill redis
cat >/opt/redis_6379/conf/redis_6379.conf <<EOF   
daemonize yes
bind 127.0.0.1 10.0.0.51
port 6379
pidfile "/opt/redis_6379/pid/redis_6379.pid"
logfile "/opt/redis_6379/logs/redis_6379.log"
dbfilename "redis.rdb"
dir "/data/redis_6379"
appendonly yes
appendfilename "redis.aof"
appendfsync everysec
EOF
systemctl start redis
redis-cli

db02和db03操作

ssh-keygen
ssh-copy-id 10.0.0.51

pkill redis 
rm -rf /opt/redis*
rsync -avz 10.0.0.51:/usr/local/bin/redis-*  /usr/local/bin
rsync -avz 10.0.0.51:/usr/lib/systemd/system/redis.service /usr/lib/systemd/system/
mkdir /opt/redis_6379/{conf,logs,pid} -p
mkdir /data/redis_6379 -p
cat >/opt/redis_6379/conf/redis_6379.conf <<EOF   
daemonize yes
bind 127.0.0.1 $(ifconfig eth0|awk 'NR==2{print $2}')
port 6379
pidfile "/opt/redis_6379/pid/redis_6379.pid"
logfile "/opt/redis_6379/logs/redis_6379.log"
dbfilename "redis.rdb"
dir "/data/redis_6379"
appendonly yes
appendfilename "redis.aof"
appendfsync everysec
EOF
useradd redis -M -s /sbin/nologin
chown -R redis:redis /opt/redis*
chown -R redis:redis /data/redis*
systemctl daemon-reload 
systemctl start redis 
redis-cli

4.配置主从复制

redis-cli -h 10.0.0.52 slaveof 10.0.0.51 6379
redis-cli -h 10.0.0.53 slaveof 10.0.0.51 6379
redis-cli -h 10.0.0.51 info replication

5.部署哨兵节点-3台机器都操作

mkdir -p /data/redis_26379
mkdir -p /opt/redis_26379/{conf,pid,logs}
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
sentinel down-after-milliseconds myredis 3000
sentinel parallel-syncs myredis 1
sentinel failover-timeout myredis 18000
EOF
chown -R redis:redis  /data/redis*
chown -R redis:redis  /opt/redis*
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
systemctl daemon-reload 
systemctl start redis-sentinel
redis-cli -h $(ifconfig eth0|awk 'NR==2{print $2}') -p 26379

关键配置解释:

sentinel monitor myredis 10.0.0.51 6379 2			
# myredis主节点别名  主节点IP 端口  需要2个哨兵节点同意

sentinel down-after-milliseconds myredis 3000
# 认定服务器已经断线所需要的毫秒数

sentinel parallel-syncs myredis 1
# 向主节点发给复制操作的从节点个数,1表示轮训发起复制

sentinel failover-timeout myredis 18000
# 故障转移超时时间

6.哨兵注意

1.哨兵发起故障转移的条件是master节点失去联系,从节点挂掉不会发起故障转移
2.哨兵会自己维护配置文件,不需要手动修改
3.如果主从的结构发生变化,哨兵之间会自动同步最新的消息并且自动更新配置文件
4.哨兵启动完成之后,以后不要再自己去设置主从关系

7.验证主机点

redis-cli -h 10.0.0.51 -p 26379 SENTINEL get-master-addr-by-name myredis

8.哨兵的常用命令

redis-cli -h 10.0.0.51 -p 26379 SENTINEL get-master-addr-by-name myredis
redis-cli -h 10.0.0.51 -p 26379 SENTINEL master myredis
redis-cli -h 10.0.0.51 -p 26379 SENTINEL slaves myredis
redis-cli -h 10.0.0.51 -p 26379 SENTINEL ckquorum myredis

9.模拟故障转移

模拟方法:

关闭redis当前的主节点
观察其他2个节点会不会发生选举
查看哨兵配置文件会不会更新
查看从节点配置文件会不会更新
查看主节点能不能写入
查看从节点是否同步正常

流程:

1)在从节点列表中选出一个节点作为新的主节点,选择方法如下:
a)过滤:“不健康”(主观下线、断线)、5秒内没有回复过Sentinel节点ping响应、与主节点失联超过down-after-milliseconds*10秒。
b)选择slave-priority(从节点优先级)最高的从节点列表,如果存在则返回,不存在则继续。
c)选择复制偏移量最大的从节点(复制的最完整),如果存在则返回,不存在则继续。
d)选择runid最小的从节点

流程图:

结论:

主节点挂掉,哨兵会选举新的主节点
在新主节点上执行slaveof no one
在从节点执行slave of 新主节点
自动更新哨兵配置
自动更新从节点配置

10.故障修复重新上线

启动单节点
检查是否变成从库

11.哨兵加权选举

查看权重

redis-cli -h 10.0.0.51 -p 6379 CONFIG GET slave-priority
redis-cli -h 10.0.0.52 -p 6379 CONFIG GET slave-priority
redis-cli -h 10.0.0.53 -p 6379 CONFIG GET slave-priority

暗箱操作:假如选中53作为最新的master

redis-cli -h 10.0.0.51 -p 6379 CONFIG SET slave-priority 0
redis-cli -h 10.0.0.52 -p 6379 CONFIG SET slave-priority 0

检查:

redis-cli -h 10.0.0.51 -p 6379 CONFIG GET slave-priority  
redis-cli -h 10.0.0.52 -p 6379 CONFIG GET slave-priority  
redis-cli -h 10.0.0.51 -p 26379 sentinel get-master-addr-by-name myredis

主动发生选举

redis-cli -h 10.0.0.51 -p 26379 sentinel failover myredis 
redis-cli -h 10.0.0.51 -p 26379 sentinel get-master-addr-by-name myredi

posted @ 2022-05-20 11:43  hai起奈  阅读(255)  评论(0编辑  收藏  举报