redis-sentinel 主从复制高可用
Redis-Sentinel是redis官方推荐的高可用性解决方案,
当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能。
而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,
自动发现master宕机,进行自动切换slave > master。
sentinel主要功能如下:
不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
主从复制架构
redis sentinel 架构
简单举例:::
redis的哨兵,自动的主从故障切换
配置步骤
1.环境准备,准备3个redis数据库实例,分别是 6379 6380 6381
redis-6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/var/redis/data/6379"
redis-6380.conf
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data/6380"
slaveof 127.0.0.1 6379
redis-6381.conf
port 6381
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data/6381"
slaveof 127.0.0.1 6379
2.分别启动三个redis数据库实例
1106 redis-server redis-6379.conf
1107 redis-server redis-6380.conf
1108 redis-server redis-6381.conf
3.准备三个redis-sentinel哨兵的配置文件
redis-sentinel-26379.conf
port 26379
dir /var/redis/data/26379
logfile "26379.log"
// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor s20master 127.0.0.1 6379 2
//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds s20master 30000
//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs s20master 1
//故障转移超时时间为180000毫秒
sentinel failover-timeout s20master 180000
//让哨兵在后台运行
daemonize yes
#如下26380和26381的配置文件,仅仅是端口的不同,可以快速生成
redis-sentinel-26380.conf
redis-sentinel-26381.conf
#生成命令如下
1119 sed "s/26379/26380/g" redis-26379.conf > redis-26380.conf
1121 sed "s/26379/26381/g" redis-26379.conf > redis-26381.conf
4.分别运行三个哨兵进程
(保证sentinel的配置正确,否则,你在启动报错后,配置文件的内容发发生变化,这是个坑!!!!)
#创建哨兵的数据文件夹
1126 mkdir -p /var/redis/data/26380
1127 mkdir -p /var/redis/data/26379
1128 mkdir -p /var/redis/data/26381
#分别启动三个哨兵
1134 redis-sentinel redis-26379.conf
1137 redis-sentinel redis-26380.conf
1138 redis-sentinel redis-26381.conf
5.检查redis的哨兵状态
redis-cli -p 26379 info sentinel
#查看到如下参数,哨兵就正确了
master0:name=s20master,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
6.杀死主库,检查主从状态,是否会切换