«

记录一次全面的Keepalived与Nginx高可用集群实战过程

时间:2024-12-23 00:09     作者:Anglei     分类: Linux


实验介绍

通过Keepalived来实现Nginx的HA集群,当集群中的主服务器发生故障后,业务自动切换到备用主机上

组网介绍

如下图所示:由三台主机组成,Ngingx1和Nginx2上运行Nginx服务,并通过Keepalived虚拟出一台主机供客户端访问。Nginx1和Nginx2之间通过10网段进行心跳检测,通过IP192.168.1.20对外提供服务,如果其中一台Nginx进程出现故障,业务自动切换到另外一台主机上。

Nginx1:心跳地址10.0.0.2/24,业务地址192.168.1.14
Nginx2:心跳地址10.0.0.3/24,业务地址192.168.1.15
VIP:192.168.1.20
client:192.168.1.12

实验步骤

步骤1 安装keepalived
在两台nginx主机上安装keepalived

yum install -y keepalvied

步骤2 Nginx1和Nginx2网络配置

两台主机需要配置两个端口,其中ens33用于心跳网络,网段为10.0.0.0/24、ens36用于提供对外服务,网段为192.168.1.0/24

Nginx1主机的网卡设置:

nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.0.0.2/24
nmcli connection modify ens36 ipv4.method manual ipv4.addresses 192.168.1.14/24
nmcli connection up ens33
nmcli connection up ens36

Nginx2主机的网卡设置:

nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.0.0.3/24
nmcli connection modify ens36 ipv4.method manual ipv4.addresses 192.168.1.15/24
nmcli connection up ens33
nmcli connection up ens36

测试心跳网络和业务网络的连通性

步骤3 keepalived配置
本例将Nginx1设置为主节点,Nginx2设置为备节点,因此将Nginx1上的keepalived配置文件/etc/keepalived/keepalived.conf的内容修改为以下内容

[root@Nginx1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id Nginx1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens36
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Huawei@123
    }
    virtual_ipaddress {
        192.168.1.20/24
    }
}

将Nginx2的keepalived配置文件修改为以下内容、

! Configuration File for keepalived
global_defs {
   router_id Nginx2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens36
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Huawei@123
    }
    virtual_ipaddress {
        192.168.1.20/24
    }
}

配置完成后,分别在Nginx1和Nginx2上使用以下命令重启Keepalved服务

systemctl restart keepalived.service

检查Nginx1上是否生成浮动IP

步骤4 测试HA效果
在客户端使用浮动地址访问Nginx服务,会看到返回的都是Nginx1提供的页面,如下图所示:

手动将Nginx1关机,查看然后再用浮动地址访问Nginx服务,发现返回的都是Nginx2提供的页面:

[root@Nginx1 ~]# systemctl stop nginx.service

查看浮动IP是否漂移至Nginx2

步骤5 健康检查配置
目前的配置,Keepalived仅能通过主机是否宕机来进行业务切换,如果仅仅是Nginx业务出现故障是无法切换的,需要在keepalived中添加健康检查来达到检测Nginx是否可用的目的。

首先开启在步骤4中关机的Nginx1,并分别在Nginx1和Nginx2的keepalived配置文件中添加健康检查的相关配置,具体如下:

global_defs {
   router_id Nginx1
}
vrrp_script nginx_check 
{
    script "/etc/keepalived/check.sh"
    interval 1
    weight -5 #如果脚本返回非零值,则优先级-5
    #fail 3 #注意在某些版本的keepalived上该参数无效,不能配置
}
vrrp_instance VI_1 {
……
    track_script {
        nginx_check
    }
}

注意:

vim /etc/keepalived/check.sh
#!/bin/bash
systemctl status nginx | grep "active (running)" > /dev/null
if [ $? -ne 0 ];then
    systemctl restart nginx& > /dev/null
    sleep 1
    systemctl status nginx | grep "active (running)" > /dev/null
    if [ $? -ne 0 ];then
        systemctl stop keepalived
    else
        exit
    fi
fi

注意:要给该脚本文件加上执行权限、

chmod +x /etc/keepalived/check.sh

步骤6 测试
配置完成后,重启keepalived服务,修改Nginx1上的nginx配置文件,使其不能正常启动,然后停止nginx服务,模拟故障场景

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak systemctl stop nginx systemctl status nginx

我们看到Nginx1上的nginx服务已经停止

我们查看VIP的漂移情况
Nginx1上已经没有VIP了

VIP已经漂移到Nginx2上

步骤7 验证
在客户端进行验证,这时候提供服务的是Nginx2了

总结:

以上就是笔者完成的一次完整的用Keepalived实现nginx高可用的实验,其中遇到的一些问题及其注意事项还是非常有参考价值的。如果您恰好有两台nginx服务器,那么就可以用这种方法来实现高可用,大大提高web服务的可靠性。

本文完结,相关标签: nginx 高可用 keepalived

版权所有:Anglei
文章标题:记录一次全面的Keepalived与Nginx高可用集群实战过程
除非注明,本站文章均为 MAXADA社区知识库 原创,请勿用于任何商业用途。

推荐阅读:

看完后感想如何?

路过(0)

雷人(0)

握手(0)

鲜花(0)

鸡蛋(0)
分享到: