Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

 更新时间:2025年05月17日 15:27:09   作者:Wan@Technology Stack  
本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、故障切换及VIP漂移验证,确保服务高可用性与性能

前言

Keepalived 作为一个高性能的集群高可用解决方案。提供了集群节点心跳检测、健康检查以及故障切换的功能。原生支持 LVS 负载均衡集群。除了原生支持的LVS + Keepalived 外,现在 Nginx + Keepalived 也比较常用。接下来,我将详细介绍 Nginx + Keepalived。

一、架构设计

负载均衡方案系统架构拓扑图

二、环境准备

rolehostipsoftware installedOS
Nginx proxy、Keepalive MASTERnode01192.168.5.11Nginx-1.10.0、keepalivedCentos 7.8
Nginx proxy、Keepalive BACKUPnode02192.168.5.12Nginx-1.10.0、keepalivedCentos 7.8
nginx web server1node03192.168.5.13Nginx-1.18.0Centos 7.8
nginx web server1node04192.168.5.14Nginx-1.18.0Centos 7.8
Clientnode05192.168.5.15----Centos 7.8

三、案例部署

配置 前端 Keepalived

---node01
[root@node01 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.5.10
   smtp_connect_timeout 30
   router_id LVS_DEVEL1
}
vrrp_script check_nginx_service {
   script "/etc/keepalived/check_web_server_keepalive.sh"
   #script "killall -0 nginx"
   interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
       check_nginx_service
    }
    virtual_ipaddress {
        192.168.5.100
    }
}

[root@node01 ~]# systemctl restart keepalived.service



---node02
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.5.10
   smtp_connect_timeout 30
   router_id LVS_DEVEL2
}
vrrp_script check_nginx_service {
   script "/etc/keepalived/check_web_server_keepalive.sh"
   #script "killall -0 nginx"
   interval 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
       check_nginx_service
    }
    virtual_ipaddress {
        192.168.5.100
    }
}

[root@node02 ~]# systemctl restart keepalived.service

配置 前端 Nginx 负载均衡

---node01
[root@node01 ~]# mv /etc/nginx/conf.d/default.conf{,.bak}
[root@node01 ~]# vim /etc/nginx/conf.d/vhost.conf
upstream nginx_keepalived_webservers {
   server 192.168.5.13:80 weight=1;
   server 192.168.5.14:80 weight=1;
}

server{
    listen       80;
    server_name  wan.ngin_keepalived.org;
    location / {
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_pass http://nginx_keepalived_webservers;
      }   
}

[root@node01 ~]# systemctl restart nginx


node02
[root@node02 ~]# mv /etc/nginx/conf.d/default.conf{,.bak}
[root@node02 ~]# vim /etc/nginx/conf.d/vhost.conf
upstream nginx_keepalived_webservers {
   server 192.168.5.13:80 weight=1;
   server 192.168.5.14:80 weight=1;
}

server{
    listen       80;
    server_name  wan.ngin_keepalived.org;
    location / {
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_pass http://nginx_keepalived_webservers;
      }   
}

[root@node02 ~]# systemctl restart nginx

配置前端 Nginx监控脚本

---node01
[root@node01 ~]# vim /etc/keepalived/check_web_server_keepalive.sh
#!/bin/bash

http_status=`ps -C nginx --no-header | wc -l`
if [ $http_status -eq 0 ];then
   systemctl start nginx
   sleep 3
   if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
   then
       systemctl stop keepalived
   fi
fi


[root@node02 ~]# vim /etc/keepalived/check_web_server_keepalive.sh
#!/bin/bash

http_status=`ps -C nginx --no-header | wc -l`
if [ $http_status -eq 0 ];then
   systemctl start nginx
   sleep 3
   if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
   then
       systemctl stop keepalived
   fi
fi

配置后端 web 服务

---node03
[root@node03 ~]# yum install nginx-1.18.0-1.el7.ngx.x86_64.rpm -y
[root@node03 ~]# echo "`hostname -I` web test page..." > /usr/share/nginx/html/index.html
[root@node03 ~]# systemctl enable --now nginx


----node04
[root@node04 ~]# yum install nginx-1.18.0-1.el7.ngx.x86_64.rpm -y
[root@node04 ~]# echo "`hostname -I` web test page..." > /usr/share/nginx/html/index.html
[root@node04 ~]# systemctl enable --now nginx

客户端访问 VIP

实现 Web 服务负载均衡 !

四、测试

node05 添加hosts解析

1、Keepalived 健康检查

检测 VIP 访问 Web 服务

模拟后端服务故障

[root@node04 ~]# systemctl stop nginx
[root@node04 ~]# systemctl is-active nginx
inactive

检测 VIP 访问 Web 服务

模拟后端服务故障恢复

[root@node04 ~]# systemctl start nginx
[root@node04 ~]# systemctl is-active nginx
active

检测 VIP 访问 Web 服务

注:Nginx upstream 模块默认支持对后端服务健康监测,Haproxy 同样也自带这种功能!

2、Keepalived MASTER/BACKUP 切换

查看keeapalived VIP 地址状况

node01

node02

模拟 Keepalived MASTER 故障

[root@node01 ~]# systemctl stop keepalived.service

node01

node02

web 服务访问不受影响

模拟 Keepalived MASTER 故障恢复

[root@node01 ~]# systemctl start keepalived.service

node01

node02

实现 keeapalived VIP 漂移 !
测试前端 Nginx 负载均衡服务器
node01

Nginx 服务异常后 自动启动!

node02

Web 访问不受影响

模拟node01 nginx 服务无法启动

node01

node02

Web 访问不受影响

到此这篇关于Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例的文章就介绍到这了,更多相关Nginx使用Keepalived部署web集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何在 Windows 上搭建 NTP 服务器

    如何在 Windows 上搭建 NTP 服务器

    这篇文章主要介绍了在 Windows 上搭建 NTP 服务器的操作步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • k8s入门集群组件介绍及概念理解

    k8s入门集群组件介绍及概念理解

    这篇文章主要为大家介绍了k8s入门集群组件的介绍及概念理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Centos7使用docker搭建gitlab服务器

    Centos7使用docker搭建gitlab服务器

    这篇文章主要为大家详细介绍了Centos7使用docker搭建gitlab服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 服务器配置禁止IP直接访问只允许域名访问的实现步骤

    服务器配置禁止IP直接访问只允许域名访问的实现步骤

    联网信息系统需设置只允许通过域名访问,禁止使用IP地址直接访问,建议同时采用云防护技术隐藏系统真实IP地址且只允许云防护节点IP访问服务器,提升网络安全防护能力,这篇文章主要介绍了服务器配置禁止IP直接访问只允许域名访问,需要的朋友可以参考下
    2024-03-03
  • RedHat9配置转发DNS服务器的实现

    RedHat9配置转发DNS服务器的实现

    本文主要介绍了RedHat9配置转发DNS服务器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • iisapp.vbs iis pid了解对应的网站或应用池

    iisapp.vbs iis pid了解对应的网站或应用池

    有时候突然发现某个w3wp.exe进程,占用较大的自由,想看看是哪个网站,然后再解决问题。下面是具体的方法。
    2009-10-10
  • Memcached简介_动力节点Java学院整理

    Memcached简介_动力节点Java学院整理

    这篇文章主要介绍了Memcached简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Memcached构建缓存服务器的方法

    Memcached构建缓存服务器的方法

    这篇文章主要介绍了Memcached构建缓存服务器的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • windows2008系统中rsync计划任务返回0x1问题处理

    windows2008系统中rsync计划任务返回0x1问题处理

    本文给大家分享的是小编在给windows2008配置rsync同步的过程中遇到的一个问题,在win03系统下可以正常返回0x0,结果到了win08系统中就变成了0x1,虽然也同步成功了,但是作为一个完美主义强迫症患者,坚决不能忍,经过一番查证,找到了解决办法,分享给大家
    2017-04-04
  • linux和windows互传文件的实现方案

    linux和windows互传文件的实现方案

    Windows和Linux上的文件互传(互相拷贝)一般常见的主要分为三种:1.基于FTP的方式 2.基于HTTP的方式 3.基于SSH协议的方式.今天我们来探讨的是ssh协议的方式
    2018-04-04

最新评论