【Linux】keepalived实现nginx高可用

环境

VIP=192.168.100.100

主机IP
nginx1192.168.100.150
nginx2192.168.100.151

部署

安装nginx()

#两个nginx节点安装keepalive服务
yum -y install keepalived
systemctl enable keepalived

修改keepalive配置文件

nginx1

[root@nginx1 ~]> cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
    router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 10
    weight -5
    fall 2
    rise 1
}
vrrp_instance VI_1 {
    state MASTER
    # 注意网卡名
    interface ens33
    # lan口IP地址
    mcast_src_ip 192.168.100.150
    virtual_router_id 51
    priority 100
    #nopreempt
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass BLUEKING_NGINX_HA
    }
    virtual_ipaddress {
        192.168.100.100/24
    }
    track_script {
      chk_nginx
    }
}

nginx2

[root@kafka02 ~]> cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
    router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 10
    weight -5
    fall 2
    rise 1
}
vrrp_instance VI_1 {
    state BACKUP
    # 注意网卡名
    interface ens33
    mcast_src_ip 192.168.100.151
    virtual_router_id 51
    priority 98
    #nopreempt
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass BLUEKING_NGINX_HA
    }
    virtual_ipaddress {
        192.168.100.100/24
    }
    track_script {
      chk_nginx
    }
}

所有节点编写脚本文件

/etc/keepalived/check_nginx.sh

#!/bin/bash
process_name="nginx"
process_abs_path="/usr/local/nginx1/sbin/nginx"

function is_nginx_running() {
    process_info=$(ps --no-header -C $process_name -o ppid,pid,args | awk '{printf $1 "|" $2 "|" ; for (i=3; i<=NF; i++) { printf "%s ", $i };printf "\n"}' | grep master)
    if [[ -z "$process_info" ]]; then
        return 1
    else
        process_pids=($(echo "$process_info" | awk -F'|' '{print $2}'))
        for _pid in "${process_pids[@]}"; do
            abs_path=$(readlink -f /proc/$_pid/exe)
            if [ "$abs_path" == "$(readlink -f "$process_abs_path")" ]; then
                return 0
            fi
        done
        return 2
    fi
}

err=0
for k in $(seq 1 3); do
    is_nginx_running
    if [[ $? != "0" ]]; then
        err=$((err + 1))
        sleep 1
    else
        err=0
        break
    fi
done

if [[ $err != "0" ]]; then
    exit 1  # 返回失败状态
else
    exit 0
fi
EOF

测试

在这里插入图片描述
停止1号节点的nginx,验证故障转移。

[root@kafka01 keepalived]> systemctl stop nginx
[root@kafka01 keepalived]> ip a


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:84:bb:4d brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.100.150/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe84:bb4d/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

在这里插入图片描述
节点2
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值