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 哨兵集群-LMLPHP

redis 哨兵集群-LMLPHP

redis sentinel 架构

redis 哨兵集群-LMLPHP

redis 哨兵集群-LMLPHP

简单举例:::

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.杀死主库,检查主从状态,是否会切换
03-17 21:09