第七章、sentinel实现主从架构高可用(哨兵模式)
sentinel特点:
用于管理多个redis服务实现HA;
监控多个redis服务节点
自动故障转移
启用sentinel:
redis-sentinel可以理解为运行有着特殊代码的redis,redis自身也可以运行为sentinel,sentinel也依赖配置文件,用于保存sentinel不断收集的状态信息
两种启动方法:
redis-sentinel /path/to/file.conf redis-server /path/to/file.conf --sentinel
运行sentinel的步骤:
(1) 服务器自身初始化(运行redis-server中专用于sentinel功能的代码);
(2) 初始化sentinel状态,根据给定的配置文件,初始化监控的master服务器列表;
(3) 创建连向master的连接;
专用配置文件详解
文件位置:/etc/redis-sentinel.conf
(1) # sentinel monitor <master-name> <ip> <redis-port> <quorum>
//此项可以出现多次,可以监控多组redis主从架构,此项用于监控主节点
<master-name> 自定义的主节点名称,
<ip> 主节点的IP地址,
<redis-port>主节点的端口号,
<quorum>主节点对应的quorum法定数量,用于定义sentinel的数量,是一个大于值尽量使用奇数,如果sentinel有3个,则指定为2即可,如果有4个,不能够指定为2,避免导致集群分裂,
注意,<master-name>为集群名称,可以自定义,如果同时监控有多组redis集群时,<master-name>不能同样
(2) sentinel down-after-milliseconds <master-name> <milliseconds> //sentinel连接其他节点超时时间,单位为毫秒(默认为30秒)
(3) sentinel parallel-syncs <master-name> <numslaves> //提升主服务器时,允许多少个从服务向新的主服务器发起同步请求
(4) sentinel failover-timeout <master-name> <milliseconds> //故障转移超时时间,在指定时间没能完成则判定为失败,单位为毫秒(默认为180秒)
单机多实例设置:
环境规划
sentinel部署至少要 2台以上的Redis节点,最好使用 1 主2 从三个节点的模式。
节点 服务器IP 配置文件 监听端口
cluster-master-1 192.168.3.71 /etc/redis/redis.conf 6379
cluster-slave-1 192.168.3.71 /etc/redis/redis.conf 6380
cluster-slave-2 192.168.3.71 /etc/redis/redis.conf 6381
cluster-sentinel 192.168.3.71 /etc/redis/sentinel.conf 26379
创建工作目录
mkdir -pv /redis/{6380,6381}
设置主从配置
复制多个Redis配置文件,修改为从配置注意修改这几项:
port 6380 #端口更改 #257行左右 后台运行 daemonize yes #290行左右 设置进程ID和日志位置,根据你启用的节点监听端口来命名保持一致 pidfile /var/run/redis_6380.pid logfile /var/log/redis/redis_6380.log #455行左右 修改工作目录,根据你启用的节点监听端口来命名保持一致 dir /redis/6380 # 477行 replicaof <masterip> <masterport> replicaof 192.168.3.71 6379 # masterauth <master-password> masterauth longtao #如果设置了这个需要在主master设置这个认证密码:requirepass longtao replica-read-only yes
启动多个实例:
redis-server redis6379.conf redis-server redis6380.conf redis-server redis6381.conf
修改sentinel配置:
#修改bind bind 127.0.0.1 192.168.3.71 daemonize yes # sentinel monitor <master-name> <master-port> 监控名称和监控节点数量 sentinel monitor mymaster 192.168.3.71 6379 1 # sentinel auth-pass <master-name> <password> 认证密码 sentinel auth-pass mymaster longtao
启用sentinel
redis-sentinel /etc/redis/sentinel.conf
运行测试:
[root@CentOS7 ~]# redis-cli -h 192.168.3.72 -p 26379
info查看命令:
192.168.3.72:26379> info
关注最后一行服务状态:
master0:name=mymaster,status=ok,address=192.168.3.72:6379,slaves=2,sentinels=1
哨兵查看主节点命令:
192.168.3.72:26379> SENTINEL masters
哨兵查看从节点命令:
192.168.3.72:26379> SENTINEL slaves mymaster
切换主节点测试
关停主节点实例6379
会自动切换,结果如下:(需要等待1到5分钟)
192.168.3.72:26379> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=odown,address=192.168.3.72:6379,slaves=2,sentinels=1
#等待1到5分钟后
192.168.3.72:26379> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=1 192.168.3.72:26379>
注意:故障节点恢复后,节点不会在自动切换回来,默认保持之前状态。