redis哨兵功能
redis-Sentinel(哨兵)
- 前言
- 当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户都没有实现主从切换的功能
- redis-sentinel是redis官方推荐的高可用性解决方案,
- 而redis-Sentinel就是一个独立运行的进程,用于监控多个master-slave集群,自动发现master宕机,进行自动切换slave>master
- 功能:
- 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
- 如果被标识的是主节点,Sentinel就会和其他的Sentinel节点'协商',如果其他节点也人为主节点不可达,就会选举一个Sentinel节点来完成自动故障转义
- 在master-slave(主-从)进行切换后,master_redis.conf,slave_redis.conf和Sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,Sentinel.conf的监控目标会随之调换
redis主从复制背景
-
redis主从复制可将主节点数据同步给从节点,从节点此时有俩个作用:
- 一旦主节点宕机,从节点作为主节点的备份可以随机顶上来.
- 扩展主节点的读能力,分担主节点读压力
-
存在问题:
- 一旦主节点宕机,从节点上位,那么需要人为修改所有应用方的主节点地址(改为新的master地址),还需要命令所有从节点复制新的主节点
所以要实现这些功能,redis-sen就可以解决
主从复制架构
- redis-Sentinel(哨兵功能):
- 哨兵进行检测,主从架构是否正常,如果主库挂掉,哨兵会自动修复redis.conf,进行添加/删除slaveof 指令
- 作用:只是监控redis
redis-Sentinel(哨兵)配置
- 这里是以三个redis为实例,一主俩从
-
准备三个redis实例,一主俩从
# 主配置 vim redis-6379.conf # 插入数据 port 6379 daemonize yes logfile "6379.log" dbfilename "dump-6379.rdb" dir "/var/redis/data/"
#从节点配置 vim redis-6380.conf #插入数据 port 6380 daemonize yes logfile "6380.log" dbfilename "dump-6380.rdb" dir "/var/redis/data/" slaveof 127.0.0.1 6379 // 从属主节点 # 从节点配置 vim redis-6381.conf #插入数据 port 6381 daemonize yes logfile "6380.log" dbfilename "dump-6380.rdb" dir "/var/redis/data/" slaveof 127.0.0.1 6379 // 从属主节点
-
启动主节点
redis-server redis-6379.conf #登录客户端 redis-cli -p 6380 # 检测是否通信 ping # 输出为pong则为正常
注意问题:这里如果启动客户端显示
Could not connect to Redis at 127.0.0.1:6379: Connection refused
解决方法:创建mkdir /var/redis/data/
-
启动俩个slave(从)节点
redis-server redis-6380.conf redis-server redis-6381.conf # 登录客服端验证 与上述主节点验证方法一样
-
检测主从的状态是否正常
redis-cli -p 6379 info replication # 输出内容如下为正常 # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
注意:
如果发现实验不成功,需删掉所有的配置文件,从新来过
准备三个哨兵,开始监控主从架构
-
准备三个配置文件,哨兵文件
vim redis-26379.conf # 名字随意起, #插入内容 port 26379 dir /var/redis/data/ logfile "26379.log" sentinel monitor qsmaster 127.0.0.1 6379 2 sentinel down-after-milliseconds qsmaster 30000 sentinel parallel-syncs qsmaster 1 sentinel failover-timeout qsmaster 180000 daemonize yes #第二个哨兵 vim redis-26380.conf port 26380 dir /var/redis/data/ logfile "26380.log" sentinel monitor qsmaster 127.0.0.1 6379 2 sentinel down-after-milliseconds qsmaster 30000 sentinel parallel-syncs qsmaster 1 sentinel failover-timeout qsmaster 180000 daemonize yes #第三哨兵 vim redis-26381.conf port 26381 dir /var/redis/data/ logfile "26381.log" sentinel monitor qsmaster 127.0.0.1 6379 2 sentinel down-after-milliseconds qsmaster 30000 sentinel parallel-syncs qsmaster 1 sentinel failover-timeout qsmaster 180000 daemonize yes
-
启动三个哨兵
redis-sentinel redis-26379.conf redis-sentinel redis-26380.conf redis-sentinel redis-26381.conf
注意!!如果发现实验不成功,需删掉所有的哨兵配置文件,从新来过
注意!!如果发现实验不成功,需删掉所有的哨兵配置文件,从新来过
-
检查哨兵状态
redis-cli -p 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=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
-
模拟哨兵自动进行主从切换
# 查看进程信息 ps -ef |grep redis # 杀死6379的进程 kill -9 6379的进程号 # 查看6380和6381的身份信息,看是否进行主从切换 redis-cli -p 6380 info replication redis-cli -p 6381 info replication # 手动启动6379挂掉的数据库,看是否会被哨兵,添加进信息主从集群 redis-server redis-6379.conf redis-cli -p 6379 info replication
-