redis Sentine 哨兵

Scroll Down

第五章: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.哨兵启动完成之后,不要再⾃⼰去设置主从关系