redis-sentinel (哨兵)

  • 什么是redis-sentinel?

    • 当用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的监控目标会随之调换
  1. 环境准备

    #三个redis数据库实例 配置好一主多从
    #6379.conf
    port 6379
    daemonize yes
    logfile "6379.log"
    dbfilename "dump-6379.rdb"
    dir "/var/redis/data/"
    
    #6380.conf 
    port 6380
    daemonize yes
    logfile "6380.log"
    dbfilename "dump-6380.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379
    
    #6381.conf 
    port 6381
    daemonize yes
    logfile "6381.log"
    dbfilename "dump-6381.rdb"
    dir "/var/redis/data/"
    slaveof 127.0.0.1 6379
    
  2. 查看主从关系是否正确

    redis-server 6379.conf
    redis-server 6380.conf
    redis-server 6381.conf   #开启三个redis库 之后可以直接通过端口调用
    
    redis-cli -p 6379 info replication 
    redis-cli -p 6380 info replication  
    redis-cli -p 6381 info replication  
    
  3. 配置哨兵进程,同样是三个,配置除了监听端口 没有别的不同,另外需要注意:哨兵第一次启动后,会修改配置文件,如果错了,得删除配置文件,重新写

    #sentinel-26379.conf  
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"
    
    // 当前Sentinel节点监控 192.168.182.130:6379 这个主节点
    // 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    // s21ms是主节点的别名
    sentinel monitor s21ms  127.0.0.1 6379 2
    
    //每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
    sentinel down-after-milliseconds s21ms  20000
    
    //当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
    sentinel parallel-syncs s21ms 1
    
    //故障转移超时时间为180000毫秒
    sentinel failover-timeout mymaster 180000
    //后台运行
    daemonize yes 
    
  4. 启动哨兵

    redis-sentinel sentinel-26379.conf
    redis-sentinel sentinel-26380.conf
    redis-sentinel sentinel-26381.conf
    
  5. 验证哨兵是否正常

    redis-cli -p 26379 info sentinel
    master0:name=s21ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
    
  6. 干掉主库 检测哨兵的是否正常可以切换状态

    kill -9 12749
    ps -ef|grep redis
    redis-cli -p 6380 info replication
    redis-cli -p 6381 info replication
    redis-cli -p 6380 info replication
    redis-cli -p 6381 info replication
    
原文地址:https://www.cnblogs.com/kevin6/p/11799521.html