centos7-配置redis主从以及配置哨兵模式

因单机运行redis出现故障导致业务中断及数据丢失。故需要配置redis主从库甚至哨兵模式保障redis的高可用性
主从及哨兵模式配置说明

服务器名称及模式 IP地址
redis-master:6379 10.10.10.10
redis-slave:6379 10.10.10.11
redis-slave:6379 10.10.10.12
redis-sentinel:26379 10.10.10.10
redis-sentinel:26379 10.10.10.11
redis-sentinel:26379 10.10.10.12

配置从库

  • 准备工作
    在三台服务器上分别安装redis单机版,并配置启动项

  • 配置从库(10.10.10.11 / 10.10.10.12)

vim /opt/redis/conf/redis.conf
## 新增配置项

replicaof 10.10.10.10 6379

如果希望从库持续为只读,可以添加配置项'replica-read-only yes'

  • 重启服务(10.10.10.11 / 10.10.10.12)
systemctl restart redis.service

检测办法

  • 打开三个命令窗口,分别连接三台redis
/opt/redis/bin/redis-cli -h 10.10.10.10 -p 6379 -a password
/opt/redis/bin/redis-cli -h 10.10.10.11 -p 6379 -a password
/opt/redis/bin/redis-cli -h 10.10.10.12 -p 6379 -a password
  • 先通过KEYS *检测确认所有库中数据都为空
10.10.10.10:6379> KEYS *
(empty list or set)

10.10.10.11:6379> KEYS *
(empty list or set)

10.10.10.12:6379> KEYS *
(empty list or set)
  • 在主节点上写入一个key值,并查询
10.10.10.10:6379> set a 1
OK
10.10.10.10:6379> KEYS *
1) "a"
10.10.10.10:6379> get a
"1"
  • 从库节点上进行查询所有key值以及查询key值'a'
10.10.10.11:6379> KEYS *
1) "a"
10.10.10.11:6379> get a
"1"

10.10.10.12:6379> KEYS *
1) "a"
10.10.10.12:6379> get a
"1"
  • redis主从库创建成功

仅配置redis的主从库,当redis-master故障期,不会自动切换主从关系,所以需要配置哨兵模式(sentinel)对其主从关系进行管理。
Redis的Sentinel最小配置是一主一从。建议配置三台(sentinel),如需扩展,需按照奇数进行扩增

  • 添加(sentinel)配置参数(三台服务器配置一致)
cat << EOF > /opt/redis/conf/sentinel.conf
port 26379
daemonize yes
pidfile /var/run/redis/redis-sentinel.pid
logfile /data/redis/logs/sentinel.log
dir /data/redis/data/
sentinel monitor mymaster 10.10.10.10 6379 2
sentinel auth-pass mymaster password
#哨兵检测确认主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000
#指定了在发生主备切换时,最多可以有多少个slave同时对新的master进行同步,
sentinel parallel-syncs mymaster 1
#故障转移的超时时间
sentinel failover-timeout mymaster 180000
#默认情况下,SENTINEL SET将无法更改通知脚本
sentinel deny-scripts-reconfig yes
EOF

chown -R redis:redis /data/redis /opt/redis /var/run/redis
  • 全部启动Sentinel

启动顺序 master -> slave 1/2 -> sentinel 1/2/3

sudo -u redis /opt/redis/bin/redis-sentinel /opt/redis/conf/sentinel.conf
  • 查看运行状态
/opt/redis/bin/redis-cli -p 26379

# 查看主库状态
> sentinel master mymaster

# 查看从库状态
> sentinel slaves mymaster

# 查看其它sentinel状态
> sentinel sentinels mymaster
  • 测试主从切换
# 主节点关闭redis
systemctl stop redis

# 等待30秒,通过从库查看master机器状态
/opt/redis/bin/redis-cli -h 10.10.10.12 -p 6379 -a password info |grep master_host
master_host:10.10.10.11

在通过启动原主服务,关闭被提升为master的从库服务,查看是否有新的master机器被提升。


使用系统systemctl管理redis启动关闭以及异常关闭重启

  • 创建启动文件
cat << EOF > /usr/lib/systemd/system/redis-sentinel.service
[Unit]
Description=redis-sentinel
After=network.target

[Service]
Type=forking
User=redis
ExecStart=/opt/redis/bin/redis-sentinel /opt/redis/conf/sentinel.conf
Restart=on-failure
RestartSec=10s
KillMode=control-group
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
  • 启动并设置开机启动
systemctl start redis-sentinel.service
systemctl enable redis-sentinel.service
原文地址:https://www.cnblogs.com/taoyuxuan/p/11889009.html