基于 haproxy+nginx+nfs+dns 构建高可用,负载均衡服务架构全流程
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 ~]#
自此,项目架构成功搭建,实验中采用 “由后往前” 的部署逻辑,进行先存储 / 解析,后服务 / 负载的搭建思路,成功搭建了高可用服务架构。该架构具备可扩展性、一致性、高可用性,可作为中小业务从单节点向集群化架构升级的参考方案。
实验价值与扩展方向
-
实验价值
本次架构解决了单节点架构的核心痛点:
多 Nginx 节点 + Haproxy 负载均衡,突破单节点并发瓶颈;
NFS 共享存储,实现静态资源 “一处修改、多节点同步”;
Haproxy 健康检查,当某 Nginx 节点故障时,自动将流量切至正常节点,避免服务中断。
-
扩展方向
增加 Haproxy 节点,通过 Keepalived 实现负载均衡层的高可用;
引入 Redis 实现动态资源缓存,进一步提升访问性能;
配置 NFS 高可用(如 GlusterFS),避免存储层单点故障。
更多推荐




所有评论(0)