• 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
  • 相关阅读:
    以正确的方式开源 Python 项目
    如果你喜欢Python 那么你不得不知的几个开源项目
    如何自学 Python(干货合集)
    不老的新丁 Python何以让人着迷
    流行的Python项目汇总
    AccountManager使用教程
    设计模式大全
    ubuntu12.04安装深度音乐播放器和深度影音
    完毕port(CompletionPort)具体解释
    关于jdbc注冊驱动的那点事
  • 原文地址:https://www.cnblogs.com/ywrj/p/9523258.html
Copyright © 2020-2023  润新知