1 项目概述
1.1 旅游攻略平台项目背景
随着互联网旅游行业的快速发展,用户对旅游攻略分享平台的高可用性和稳定性提出了更高要求。传统单服务器架构在面对高并发访问时容易出现性能瓶颈,导致响应延迟甚至服务中断。本项目基于 LVS+DR+Web+NFS 架构,构建了一个高可用的旅游攻略分享平台,通过负载均衡技术实现流量分发,结合共享存储保障数据一致性,显著提升了系统的并发处理能力和容错能力。
1.2 项目功能
负载均衡:通过LVS(Linux Virtual Server)的DR(Direct Routing)模式,将用户请求智能分发至后端多台Web服务器
高可用Web服务:部署Nginx+PHP双节点集群,单节点故障时自动切换至健康节点
数据一致性保障:利用NFS(Network File System)实现多Web服务器间的文件实时同步
无缝扩展能力:支持快速横向扩展Web服务器节点,应对业务增长
1.3 项目模块:

1.4 工作原理:

1.5 关键技术:
DR模式:LVS仅修改MAC地址转发请求,Web服务器直接响应客户端,避免性能瓶颈
ARP抑制:通过arp_ignore/arp_announce配置防止VIP冲突
2. 网络环境配置调试
2.1 Linux网络配置:
四台机子配置好IP, 此处示例Web1节点
sudo nmcli con mod ens33 ipv4.addresses 10.1.1.50/24
sudo nmcli con mod ens33 ipv4.gateway 10.1.1.1
sudo nmcli con mod ens33 ipv4.dns "223.5.5.5"
sudo nmcli con up ens33
四台机子配置完之后四台机子都可以相互ping通就可以
2.2 VIP配置(LVS节点)
sudo ip addr add 10.1.1.80/32 dev ens33
echo 'net.ipv4.conf.all.arp_ignore=1' >> /etc/sysctl.conf
sysctl -p
2.3 网络调试与连通性验证
LVS节点测试后端Web
ping 10.1.1.50
curl -I http://10.1.1.50

2.4 防火墙策略测试:
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload
3.旅游攻略分享平台的部署
3.1所有节点配置:
在工作生产中不宜将防火墙关闭,所以此项目我们开启防火墙
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload

3.2 NFS服务器(10.1.1.78)配置:
3.2.1安装 NFS 服务端软件
sudo yum install -y nfs-utils rpcbind
3.2.2启动必要服务并设置开机自启
这里需要特别注意,启动顺序很重要,可以先启动rpcbind
(sudo systemctl start rpcbind
sudo systemctl start nfs-server)
或者
sudo systemctl enable rpcbind nfs-server
sudo systemctl start rpcbind nfs-server
3.2.3创建共享目录并设置权限
sudo mkdir -p /var/nfs/travel_share
sudo chown -R nfsnobody:nfsnobody /var/nfs/travel_share
sudo chmod -R 755 /var/nfs/travel_share
3.2.4配置 NFS 共享
编辑/etc/exports文件:
sudo vi /etc/exports
添加以下内容:/var/nfs/travel_share 10.1.1.0/24(rw,sync,no_root_squash)

sudo exportfs -ra使配置生效
3.2.5 添加虚拟IP
由于本项目只有一台lvs,所以没有使用keepalive,所以使用手动配置IP
一台负载均衡器:不需要启动 Keepalived,使用 /root/lvs_dr.sh 手动配置 LVS
两台负载均衡器:需要配置并启动 Keepalived,实现高可用性
sudo ip addr add 10.1.1.80/32 dev ens33
修改ens33文件
DEVICE=ens33:0
IPADDR=10.1.1.80
NETMASK=255.255.255.255
ONBOOT=yes
NAME=ens33:0
IPV6INIT=no # 禁用 IPv6

3.3Web 服务器(10.1.1.50 和 10.1.1.60)配置
3.3.1安装基础软件
sudo yum install -y epel-release
sudo yum install -y nginx php-fpm php-mysqlnd
3.3.2配置 Nginx
编辑 Nginx 配置文件:
sudo vi /etc/nginx/conf.d/default.conf
添加以下内容:
server {
listen 80;
server_name 10.1.1.80;
location / {
root /var/www/html;
index index.php index.html index.htm;
try_files uri uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name;
include fastcgi_params;
}
}

3.3.3启动 Nginx 和 PHP-FPM 并设置开机自启
Web服务器的启动顺序:
(sudo systemctl start rpcbind
sudo systemctl start nfs-utils
sudo mount -a # 挂载NFS共享目录
sudo systemctl start php-fpm
sudo systemctl start nginx)
sudo systemctl enable nginx php-fpm
sudo systemctl start nginx php-fpm
3.3.4安装 NFS 客户端并挂载共享目录
sudo yum install -y nfs-utils
sudo mkdir -p /var/www/html
编辑/etc/fstab文件:
sudo vi /etc/fstab
添加以下内容:
10.1.1.78:/var/nfs/travel_share /var/www/html nfs defaults 0 0

挂载 NFS 共享目录:
sudo mount -a
3.4负载均衡器(10.1.1.40)配置:
3.4.1安装 ipvsadm
sudo yum install -y ipvsadm
3.4.2配置 LVS 规则(DR 模式)
创建 LVS 规则脚本:
sudo vi /root/lvs_dr.sh
添加以下内容
#!/bin/bash
VIP=10.1.1.80 # 虚拟IP
RIP1=10.1.1.50
RIP2=10.1.1.60
清除现有规则
ipvsadm -C
添加虚拟服务器
ipvsadm -A -t $VIP:80 -s rr
添加真实服务器
ipvsadm -a -t VIP:80 -r RIP1:80 -g
ipvsadm -a -t VIP:80 -r RIP2:80 -g

赋予执行权限并执行:
sudo chmod +x /root/lvs_dr.sh
sudo /root/lvs_dr.sh
3.4.3配置内核参数
编辑/etc/sysctl.conf文件:
sudo vi /etc/sysctl.conf
添加以下内容:
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 # 根据实际网卡名修改
使配置生效:
sudo sysctl -p

4. 项目功能验证与进程查看
4.1 LVS 负载均衡验证:

4.2 Web服务验证:
虽然我们前面已经完成了配置,但是此时访问10.1.1.80还是403,这是因为我们没有配置index.html文件
sudo bash -c 'cat > /var/www/html/index.html <<EOF
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>旅游攻略平台</title>
</head>
<body>
<h1>欢迎来到旅游分享社区!</h1>
<p>发现精彩目的地,记录您的旅行故事。</p>
</body>
</html>
EOF'
然后去web2服务器查看是否有index.html文件

重启之后在浏览器中访问10.1.1.80,访问成功

curl http://10.1.1.80
在web1、web2和nfs服务器上都是可以访问的,在lvs中无法访问,lvs上curl VIP时,数据包会从LVS发出,又试图返回到LVS,这种"自循环"访问在DR模式下无法正常工作

4.3 NFS共享验证:
在Web1上创建测试文件:
echo "Test file" > /var/www/html/test.txt
在 Web 服务器 2 上检查是否能看到该文件:
ls /var/www/html/

5.项目相关日志:
5.1故障排查案例:
5.1.1 NFS挂载失败:
查看客户端日志
journalctl -xe | grep -i mount
服务端验证
rpcinfo -p 10.1.1.78
解决方案:
检查**/etc/exports**权限配置
验证rpcbind服务状态
测试网络连通性
5.1.2 日志分析实践**:**
实时监控命令
LVS连接状态监控
watch -n 1 'ipvsadm -lcn | grep -A 10 10.1.1.80'