代码改变世界

keepalived 高可用配置

2021-09-17 14:09  清晨、午后  阅读(241)  评论(0编辑  收藏  举报

1. 安装 

sudo apt install keepalived

2. 配置

配置文件路径 /etc/keepalived,安装后默认会创建该目录,不存在时创建一个即可

特别注意:

1.配置文件权限必须为644,否则无法启动,且日志看不出异常

2./etc/keepalived 目录的权限为755,检测脚本的权限也为755,否则启动报错脚本不安全等

环境:使用 KVM 搭建两台虚拟机,使用桥接方式(虚拟机与宿主机网段相同,但是不能互相ping通)

主机:

global_defs {
   router_id KMS_HA

    script_user root    # 指定脚本运行用户
    enable_script_security
} 

vrrp_script checkserver {
    script "/etc/keepalived/checkserver.sh"        #检测脚本
    interval 1         #监测间隔
    weight -11        #失败时,优先级减2
    fall 3             # 指定nginx检测脚本连续执行失败次数为3,才进行Failover
    rise 1           # 指定nginx检测脚本连续执行成功次数为1,才进行Failback
}

vrrp_instance VI_DB {
    state MASTER
    interface eno1     # 虚拟IP的网卡,与实际网卡一致
    virtual_router_id 22
    priority 100 # 优先级,主机挂掉后用此值决策哪个备机作为新主机
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4422
    }

    virtual_ipaddress {
        10.7.11.48 # 虚拟为未被占用的ip地址
    }

    unicast_src_ip  10.7.11.49  #本机ip
    unicast_peer {              
        10.7.11.41      #对端ip
    }

    track_script {
        checkserver                 #通过指定上面定义监控脚本来监控服务状态,以完成主备切换
    }
}
View Code

备机:

global_defs {
   router_id KMS_HA1

    script_user root    # 指定脚本运行用户
    enable_script_security
} 

vrrp_script checkserver {
    script "/etc/keepalived/checkserver.sh"        #检测脚本
    interval 1         #监测间隔
    weight -11        #失败时,优先级减2
    fall 3             # 指定nginx检测脚本连续执行失败次数为3,才进行Failover
    rise 1           # 指定nginx检测脚本连续执行成功次数为1,才进行Failback
}

vrrp_instance VI_DB {
    state MASTER
    interface eno1     # 虚拟IP的网卡,与实际网卡一致
    virtual_router_id 22
    priority 90 # 优先级,主机挂掉后用此值决策哪个备机作为新主机
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4422
    }

    virtual_ipaddress {
        10.7.11.48 # 虚拟为未被占用的ip地址
    }

    unicast_src_ip  10.7.11.41  #本机ip
    unicast_peer {              
        10.7.11.49      #对端ip
    }

    track_script {
        checkserver                 #通过指定上面定义监控脚本来监控服务状态,以完成主备切换
    }
}
View Code

3.检测脚本 checkserver.sh

检测脚本的规则为正常返回0,否则返回1

#!/bin/bash
PIDS=`ps -ef |grep xxxserver |grep -v grep | awk '{print $2}'`
if [ "$PIDS" != "" ]; then
echo "xxxserver is runing!"
exit 0
else
exit 1fi

4. 验证

刚启动时虚拟ip(vip)在主机上,对外提供服务,当检测脚本返回-1的时候(或者直接停掉keepalived),备机虚拟出ip,并对外提供服务

 

 

----