1.下载:
    wget  http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

2.解压安装:
    yum install ipvsadm
    tar -zxvf keepalived-1.2.15.tar.gz
    cd keepalived-1.2.15
    ./configure --prefix=/usr/local/keepalived-1.2.15  --disable-fwmark --sysconfdir=/etc
    make && make install
    cd /usr/local;
    ln -s keepalived-1.2.15 keepalived
3.配置keepalive:
    cp /usr/local/keepalived/sbin/keepalived /sbin/
    echo 'export PATH=/usr/local/keepalived/sbin:$PATH;' >/etc/profile.d/keepalived.sh
    具体keepalived配置文件如下:
    -----------------------------------------
        ! Configuration File for keepalived
        
        global_defs {
            lvs_id LVS_redis
        notification_email {
            acassen@firewall.loc
            failover@firewall.loc
            sysadmin@firewall.loc
        }
        notification_email_from Alexandre.Cassen@firewall.loc
        smtp_server 192.168.200.1
        smtp_connect_timeout 30
        router_id LVS_DEVEL
        }
        vrrp_script chk_redis {
            script "/etc/keepalived/scripts/redis_check.sh"
            weight -20
            interval 2
        }
        vrrp_instance VI_1 {
            state backup
            interface eth0
            virtual_router_id 51
            #设置原主机恢复正常时,服务不漂移;
            nopreempt
            priority 100
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
        track_script {
            chk_redis
        }
            virtual_ipaddress {
                192.168.16.77/24 dev eth0  label eth0:1
            }
        notify_master "/etc/keepalived/scripts/redis_script.sh master"
         notify_backup "/etc/keepalived/scripts/redis_script.sh backup"
        notify_fault "/etc/keepalived/scripts/redis_script.sh fault"
        }
    ----------------------------------------
    SLAVER上与MASTER上大致相同,改下这两个就可以了 state BACKUP
    priority 80
4.keepalive自定义监控功能说明:
    notify_master  keepalived切换到master时执行的脚本   
    notify_backup  keepalived切换到backup时执行的脚本  
    notify_fault   keepalived出现故障时执行的脚本
    vrrp_script代码块是用来定义监控脚本,脚本执行时间间隔以及脚本的执行结果导致优先级变更幅度的。    
    vrrp_script chk_redis {
        script "/etc/keepalived/scripts/redis_check.sh"  #指定执行脚本的路径
        interval 1                                       #指定脚本的执行时间间隔
        weight 10                                        #脚本结果导致的优先级变更:10表示优先级+10;-10则表示优先级-10
    }
    #定义好vrrp_script代码块之后,就可以在instance中使用了    
    track_script {
        chk_redis
    }
    注意:VRRP脚本(vrrp_script)和VRRP实例(vrrp_instance)属于同一个级别
5.建立相关脚本:
    redis服务状态检测脚本redis_check.sh
    #!/bin/bash
    #auth desheng

export REDIS_CLI="/usr/local/bin/redis-cli"
    export REDIS_SER="/usr/local/bin/redis-server"
    export LOGFILE="/var/log/keepalived-redis-state.log"
    export MASTER_HOST="192.168.16.131"
    export MASTER_PORT="6379"
    export ETH_FLAG='eth0:3'

REDIS_ROLE=`$REDIS_CLI  info|grep role|sed 's/\r//g'`;
    REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
    VIP_CNT=`ifconfig |grep ${ETH_FLAG}|wc -l`;

PRINT_LOG() {
        LAST_MSG=`tail -1 $LOGFILE|awk -F']' '{print $2}'`;
        if [ "${LAST_MSG}" != $1 ] ;then
            echo "`date '+%F %T'`[check]$1" >>$LOGFILE;
        fi;    
    }

if [ "$REDIS_STATUS" == "PONG" ] ;then
        PRINT_LOG "sucess...$REDIS_STATUS";
        if [ "$VIP_CNT"  -eq 0  -a  "${REDIS_ROLE}" != "role:slave" ] ;then
            $REDIS_CLI SLAVEOF $MASTER_HOST $MASTER_PORT;
            echo "`date '+%F %T'`[check]Starting Slaveof $MASTER_HOST $MASTER_PORT...">>$LOGFILE;
        fi;        
        exit 0;
    elif [ "$REDIS_STATUS" != "PONG" -a ${VIP_CNT} -eq 1 ] ;then
        sleep 1;
        REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
        if [ "$REDIS_STATUS" == "PONG" ] ;then
            PRINT_LOG "sucess...$REDIS_STATUS";
            exit 0;
        else
            PRINT_LOG "faild...$REDIS_STATUS";
            ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
            exit 1;
        fi;
    elif [ "$REDIS_STATUS" != "PONG" -a ${VIP_CNT} -eq 0 ] ;then
        sleep 1;
        REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
        if [ "$REDIS_STATUS" == "PONG" ] ;then
            PRINT_LOG "sucess...$REDIS_STATUS";
            exit 0;
        elif [ "$REDIS_STATUS" == "LOADING Redis is loading the dataset in memory" ] ;then
            while [ "$REDIS_STATUS" == "LOADING Redis is loading the dataset in memory" ] ;do
                sleep 2;
                REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
            done;
            REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
            
            if [ "$REDIS_STATUS" == "PONG" ] ;then
                PRINT_LOG "sucess...$REDIS_STATUS";
                exit 0;
            else
                PRINT_LOG "faild...$REDIS_STATUS";
                ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
                $REDIS_SER  /etc/redis/6379.conf
                exit 1;
            fi;
        else
            PRINT_LOG "faild...$REDIS_STATUS";
            ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
            $REDIS_SER  /etc/redis/6379.conf
            exit 1;
        fi;
    fi;
    redis服务状态处理脚本redis_script.sh
    #!/bin/bash
    #auth desheng

export REDIS_CLI="/usr/local/bin/redis-cli"
    export REDIS_SER="/usr/local/bin/redis-server"
    export LOGFILE="/var/log/keepalived-redis-state.log"
    export MASTER_HOST="192.168.16.131"
    export MASTER_PORT="6379"

check_redis(){
        REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
        if [ "$REDIS_STATUS" != "PONG" ] ;then
            sleep 1;
            REDIS_STATUS=`$REDIS_CLI  PING 2>&1`;
            if [ "$REDIS_STATUS" != "PONG" ] ;then
                ps aux|grep redis-server|grep -v grep|awk '{print "kill -9 " $2}'| sh
                $REDIS_SER  /etc/redis/6379.conf
                echo "`date '+%F %T'`[$1]restart redis...">>$LOGFILE;
            fi;
        elif [ "$REDIS_STATUS" == "PONG" ] ;then
            echo "`date '+%F %T'`[$1]redis is running...">>$LOGFILE;
        fi;
    }

echo "[$1]...">>$LOGFILE;
    case $1 in
        master)
            check_redis master;
            $REDIS_CLI SLAVEOF NO ONE >> $LOGFILE 2>&1;
            echo "`date '+%F %T'`[master]Slaveof no one...">>$LOGFILE;
            ;;
        backup)
            check_redis backup;
            REDIS_ROLE="role:slave";
            REDIS_MASTER_HOST="master_host:$MASTER_HOST";
            NOW_REDIS_ROLE=`${REDIS_CLI} info|grep role|sed 's/\\r//g'`;
            NOW_REDIS_MASTER=`${REDIS_CLI} info|grep master_host|sed 's/\\r//g'`;
            
            if [ "$REDIS_ROLE" == "$NOW_REDIS_ROLE"  -a "$REDIS_MASTER_HOST" == "$NOW_REDIS_MASTER" ] ;then
                echo "`date '+%F %T'`[backup]Slaveof $MASTER_HOST $MASTER_PORT...">>$LOGFILE;
            else
                $REDIS_CLI SLAVEOF $MASTER_HOST $MASTER_PORT >> $LOGFILE  2>&1;
                echo "`date '+%F %T'`[backup]Starting Slaveof $MASTER_HOST $MASTER_PORT...">>$LOGFILE;
                echo "`date '+%F %T'`[backup]Redis status is `$REDIS_CLI info|grep role`" >> $LOGFILE;
            fi;
            ;;
        fault)
            check_redis fault;
            ;;
        *)
            echo "####error">>$LOGFILE;
            ;;
    esac
6.验证测试:
    service keepalived start
    ifconfig
    pkill -9 redis-server
    ifconfig

转载于:https://blog.51cto.com/webseven/1649879

keepalived+redis的高可用部署步骤相关推荐

  1. Redis M/S + Keepalived 主从备份高可用

    目录 文章目录 目录 高可用 Redis 的高可用 Redis 主从复制配置 Redis 主从切换(手动方式) SLAVEOF 指令 Redis M/S + Keepalived 故障的 3 种情况 ...

  2. 基于keepalived对redis做高可用配置---转载

    关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785 功能 ip地址 安装软件 主redis 1 ...

  3. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  4. Redis Cluster高可用(HA)集群环境搭建详细步骤

    1.为什么要有集群 由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster) 2.Redis集群架构说明 架 ...

  5. Redis Sentinel安装与部署,实现redis的高可用

    Redis Sentinel安装与部署,实现redis的高可用 原文:Redis Sentinel安装与部署,实现redis的高可用 前言 对于生产环境,高可用是避免不了要面对的问题,无论什么环境.服 ...

  6. Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群

    Redis 集群搭建(三):Docker 部署 Redis + Sentinel 高可用集群 前言 建议 官方译文 什么是 Sentinel? Sentinel 优点 Redis 配置文件 maste ...

  7. 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...

  8. saltstack实现haproxy+keepalived负载均衡+高可用(二)

    一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!!    特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...

  9. Pod在多可用区worker节点上的高可用部署

    一.      需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布 ...

  10. Redis|Sentinel 高可用架构

    一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...

最新文章

  1. (各种均衡算法在MIMO中的应用对比试验)最小均方误差(MMSE)原理推导以及在MIMO系统中对性能的改善。
  2. 巧用二进制,让性能提升100倍,让存储空间减少100倍
  3. python使用fpdf创建pdf文件包含:页眉、页脚并嵌入logo图片、设置使用中文字体
  4. .net开发框架比较
  5. python下载安装教程mac-mac上如何安装python3
  6. echarts 图表配置tooltip 的formatter
  7. ui设计颜色的使用_UI设计中颜色使用的10条原则
  8. 程序员管理思维修炼,只需要反复阅读本篇
  9. SDK中利用COM打印helloworld时报错DONE pin is not high on target FPGA的一种可能的解决办法
  10. 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系
  11. win7 共享计算机 网络密码怎么设置,win7局域网共享设置密码 win7局域网如何设置密码【详细步骤】...
  12. 【技能】前端技能列表
  13. 基于Scrapy的交互式漫画爬虫
  14. 瑞萨78K0单片的调试与使用(Minicube2)
  15. poi读取excel表
  16. 学习笔记 计算机组成原理_名词解释
  17. vu3响应式原理 代码分析
  18. 该内存不能为written或read的解决方案
  19. ubuntu1604安装sougou输入法
  20. 逼死程序员的翟欣欣方首度发声了,居然这样说,你信不?

热门文章

  1. facade(外观)模式
  2. 【Window】使用技巧
  3. Confluence 6 数据库表-杂项(Miscellaneous)
  4. 20155204《网络对抗》Exp 6 信息搜集与漏洞扫描
  5. Linux下的帮助命令
  6. CSS3知识点总结---transitionend
  7. lua定义一个简单的类
  8. mysql Packet for query is too large (1185 1024)异常
  9. WAMP(Windows+Apache+Mysql+PHP)环境搭建
  10. Effective C++(6) 如何拒绝编译器的自动生成函数