zoukankan      html  css  js  c++  java
  • Redis Sentinel 哨兵模式

    Redis Sentinel 哨兵模式

    Sentinel 介绍

    Redis的主从模式下,主节点一旦发生故障不能提供服务,需要人工干预,将从节点晋升为主节点, 同时还需要修改客户端配置。对于很多应用场景这种方式无法接受。 Sentinel(哨兵)架构解决了 redis主从人工干预的问题。 Redis Sentinel 是 redis的高可用实现方案,实际生产环境中,对提高整个系统可用性非常有帮助的。

    哨兵的主要功能

    Redis Sentinel 是一个分布式系统, Redis Sentinel 为 Redis提供高可用性。可以在没有人为干预的 情况下阻止某种类型的故障。
 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance)该系统执行以下三个任务:

    1.监控(Monitoring):

    Sentinel 会不断地定期检查你的主服务器和从服务器是否运作正常。

    2.提醒(Notification):**

    当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

    3.自动故障迁移(Automatic failover):

    当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从

    服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失

    效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器

    哨兵操作

    目录规划

    角色 IP 端口
    Master 10.0.0.51 6379
    Sentinel-01 26379
    Master 10.0.0.52 6379
    Sentinel-01 26379
    Master 10.0.0.52 6379
    Sentinel-01 26379

    安装部署3个单节点

    !!!!注意!!!!

    三个节点修改为自己的IP地址

    #创建哨兵实例目录
    mkdir -p /data/redis_cluster/redis_6379
    mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs}
    
    cd /data/soft/
    wget http://download.redis.io/releases/redis-3.2.9.tar.gz
    tar zxf redis-3.2.9.tar.gz -C /opt/redis_cluster/
    ln -s /opt/redis_cluster/redis-3.2.9/ /opt/redis_cluster/redis
    
    cd /opt/redis_cluster/redis
    make && make install
    
    #进目录下编辑哨兵配置文件
    cd /opt/redis_cluster/redis_6379/conf/
    cat >redis_6379.conf <<EOF
    daemonize yes
    bind 10.0.0.5x
    port 6379
    pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
    logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
    databases 16
    dbfilename redis_6379.rdb
    dir /data/redis_cluster/redis_6379
    EOF 
    

    2.安装部署3个哨兵节点

    !!!!注意!!!!

    三个节点的bind IP修改为自己的IP地址

    db01

    mkdir -p /data/redis_cluster/redis_26379
    mkdir -p /opt/redis_cluster/redis_26379/{conf,pid,logs}
    
    3.配置哨兵的配置文件
    cat >/opt/redis_cluster/redis_26379/conf/redis_26379.conf << EOF
    bind 10.0.0.53
    port 26379
    daemonize yes
    logfile /opt/redis_cluster/redis_26379/logs/redis_26379.log
    dir /data/redis_cluster/redis_26379
    
    #mymaster 主节点别名 主节点 ip 和端口,判断主节点失败,两个 sentinel 节点同意 
    sentinel monitor mymaster 10.0.0.51 6379 2 
    
    #选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
    sentinel down-after-milliseconds mymaster 3000
    
    #向新的主节点发起复制操作的从节点个数,1 轮询发起复制 
    sentinel parallel-syncs mymaster 1
    
    #故障转移超时时间 
    sentinel failover-timeout mymaster 18000
    EOF
    

    db01

    rsync -avz /opt/* db02:/opt/ 
    rsync -avz /opt/* db03:/opt/
    

    db02

    mkdir -p /data/redis_cluster/redis_26379 
    cd /opt/redis_cluster/redis 
    make install 
    sed -i 's#bind 10.0.0.51#bind 10.0.0.52#g' /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    sed -i 's#bind 10.0.0.51#bind 10.0.0.52#g' /opt/redis_cluster/redis_26379/conf/redis_26379.conf
    

    db03

    mkdir -p /data/redis_cluster/redis_26379 
    cd /opt/redis_cluster/redis 
    make install 
    sed -i 's#bind 10.0.0.51#bind 10.0.0.53#g' /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    sed -i 's#bind 10.0.0.51#bind 10.0.0.53#g' /opt/redis_cluster/redis_26379/conf/redis_26379.conf
    

    4.启动所有的单节点

    redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
    

    5.配置主从复制

    redis-cli -h db02 slaveof 10.0.0.51 6379
    redis-cli -h db03 slaveof 10.0.0.51 6379
    

    6.启动哨兵

    3台都操作 启动哨兵
    redis-sentinel /opt/redis_cluster/redis_26379/conf/redis_26379.conf
    

    7.验证主节点

    redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster
    redis-cli -h db02 -p 26379 Sentinel get-master-addr-by-name mymaster
    redis-cli -h db03 -p 26379 Sentinel get-master-addr-by-name mymaster
    

    配置文件的变化

    当所有节点启动后,配置文件的内容发生了变化,体现在三个方面:

    1、Sentinel 节点自动发现了从节点,其余 Sentinel 节点

    2、去掉了默认配置,例如 parallel-syncs failover-timeout 参数

    3、添加了配置纪元相关参数 查看配置文件命令

    [root@db01 ~]# tail -6 /opt/redis_cluster/redis_26379/conf/redis_26379.conf   
    # Generated by CONFIG REWRITE 
    sentinel known-slave mymaster 10.0.0.52 6379 
    sentinel known-slave mymaster 10.0.0.53 6379 
    sentinel known-sentinel mymaster 10.0.0.53 26379 7794fbbb9dfb62f4d2d7f06ddef06bacb62e4c97 
    sentinel known-sentinel mymaster 10.0.0.52 26379 17bfab23bc53a531571790b9b31558dddeaeca40 
    sentinel current-epoch 0
    

    哨兵常用操作 API

    [root@db01 ~]# redis-cli -h db01 -p 26379 Sentinel 节点是一个特殊的 Redis节点,他们有自己专属的 API 
    Info Sentinel 
    Sentinel masters 
    Sentinel master <master name> 
    Sentinel slaves <master name>  
    Sentinel sentinels <master name> 
    Sentinel get-master-addr-by-name <master name>    
    Sentinel failover <master name> 
    Sentinel flushconfig
    

    8.模拟故障转移

    • 关闭主节点服务上的所有redis进程
    • 观察其他2个节点会不会发生选举
    • 查看配置文件里会不会自动更新
    • 查看新的主节点能不能写入
    • 查看从节点能否正常同步

    9.模拟故障修复上线

    • 启动单节点
    • 启动哨兵

    10.模拟权重选举

    • 设置其他节点的权重为0
    • 手动发起重新选举
    • 观察所有节点消息是否同步
    • 观察切换结果是否符合预期
    命令解释:
    1.查询命令:CONFIG GET slave-priority
    2.设置命令:CONFIG SET slave-priority 0
    3.主动切换:sentinel failover mymaster
    
    操作命令:
    redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
    redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0
    redis-cli -h db01 -p 26379 sentinel failover mymaster
    
    验证选举结果:
    redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster
    
  • 相关阅读:
    Problem C: 类的初体验(V)
    接口与继承
    类和对象
    java函数方法
    数组
    string类的一些函数方法
    java语法基础
    大道至简——做个懒人
    java编程 求和
    编程的精义
  • 原文地址:https://www.cnblogs.com/longren/p/11888329.html
Copyright © 2011-2022 走看看