zoukankan      html  css  js  c++  java
  • Redis高可用配置(Keepalived)

    主:172.16.0.104

    备:172.16.0.105

    VIP:172.16.0.107

    客户端直接连VIP,当master 104的redis挂掉后,105作为master。当104重启后,104作为105的slave。当105又挂掉之后,104作为master......

    1、安装redis并配置主从同步

         安装过程省略

        1.1 配置104的redis实例:/etc/redis/redis.conf

        requirepass 123456 #生产环境千万不要配置这么简单的密码

        masterauth 123456 #备库密码,这里没有配置slaveof却配置masterauth是因为主备切换时需要用到密码

        1.2 配置105的redis实例

        requirepass 123456 #生产环境千万不要配置这么简单的密码

        masterauth 123456 #主库密码

        slaveof 172.16.0.104 6379

    2、安装keepalived

       安装过程省略

    3、配置keepalived

      Master(104)实例:

      keepalived.conf    

    global_defs {
       router_id test
    }
    vrrp_script chk_redis 
    { 
         script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456" 
         interval 2 
         timeout 2
         fall 3
    }
    vrrp_instance redis {
        state BACKUP # 主也配置为SLAVE
        interface eth0  
        virtual_router_id 51 
        priority  150       
        nopreempt # 不抢占,注意加上
        advert_int 1        
        authentication {   
            auth_type PASS   
            auth_pass 123456
        }
        virtual_ipaddress {  
        	172.16.0.107
        }
        track_script { 
             chk_redis 
        } 
        notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
        notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.105 6379"
        notify_fault /etc/keepalived/scripts/redis_fault.sh 
        notify_stop /etc/keepalived/scripts/redis_stop.sh  
    }

    redis_master.sh 

     #!/bin/bash
      REDISCLI="redis-cli -h $1 -p $2 -a $3"
      LOGFILE="/var/log/keepalived-redis-state.log"
      echo "[master]" >> $LOGFILE
      date >> $LOGFILE
      echo "Being master...." >> $LOGFILE 2>&1
      echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
      $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
    
    

    redis_backup.sh

     #!/bin/bash
      REDISCLI="redis-cli -h $1 -p $2 -a $3"
      LOGFILE="/var/log/keepalived-redis-state.log"
      echo "[backup]" >> $LOGFILE
      date >> $LOGFILE
      echo "Being slave...." >> $LOGFILE 2>&1
      echo "Run SLAVEOF cmd ..." >> $LOGFILE
      $REDISCLI SLAVEOF $4 $5 >> $LOGFILE  2>&1
    
    


    Slave(105)实例

    keepalived.conf
    global_defs {
        router_id redis
    }
    vrrp_script chk_redis {
        script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379 123456"   ###监控脚本
        interval 2                  ###监控时间
        timeout  2                                  ###超时时间
        fall     3                  ###重试次数
    }
    vrrp_instance redis {
      state BACKUP                  ###设置为MASTER
      interface eth0              ###监控网卡
      virtual_router_id 51
      priority 100              ###权重值
      nopreempt # 不抢占,注意加上
      advert_int 1
      authentication {
             auth_type PASS          ###加密
             auth_pass 123456        ###密码
      }
      track_script {
        chk_redis              ###执行上面定义的chk_redis
      }
      virtual_ipaddress {
           172.16.0.107            ###VIP
      }
       notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 6379 123456"
       notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 6379 123456 172.16.0.104 6379"
       notify_fault /etc/keepalived/scripts/redis_fault.sh
       notify_stop /etc/keepalived/scripts/redis_stop.sh
    }
    
    
    
     
    redis_master.sh
     #!/bin/bash
      REDISCLI="redis-cli -h $1 -p $2 -a $3"
      LOGFILE="/var/log/keepalived-redis-state.log"
      echo "[master]" >> $LOGFILE
      date >> $LOGFILE
      echo "Being master...." >> $LOGFILE 2>&1
      echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
      $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1 
    
    
    

    redis_backup.sh

       

     #!/bin/bash
      REDISCLI="redis-cli -h $1 -p $2 -a $3"
      LOGFILE="/var/log/keepalived-redis-state.log"
      echo "[backup]" >> $LOGFILE
      date >> $LOGFILE
      echo "Being slave...." >> $LOGFILE 2>&1
      echo "Run SLAVEOF cmd ..." >> $LOGFILE
      $REDISCLI SLAVEOF $4 $5 >> $LOGFILE  2>&1
    
    

    公共配置

    redis_check.sh

    #!/bin/bash 
    ALIVE=`redis-cli -h $1 -p $2 -a $3 PING` 
    LOGFILE="/var/log/keepalived-redis-check.log" 
    echo "[CHECK]" >> $LOGFILE
    date >> $LOGFILE
    if [ $ALIVE == "PONG" ]; then : 
       echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1
       exit 0 
    else 
       echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1
       exit 1 
    fi 
    
    
    

    redis_fault.sh

    #!/bin/bash 
    LOGFILE=/var/log/keepalived-redis-state.log 
    echo "[fault]" >> $LOGFILE
    date >> $LOGFILE 
    
    

    redis_stop.sh

    #!/bin/bash 
    LOGFILE=/var/log/keepalived-redis-state.log 
    echo "[stop]" >> $LOGFILE 
    date >> $LOGFILE 
    
    

    启动keepalived:keepalived -D

    查看ip漂移情况:ip a

    配置要点:

    双BACKUP + nopreempt,优先级大的先启动作为master,当master挂掉后,slave被选中成为新的master。

    参考文章:http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html

    欢迎转载,转载请务必注明出处
  • 相关阅读:
    课下作业--微软拼音输入法评价
    课堂练习--找水王
    第十四周总结
    第一阶段意见评论
    第十三周总结
    梦断代码阅读笔记03
    第十二周总结
    用户模板与用户场景
    2020年寒假假期总结0205
    2020年寒假假期总结0204
  • 原文地址:https://www.cnblogs.com/mzsg/p/5593784.html
Copyright © 2011-2022 走看看