Haproxy负载均衡与架构优化方案实战:

基于 haproxy+nginx+nfs+dns 构建高可用服务架构全流程

前言:

随着业务流量增长,单节点服务架构面临并发瓶颈、资源不一致、故障单点等问题。本次实验通过haproxy+nginx+nfs+dns组合,构建一套具备流量负载均衡、静态资源统一存储、服务高可用的架构,验证其在流量分发、故障自愈、资源一致性方面的能力。
接下来,我将直接通过一场可落地的实验,用haproxy+nginx+nfs+dns这一套组合拳,解决上述问题:实验将从 “单节点服务的痛点复现” 切入,依次完成 Haproxy 的负载规则配置、多 Nginx 节点的集群化部署、NFS 的静态资源统一存储,以及 DNS 对服务域名的解析配合,最终验证架构的流量分发、故障自愈与资源一致性能力。

本次架构采用 “分层解耦” 设计,各组件职责明确:

DNS(bind):提供域名解析能力,将业务域名www.chengke.com映射到 Haproxy 节点,作为流量入口;

Haproxy:承担负载均衡角色,将客户端请求分发至后端 Nginx 节点,同时实现节点健康检查与故障转移;

Nginx 集群(nginx1/nginx2):提供 Web 服务,通过挂载 NFS 共享目录实现静态资源统一;

NFS:作为共享存储,统一管理静态资源文件,避免多节点资源不一致问题。

1.主机规划及初始化操作
主机名 IP地址 安装软件
haproxy 192.168.110.143/24 haproxy
nginx1 192.168.110.140/24 nginx,nfs-utils
nginx2 192.168.110.141/24 nginx,nfs-utils
nfs 192.168.110.144/24 nfs-utils
dns 192.168.110.145/24 bind

首先进行主机准备,配置好ip后使用快捷命令对每台主机进行修改主机名,关闭防火墙,关闭selinux的操作,减少此实验环境下的权限操作,以下:

[root@web1 ~]# hostnamectl set-hostname nginx1 && bash
[root@nginx1 ~]# 
[root@nginx1 ~]# systemctl disable --now firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@dns ~]# setenforce 0
[root@dns ~]# sed -i "s/SELINUX=enforcing/SELINUX=permissive/"  /etc/selinux/config

2.由后往前进行环境搭建

2.1搭建dns环境流程

首先是安装dns运行所需的软件bind,然后修改其核心配置文件;

[root@dns ~]# dnf install bind -y
[root@dns ~]# vim /etc/named.conf

在这里插入图片描述

然后是配置区域文件,和配置区域数据解析文件,记得做好备份;

[root@dns ~]# vim /etc/named.rfc1912.zones

在这里插入图片描述

[root@dns ~]# cp -p /var/named/named.localhost /var/named/chengke.com.zone
[root@dns ~]# vim /var/named/chengke.com.zone

在这里插入图片描述

进行语法校验,无报错后启动服务并进行解析验证;

[root@dns ~]# named-checkconf -i /etc/named.conf
[root@dns ~]# named-checkzone chengke.com /var/named/chengke.com.zone 
zone chengke.com/IN: loaded serial 0
OK
[root@dns ~]# systemctl start named
[root@dns ~]# dig -t A www.chengke.com @192.168.110.145

在这里插入图片描述

2.2搭建nfs环境流程

首先是创建共享目录,创建共享文件,为共享文件设置权限,避免报错;

[root@nfs ~]# mkdir /share
[root@nfs ~]# vim /share/index.html
[root@nfs ~]# cat /share/index.html
nfs 192.168.110.144
[root@nfs ~]# chown -R nobody: /share

安装nfs环境搭建所需的软件nfs-utils,配进行配置;

[root@nfs ~]# dnf install nfs-utils -y
[root@nfs ~]# vim /etc/exports
[root@nfs ~]# cat /etc/exports
/share  192.168.110.0/24(rw,sync,no_subtree_check)

验证配置无误后启动nfs,并进行验证;

[root@nfs ~]# exportfs -rv
exporting 192.168.110.0/24:/share
[root@nfs ~]# systemctl start nfs-server.service
[root@nfs ~]# showmount -e 192.168.110.144
Export list for 192.168.110.144:
/share 192.168.110.0/24

2.3搭建nginx2环境流程

首先是安装nginx环境所需的软件,并将其nginx根目录挂载到共享路径之下;

[root@nginx2 ~]# dnf install nginx -y
[root@nginx2 ~]# mount -t nfs 192.168.110.144:/share /usr/share/nginx/html/

查看目录和文件,启动服务,进行访问测试;

[root@nginx2 ~]# ls /usr/share/nginx/html/
index.html
[root@nginx2 ~]# cat /usr/share/nginx/html/index.html 
nfs 192.168.110.144
[root@nginx2 ~]# systemctl start nginx
[root@nginx2 ~]# curl 192.168.110.141
nfs 192.168.110.144

2.4搭建nginx1环境流程

首先是安装nginx环境所需的软件,并将其nginx根目录挂载到共享路径之下;

[root@nginx1 ~]# dnf install nginx -y
[root@nginx1 ~]# mount -t nfs 192.168.110.140:/share /usr/share/nginx/html/

查看目录和文件,启动服务,进行访问测试;

[root@nginx2 ~]# ls /usr/share/nginx/html/
index.html
[root@nginx2 ~]# cat /usr/share/nginx/html/index.html 
nfs 192.168.110.144
[root@nginx2 ~]# systemctl start nginx
[root@nginx2 ~]# curl 192.168.110.140
nfs 192.168.110.144

2.5搭建haproxy流程

首先是安装haproxy软件,然后修改配置文件,记得先进行备份;

[root@haproxy ~]# dnf install haproxy -y
[root@haproxy ~]# cp -p /etc/haproxy/haproxy.cfg{,.bak}
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

在这里插入图片描述

主要修改后面两个板块,然后验证配置文件语法;

[root@haproxy ~]# haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid

将haproxy的DNS地址指向dns服务器;

[root@haproxy ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]:                             223.5.5.5
[root@haproxy ~]# nmcli c m ens160 ipv4.dns 192.168.110.145
[root@haproxy ~]# nmcli c up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@haproxy ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]:                             192.168.110.145

无误后启动haproxy,进行最终结果测试;

[root@haproxy ~]# systemctl start haproxy
[root@haproxy ~]# curl www.chengke.com
nfs 192.168.110.144
[root@haproxy ~]# curl www.chengke.com
nfs 192.168.110.144
[root@haproxy ~]# curl www.chengke.com
nfs 192.168.110.144
[root@haproxy ~]# 

自此,项目架构成功搭建,实验中采用 “由后往前” 的部署逻辑,进行先存储 / 解析,后服务 / 负载的搭建思路,成功搭建了高可用服务架构。该架构具备可扩展性、一致性、高可用性,可作为中小业务从单节点向集群化架构升级的参考方案。

实验价值与扩展方向
  1. 实验价值

    本次架构解决了单节点架构的核心痛点:

    多 Nginx 节点 + Haproxy 负载均衡,突破单节点并发瓶颈;

    NFS 共享存储,实现静态资源 “一处修改、多节点同步”;

    Haproxy 健康检查,当某 Nginx 节点故障时,自动将流量切至正常节点,避免服务中断。

  2. 扩展方向

    增加 Haproxy 节点,通过 Keepalived 实现负载均衡层的高可用;

    引入 Redis 实现动态资源缓存,进一步提升访问性能;

    配置 NFS 高可用(如 GlusterFS),避免存储层单点故障。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐