基于 CentOS 7 的 LVS+DR+Web+NFS 旅游攻略分享平台部署

发布于:2025-07-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

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_root$fastcgi_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'


网站公告

今日签到

点亮在社区的每一天
去签到