当前位置: 首页 > news >正文

HAProxy + Keepalived + Nginx 高可用负载均衡系统

1. 项目背景

在现代Web应用中,高可用性和负载均衡是两个至关重要的需求。本项目旨在通过HAProxy实现流量分发,通过Keepalived实现高可用性,通过Nginx提供后端服务。该架构能够确保在单点故障的情况下,系统仍然能够正常运行,并且能够均衡地分配流量到多个后端服务器。

2. 环境准备

2.1 服务器配置

角色IP 地址服务器名称功能描述
HAProxy 主节点192.168.65.131haproxy-master负载均衡器(主)
HAProxy 备节点192.168.65.132haproxy-backup负载均衡器(备)
后端 Web 服务器 1192.168.65.133webserver1提供 Web 服务
后端 Web 服务器 2192.168.65.134webserver2提供 Web 服务
虚拟 IP192.168.65.100-用于 Keepalived 高可用

2.2 软件需求

服务器角色需要安装的软件
HAProxy 主节点HAProxy, Keepalived
HAProxy 备节点HAProxy, Keepalived
后端 Web 服务器Nginx

3. 服务器网络环境配置

3.1 设置静态IP地址

为确保服务器在重启后仍能保持固定的网络配置,在rhel9系统中,需要为每台服务器设置静态IP地址。编辑 /etc/NetworkManager/system-connections/ens160.nmconnection文件:

[ipv4]
address1=192.168.65.131/24,192.168.65.2
dns=8.8.8.8;
method=manual

3.2 配置主机名和主机映射

为便于在集群环境中快速识别和管理各服务器,需要为每台服务器配置主机名。

HAProxy 主节点(192.168.65.131)
  1. 设置主机名

    sudo hostnamectl set-hostname haproxy-master
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   haproxy-master
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
HAProxy 备节点(192.168.65.132)
  1. 设置主机名

    sudo hostnamectl set-hostname haproxy-backup
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   haproxy-backup
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服务器 1(192.168.65.133)
  1. 设置主机名

    sudo hostnamectl set-hostname webserver1
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   webserver1
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服务器 2(192.168.65.134)
  1. 设置主机名

    sudo hostnamectl set-hostname webserver2
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   webserver2
    192.168.65.131 haproxy-master
    192.168.65.132 haproxy-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2

3.3 永久关闭selinux 

sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

重启并查看

reboot
getenforce

3.4 配置防火墙规则

为保障网络安全,需要优化防火墙规则,开启必要的服务端口,同时关闭不必要的端口。使用 firewalld 配置防火墙:

# 开启HAProxy的80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload# 开启Keepalived的VRRP端口
firewall-cmd --zone=public --add-port=112/udp --permanent
firewall-cmd --reload

3.5 实现SSH免密登录

为提高运维效率并减少人为错误,需要实现SSH免密登录。生成SSH密钥对,并将公钥复制到所有服务器:

# 在主节点生成密钥对
ssh-keygen -t rsa# 将公钥复制到其他服务器
ssh-copy-id haproxy-backup
ssh-copy-id webserver1
ssh-copy-id webserver2

4. 软件安装与配置

4.1 HAProxy 主节点和备节点配置

4.1.1 安装 HAProxy 和 Keepalived

在HAProxy主节点和备节点上安装必要的软件:

yum install -y haproxy keepalived
4.1.2 配置 HAProxy

编辑 /etc/haproxy/haproxy.cfg 文件,配置HAProxy以实现流量分发到后端Web服务器:

globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxyuser haproxygroup haproxydaemondefaultslog     globalmode    httpoption  httplogoption  dontlognulltimeout connect 5000timeout client  50000timeout server  50000frontend http_frontbind *:80default_backend http_backbackend http_backbalance roundrobinserver web1 192.168.65.133:80 checkserver web2 192.168.65.134:80 check
4.1.3 配置 Keepalived

编辑 /etc/keepalived/keepalived.conf 文件,配置Keepalived以实现主备切换,确保高可用性:

主节点(192.168.65.131)

global_defs {router_id SERVER1
}
vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.100}
}

备节点(192.168.65.132)

global_defs {router_id SERVER2
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.100}
}
4.1.4 启动服务

启动并启用HAProxy和Keepalived服务,确保配置生效:

sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo systemctl enable keepalived
sudo systemctl start keepalived

 keepalived主节点(192.168.65.131):成功获取vip:192.168.100 

 keepalived备节点(192.168.65.132):没有获取vip,正常

4.2 后端 Web 服务器配置

4.2.1 安装 Nginx

在后端Web服务器上安装Nginx,为用户提供Web服务:

sudo yum install -y nginx
4.2.2 配置 Nginx

编辑 /etc/nginx/conf.d/test1.conf/etc/nginx/conf.d/test2.conf 文件,配置Nginx以响应HTTP请求,并返回服务器标识信息:

Web服务器1(192.168.65.133)

server {listen 80;location / {return 200 "Welcome to Web Server webserver1\n";}
}

Web服务器2(192.168.65.134)

server {listen 80;location / {return 200 "Welcome to Web Server webserver2\n";}
}
4.2.3 启动 Nginx并测试

启动并启用Nginx服务,确保其正常运行:

sudo systemctl enable nginx
sudo systemctl start nginx

5. 测试与验证

5.1 验证 HAProxy 和 Keepalived

5.1.1 正常访问测试

验证客户端是否能够通过虚拟IP正常访问后端服务器:

curl 192.168.65.100

预期结果: 返回 Welcome to Web Server webserver1 或 Welcome to Web Server webserver2。

5.1.2 主节点故障模拟

验证在主节点故障时,备节点是否能够正常接管虚拟IP:

  1. 在主节点(192.168.65.131)上停止Keepalived服务

    systemctl stop keepalived
  2. 在客户端再次访问虚拟IP,观察响应内容。

预期结果: 备节点接管虚拟IP,客户端仍能正常访问后端服务器。

主节点(192.168.65.131)失去vip 

 备用节点(192.168.65.132)成功获取vip 

5.2 验证 Nginx

验证后端服务器的Nginx服务是否正常运行:

curl http://192.168.65.133
curl http://192.168.65.134

预期结果: 分别返回 Welcome to Web Server webserver1和 Welcome to Web Server webserver2。

相关文章:

  • [网络层]ICMP协议
  • Java:编程世界的常青树与数字化转型的基石
  • Maven 项目构建时编译错误问题排查与解决
  • IDEA+git将分支合并到主分支、IDEA合并分支
  • OpenCV直方图与直方图均衡化
  • 解决vue create 创建项目,不能使用上下键选择模板的问题
  • 网页禁止粘贴的解决方法(以学习通网页为例)
  • 笔记本电脑升级实战手册【扩展篇1】:flash id查询硬盘颗粒
  • kkfileview文件上传安全漏洞原理分析及解决方案
  • 在Linux中安装JDK并且搭建Java环境
  • 如何禁止chrome自动更新
  • 免布线视频桩如何重塑停车管理模式
  • 基于STM32、HAL库的RN8209C电能计量芯片驱动程序设计
  • Android Studio 中 build、assemble、assembleDebug 和 assembleRelease 构建 aar 的区别
  • 码蹄集——人民币大写数字、全部整除、隐晦余8
  • node版本.node版本、npm版本和pnpm版本对应
  • Spring Boot异步任务失效的8大原因及解决方案
  • (自用)Java学习-5.12(Redis,B2C电商)
  • OpenCV图像金字塔详解:原理、实现与应用
  • 谷歌Gemini生图升级:与GPT-4o的对决,谁更胜一筹?
  • 为惩戒“工贼”,美国编剧工会“痛下杀手”
  • 人民网评:守护健康证的“健康”,才有舌尖上的安全
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排
  • 秦洪看盘|预期改善,或迎来新的增量资金
  • 言短意长|西湖大学首次“走出西湖”
  • 百利天恒董事长向复旦捐赠三千万元,用于支持创新药物靶点发现等师资建设需要