zoukankan      html  css  js  c++  java
  • (25)keepalived的安装与配置

    1.高可靠概念

    HA(High Available), 高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

    2.高可靠软件keepalived

    keepalive是一款可以实现高可靠的软件,通常部署在2台服务器上,分为一主一备。Keepalived可以对本机上的进程进行检测,一旦Master检测出某个进程出现问题,将自己切换成Backup状态,然后通知另外一个节点切换成Master状态。

    3.keepalived安装

    下载keepalived官网:http://keepalived.org

    keepalived解压到/usr/local/src目录下

    tar -zxvf  keepalived-1.2.19.tar.gz -C /usr/local/src

    进入到/usr/local/src/keepalived-1.2.19目录

    cd /usr/local/src/keepalived-1.2.19

    开始configure

    ./configure --prefix=/usr/local/keepalived

    #编译并安装

    make && make install

    4.将keepalived添加到系统服务(可以用service命令来启动)中

    拷贝执行文件

    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

    init.d文件拷贝到etc,加入开机启动项

    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

    将keepalived文件拷贝到etc

    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    创建keepalived文件夹

    mkdir -p /etc/keepalived

    keepalived配置文件拷贝到etc

    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

    添加可执行权限

    chmod +x /etc/init.d/keepalived

    ##以上所有命令一次性执行:

    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    mkdir -p /etc/keepalived

    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

    chmod +x /etc/init.d/keepalived

    chkconfig --add keepalived

    chkconfig keepalived on

    添加keepalived到开机自动启动

    chkconfig --add keepalived

    chkconfig keepalived on

    5.配置keepalived虚拟IP

    修改配置文件: /etc/keepalived/keepalived.conf

    #MASTER节点

    global_defs {

    }

    vrrp_instance VI_1 {

        state MASTER   #指定A节点为主节点 备用节点上设置为BACKUP即可

        interface eth0    #绑定虚拟IP的网络接口

        virtual_router_id 51   #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP

        priority 100   #主节点的优先级(1-254之间),备用节点必须比主节点优先级低

        advert_int 1  #组播信息发送间隔(进行心跳检测的间隔),两个节点设置必须一样

        authentication {    #设置验证信息,两个节点必须一致

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {    #指定虚拟IP(用户可见的ip地址), 两个节点设置必须一样

            192.168.33.60/24    #如果两个nginxip分别是192.168.33.61,,...62,则此处的虚拟ip跟它俩同一个网段即可

        }

    }

    #BACKUP节点

    global_defs {

    }

    vrrp_instance VI_1 {

        state BACKUP  # 备用节点

        interface eth0

        virtual_router_id 51

        priority 99

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {

            192.168.33.60/24

        }

    }

    #分别启动两台机器上的keepalived

    service keepalived start

    测试:

    杀掉master上的keepalived进程,你会发现,在slave机器上的eth0网卡多了一个ip地址

    查看ip地址的命令:  ip addr 

    6.配置keepalived对管理的nginx进行心跳检测

    原理:

    Keepalived并不跟nginx耦合,它俩完全不是一家人

    但是keepalived提供一个机制:让用户自定义一个shell脚本去检测用户自己的程序,返回状态给keepalived就可以了

    #MASTER节点

    global_defs {

    }

    vrrp_script chk_health {

        script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"  # 自定义脚本内容 返回1表示nginx挂了,返回0表示没挂

        interval 1    #每隔1秒执行上述的脚本,去检查用户的程序ngnix

        weight -2    # 如果本机器的nginx挂了,就降低自己的权重2

    }

    vrrp_instance VI_1 {

        state MASTER

        interface eth0

        virtual_router_id 1

        priority 100

        advert_int 2

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        track_script {

            chk_health  # 用户自定义的脚本名

        }

        virtual_ipaddress {

            10.0.0.10/24

        }

        notify_master "/usr/local/keepalived/sbin/notify.sh master"  # 当切换到master状态时,要执行的脚本

        notify_backup "/usr/local/keepalived/sbin/notify.sh backup"  # 当切换到backup状态时,要执行的脚本

        notify_fault "/usr/local/keepalived/sbin/notify.sh fault"  # 当出现异常时,要执行的脚本

    }

    #添加切换通知脚本

    vi /usr/local/keepalived/sbin/notify.sh

    #!/bin/bash

    case "$1" in

        master)

            /usr/local/nginx/sbin/nginx

            exit 0

        ;;

    backup)

            /usr/local/nginx/sbin/nginx -s stop

            /usr/local/nginx/sbin/nginx

            exit 0

        ;;

        fault)

            /usr/local/nginx/sbin/nginx -s stop

            exit 0

        ;;

        *)

            echo 'Usage: notify.sh {master|backup|fault}'

            exit 1

        ;;

    esac

    #添加执行权限

    chmod +x /usr/local/keepalived/sbin/notify.sh

    global_defs {

    }

    vrrp_script chk_health {

        script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"

        interval 1

        weight -2

    }

    vrrp_instance VI_1 {

        state BACKUP

        interface eth0

        virtual_router_id 1

        priority 99

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        track_script {

            chk_health

        }

        virtual_ipaddress {

            10.0.0.10/24

        }

        notify_master "/usr/local/keepalived/sbin/notify.sh master"

        notify_backup "/usr/local/keepalived/sbin/notify.sh backup"

        notify_fault "/usr/local/keepalived/sbin/notify.sh fault"

    }

    #在第二台机器上添加notify.sh脚本

    #分别在两台机器上启动keepalived

    service keepalived start

  • 相关阅读:
    如何解决selenium打开chrome提示chromedriver.exe已停止工作
    移动端弱网测试 fiddle
    android 真机设备识别不出adb interface
    网络基础知识
    《Mongo权威指南》学习手记
    MongoDB数据库备份
    windows下安装mongoDB(zip版)
    ubuntu apt
    docker 免sudo设置(仅3个命令)
    ubuntu18.04双卡机安装ubidia驱动遇到的坑
  • 原文地址:https://www.cnblogs.com/paradis/p/11366666.html
Copyright © 2011-2022 走看看