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

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

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'

http://www.lryc.cn/news/586646.html

相关文章:

  • linux中at命令的常用用法。
  • Vue配置特性(ref、props、混入、插件与作用域样式)
  • DHS及HTTPS工作过程
  • 【Java Stream】基本用法学习
  • vue2入门(1)vue核心语法详解复习笔记
  • 算法学习笔记:18.拉斯维加斯算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 一扇门铃,万向感应——用 eventfd 实现零延迟通信
  • 14.使用GoogleNet/Inception网络进行Fashion-Mnist分类
  • 4. 观察者模式
  • Java行为型模式---观察者模式
  • Typecho分类导航栏开发指南:从基础到高级实现
  • 低代码引擎核心技术:OneCode常用动作事件速查手册及注解驱动开发详解
  • Pytorch实现感知器并实现分类动画
  • 深入理解观察者模式:构建松耦合的交互系统
  • 为什么玩游戏用UDP,看网页用TCP?
  • 【C++详解】STL-priority_queue使用与模拟实现,仿函数详解
  • 信息收集实战
  • 【读书笔记】《C++ Software Design》第九章:The Decorator Design Pattern
  • 设计模式:软件开发的高效解决方案(单例、工厂、适配器、代理)
  • 基于无人机 RTK 和 yolov8 的目标定位算法
  • 一文认识并学会c++模板(初阶)
  • AI 助力编程:Cursor Vibe Coding 场景实战演示
  • 基于 Redisson 实现分布式系统下的接口限流
  • 牛客网50题
  • 【C/C++】编译期计算能力概述
  • [Python] -实用技巧篇1-用一行Python代码搞定日常任务
  • python-range函数
  • 校园幸运抽(抽奖系统)测试报告
  • 第七章应用题
  • HT8313功放入门