美文网首页
Keepalived配置

Keepalived配置

作者: RocWay | 来源:发表于2017-11-06 20:14 被阅读0次

    1. 编译

    编译keepalived比较简单,只要到官网下载源码, configure/make/make install即可。
    有时候比较麻烦,比如会提示“Openssl is not properly installed”。这主要是缺少openssl-devel包。可以通过平台的软件管理程序安装即可。例如

    # centos
    yum install openssl-devel
    
    # suse
    zypper install openssl-devel
    
    # ubuntu
    apt-get install openssl-devel
    ``3
    如果无法安装,例如suse11,缺少这样的软件包,可以搜索下载libopenssl-devel。安装即可。
    
    

    wget http://www.convirture.com/repos/deps/SLES/11.x/x86_64/libopenssl-devel-0.9.8h-30.11.x86_64.rpm

    ## 2. 应用
    用flask开发一个简单的web应用, app.py。
    ``` python
    #!/usr/bin/python
    
    from flask import Flask
    app = Flask("webapp")
    @app.route('/')
    def hello_world():
          return 'Hello World'
    
    if __name__ == '__main__':
          app.run(host='0.0.0.0')
    

    3. 配置

    3.1 状态检测

    如果不指定vrrp_script,keepalived只检测:

    • 目标主机是否能够联通
    • 对方keepalived是否运行

    如果要检测到目标服务的状态,那就只能通过vrrp_script脚本。例如为了监控app.py进程,可以编写一个failover.sh脚本:
    要点是状态正常返回0;状态不正常返回1。

    #!/bin/bash
    
    SERVICE='app.py'
    
    STATUS=$(ps aux | grep $SERVICE  | grep -v grep)
    # 状态正常返回0,不正常就返回1。
    if [ "$STATUS"x != ""x ]; then
        exit 0
    else
        exit 1
    fi
    

    3.2 主节点配置

    NodeA的配置:nodeA.conf

    global_defs {
        router_id NodeA      # 节点标识
    }
    
    vrrp_script chk_webapp {
        script "/home/ha/conf/failover.sh"    # 只要遵从“正常返回0,失败返回1”的规则即可
        interval 1     # 检测间隔
        weight -20      # 失败时权重降低数
    }
    
    vrrp_instance VI_1 {
        state       MASTER      # MASTER 或BACKUP
        interface   eth5            # 绑定的网络接口。具体主机具体配置
        virtual_router_id   51   # 各节点一致
        priority    100                # 节点权重
        advert_int  1                # 广播间隔
        authentication {
            auth_type PASS      # 节点间验证模式
            auth_pass 1234      # 主备口令相同
        }
    
        virtual_ipaddress {
            182.180.115.216/24   # 可不必给出掩码位数
        }
        track_script {
            chk_webapp            # 检查服务状态的vrrp_script
        }
    }
    
    

    NodeB配置:nodeB.conf

    global_defs {
        router_id NodeB      # 节点标识
    }
    
    vrrp_script chk_webapp {
        script "/home/ha/conf/failover.sh"    # 只要遵从“正常返回0,失败返回1”的规则即可
        interval 1     # 检测间隔
        weight -20      # 失败时权重降低数,低于其他节点的权重才会切换。
    }
    
    vrrp_instance VI_1 {
        state       BACKUP # MASTER 或BACKUP
        interface   eth6            # 绑定的网络接口。具体主机具体配置
        virtual_router_id   51   # 各节点一致
        priority    100                # 节点权重
        advert_int  1                # 广播间隔
        authentication {
            auth_type PASS      # 节点间验证模式
            auth_pass 1234      # 主备口令相同
        }
    
        virtual_ipaddress {          # 绑定的VIP
            182.180.115.216/24   # 可不必给出掩码位数
        }
        track_script {
            chk_webapp            # 检查服务状态的vrrp_script
        }
    }
    
    

    4. 实验

    1. 在nodeA上启动keepalived
    keepalived -D -f /path/to/nodeA.conf
    
    1. 在nodeB上启动keepalived
    keepalived -D -f /path/to/nodeB.conf
    
    1. 观测vip,以及访问服务
      分别在两个节点上运行
    ip addr show
    # or
    ip a
    
    curl -XGET http://182.180.169.216:5000
    

    观测对应网络接口。

    此时由于nodeA的权重较高,所以vip绑定在nodeA的网卡上。

    1. 关闭nodeA的服务
    killall app.py
    

    观测VIP,已经访问服务:

    # 此时vip应当转移到nodeB上。如果vrrp_script中配置的weight不够,
    # 即nodeA的priority+weight之后,仍然高于nodeB,则不会发生转移
    ip -a
    # 访问服务,应当仍然可以获取结果。
    curl -XGET http://182.180.169.216:5000
    

    相关文章

      网友评论

          本文标题:Keepalived配置

          本文链接:https://www.haomeiwen.com/subject/hdqrmxtx.html