第五章:redis 哨兵
01. 哨兵的作用
01.解决主从复制需要认为干预的问题
02.提供了自动的高可用方案
02. 环境规划
redis 节点端口 6379
哨兵节点端口 26379
主节点:db01 10.0.0.51
从节点:db02 10.0.0.52
从节点:db03 10.0.0.53
03. 部署3台redis单节点
1)db01 上操作
# 关闭redis
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
# 启动redis
systemctl restart redis
redis-cli
2)在db02和db03上操作
# 配置并推送密钥到主库
ssh-keygen
ssh-copy-id 10.0.0.51
- 开始操作
# 关闭redis
pkill redis
# 为了版本,配置同一,清空原有的
rm -rf /opt/redis*
rm -rf /data/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 -p /opt/redis_6379/{conf,logs,pid}
mkdir -p /data/redis_6379
# 创建运行用户,并授权
groupadd redis -g 1000
useradd redis -u 1000 -g 1000 -M -s /sbin/nologin
chown -R redis.redis /data/redis*
chown -R redis.redis /opt/redis*
# 编写配置文件
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
# 启动redis
systemctl daemon-reload
systemctl start redis
redis-cli
04. 配置主从复制
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
05. 在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 /opt/redis*
chown -R redis.redis /data/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 10.0.0.51 -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
#故障转移超时时间
06. 验证主机节点
redis-cli -h 10.0.0.51 -p 26379 SENTINEL get-master-addr-by-name myredis
07.哨兵注意点
1.哨兵发起故障转移的条件是master节点失去联系,从节点挂掉不会发起故障转移
2.哨兵会⾃⼰维护配置⽂件,不需要⼿动修改
3.如果主从的结构发⽣变化,哨兵之间会⾃动同步最新的消息并且⾃动更新配置⽂件
4.哨兵启动完成之后,不要再⾃⼰去设置主从关系