zoukankan      html  css  js  c++  java
  • redis-Sentinel持续高可用

    自动故障转移机制

    • redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务。所以,还得想办法,当主redis挂了,让从redis升级成为主redis。
    • 这就需要自动故障转移,redis sentinel带有这个功能,当一个主redis不能提供服务时,redis sentinel可以将一个从redis升级为主redis,并对其他从redis进行配置,让他们使用新的主redis进行复制备份。
    • Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换。它的主要功能有以下几点
    • 实时地监控redis是否按照预期良好地运行;
    • 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
    • 能够进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其他的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。

    sentinel 互相监控架构                        redis一主两从架构  

    redis的主从复制部署

    这里使用三台服务器,每台服务器上开启一个redis-server和redis-sentinel服务,redis-server端口为8000,redis-sentinel的端口为7000,修改默认端口是安全的第一步。

    redis-server 说明 redis-sentinel
    192.168.50.168: 8000 redis-master 192.168.50.168:7000
    192.168.50.166: 8000 redis-slave1 192.168.50.166:7000
    192.168.50.169 :8000 redis-slave2 192.168.50.168:7000

    redis.conf配置文件修改

    #redis-master 配置文件:
    port 8000            #设置端口号 daemonize yes         #是否后台运行 bind 0.0.0.0          #允许访问IP pidfile /var/run/redis-8000.pid    #PID文件存放位置 logfile /var/log/redis/redis-8000.log    #log日志存放位置
    #redis-slave 配置文件:
    port 8000
    daemonize yes
    bind 0.0.0.0
    pidfile /var/run/redis-8000.pid
    logfile /var/log/redis/redis-8000.log
    slaveof 192.168.200.132 8000       #比redis主多这行 指定主masterIP及端口
    masterauth 123456        #验证master端的redis密码

    启动三台redis

    redis-server /usr/local/redis/conf/redis.conf

    redis的高可用部署(redis-sentinel)

    修改sentinel.conf配置文件  三个服务端配置文件一样,启服务后每个配置文件都有变动,会生成唯一的内容

    vim /usr/local/redis/conf/sentinel.conf
    21   port 7000      #sentinel端口              
    69   sentinel monitor master7000 192.168.50.168 8000 2
    98   sentinel down-after-milliseconds master7000 5000
    106 sentinel parallel-syncs master7000 1
    131 sentinel failover-timeout master7000 15000

    配置文件说明

      • sentinel monitor master8000 192.168.200.132 8000 2 
        • master8000:监控的主节点名字(随便写)
        • 192.168.200.132 8000 :主节点的IP和端口
        • 2:一共有两台Sentinel发现有问题就会发生故障转移
      • sentinel down-after-milliseconds master8000 5000(5秒) 
        • 当master8000节点宕机后多久进行检查
      • sentinel parallel-syncs master8000 1 
        • 设定sentinel并发还是串行,1代表每次只能复制一个,可以减轻master压力
      • sentinel failover-timeout master8000 15000(15秒) 
        • 表示故障转移的超时时间

    启动redis-sentinel

    #三台都启动
    redis-sentinel /usr/local/redis/conf/sentinel.conf &
    #启动以后,查看sentinel信息
    redis-cli -p 7000 info sentinel                #sentinel的端口号启动
    # Sentinel 
    sentinel_masters:1                #1个master
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=master7000,status=ok,address=192.168.50.168:8000,slaves=2,sentinels=3             
    #master ip 端口 2个slaves   3个sentinel

    redis-sentinel的VIP漂移

    我们可以使用redis sentinel的一个参数client-reconfig-script,这个参数配置执行脚本,sentinel在做failover的时候会执行这个脚本,并且传递6个参数<master-name>,<role>,<state>,<from-ip>,<from-port>,<to-ip>,<to-port>,其中`<to-ip>是新主redis的IP地址,可以在这个脚本里做VIP漂移操作.

    #在sentinel.conf里增加一句话
    [root@localhost ~]# sed -n '170,175p' /usr/local/redis/conf/sentinel.conf
    # CLIENTS RECONFIGURATION SCRIPT
    #
    # sentinel client-reconfig-script <master-name> <script-path>
    sentinel client-reconfig-script master7000 /usr/local/redis/notify_master6800.sh
    #指定漂移脚本的位置
    # When the master changed because of a failover a script can be called
    in #写一个漂移脚本 vim /usr/local/redis/notify_master6800.sh #!/bin/bash MASTER_IP=$6       #第六个参数就是sentinel传入进行来的新master的IP LOCAL_IP="192.168.50.168"        #本地IP VIP="192.168.50.244"      `    #VIP NETMASK="24"               #子网掩码 INTERFACE="eth0"             #网卡名 if [[ "${MASTER_IP}" == "${LOCAL_IP}" ]];then /usr/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE} /usr/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE} exit 0 else /usr/sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE} exit 0 fi exit 1
    #给脚本加x权限
    chmod +x /usr/local/redis/notify_master6800.sh 
    #重新启动所有的redis-sentinel进程
    pkill redis-sentinel
    redis-sentinel /usr/local/redis/conf/sentinel.conf
    #第一次时手动给master添加VIP
    ip addr add 192.168.50.244/24 dev eth0
    #让ip地址即刻生效
    arping -q -c 3 -A 192.168.50.244 -I eth0
  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/ywrj/p/9523258.html
Copyright © 2011-2022 走看看