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

记录一次简单的web架构

记录一次简单的web架构

2026-05-30 19:52  kirimi  阅读(0)  评论(0)    收藏  举报

一、核心理论

一、架构核心逻辑(从用户到后端的全流程)

  1. 用户访问入口:用户通过虚拟IP(VIP:192.168.148.170)发起请求。

  2. 负载均衡层:VIP由 lb01lb02(部署 nginx+keepalived)承载,通过 keepalived 实现VIP漂移(高可用),并将请求反向代理+负载均衡到后端Web服务器(web01/web02)。

  3. Web服务器层:web01/web02(可横向扩展)部署

    nginx+php+nfs客户端,负责:

    • nginx 处理静态资源、反向代理;
    • php 处理动态业务逻辑;
    • nfs客户端 挂载 nfs服务器 的共享存储,保证多节点文件(代码、静态资源)一致性。
  4. 数据交互层

    • Web服务器向 mysql服务器读写业务数据;
    • redis服务器 作为缓存层,加速热点数据访问,降低数据库压力。
  5. 响应返回:Web服务器处理完请求后,响应经负载均衡层回传给用户。

二、可视化架构图

Screenshot 2026-05-30 at 12-30-38 Mermaid 在线编辑器

一、环境规划表

ip地址 主机名 需要安装的服务 备注
192.168.148.162 lb01 nginx+keepalived 暂无
192.168.148.163 lb02 nginx+keepalived 暂无
192.168.148.164 web01 nginx+php+nfs客户端 暂无
192.168.148.165 web02 nginx+php+nfs客户端
192.168.148.166 nfs nfs服务端
192.168.148.167 mysql mysql服务端
192.168.148.170 虚拟IP 用户访问这个虚拟IP跳转到lb01和lb02
192.168.148.171 redis redis服务端 缓存层,加速热点数据/存储session)

二、分层部署步骤

架构逻辑:接入层→存储层→应用层→数据层


步骤1:接入层部署(lb01、lb02:nginx+keepalived)

lb01和lb02安装nginx和keepalived,配置keepalived实现虚拟IP漂移,配置nginx实现负载均衡。

  1. 安装keepalived和nginx。
yum install -y keepalived nginx
  1. 配置keepalived实现虚拟IP漂移。
# 编辑keepalived配置文件
vim /etc/keepalived/keepalived.conf# 配置内容示例 主节点(lb01)
! Configuration File for keepalived
global_defs {router_id NODE1_MASTER   # 节点唯一标识
}
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2  # 每2秒检测一次nginx状态
}
vrrp_instance VI_1 {state MASTER              # 主节点interface ens160          # 绑定VIP的网卡(根据实际环境调整)virtual_router_id 51      # 主备必须一致(0-255)priority 120              # 优先级,比备机高(如120 vs 100)advert_int 1              # 心跳间隔1秒nopreempt                 # 非抢占(推荐,避免频繁切换)authentication {auth_type PASSauth_pass 123456      # 密码,主备一致}# 绑定检测脚本track_script {check_nginx}virtual_ipaddress {192.168.148.170/24     # VIP,与物理IP同网段}# 可选:检测本机网卡/服务状态track_interface {ens160}
}# 配置内容示例 备节点(lb02)
! Configuration File for keepalived
global_defs {router_id NODE2_BACKUP
}vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2  # 每2秒检测一次
}vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51      # 与Master一致priority 100              # 低于Masteradvert_int 1nopreemptauthentication {auth_type PASSauth_pass 123456}# 绑定检测脚本track_script {check_nginx}virtual_ipaddress {192.168.148.170/24}track_interface {ens160}
}
# 配置检测脚本
vim /etc/keepalived/check_nginx.sh
#脚本内容示例 检测nginx状态,如果nginx断开,则停止keepaliverd 虚拟ip转移另一台机器上
#!/bin/bash
nginx_num_check=`ps -C nginx --no-header | wc -l`
if [ $nginx_num_check -eq 0 ]; thensystemctl stop keepalived
fi
# 赋予脚本执行权限
chmod +x /etc/keepalived/check_nginx.sh
  1. 配置nginx实现负载均衡(保留原有配置,仅补充Discuz业务转发规则)
# 编辑nginx配置文件
vim /etc/nginx/nginx.conf
# 原upstream配置完全保留,无需修改(所有业务共用后端web池)
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream web_server {server 192.168.148.164:80 max_fails=3 fail_timeout=10;server 192.168.148.165:80 max_fails=3 fail_timeout=10;}include      /etc/nginx/conf.d/*.conf;
}
# 在conf.d目录下新增Discuz负载均衡配置(原有kod.conf、phpmyadmin.conf完全保留)
vim /etc/nginx/conf.d/discuz.conf
# 配置内容示例(适配Discuz HTTPS需求)
server {listen       80;server_name  discuz.fsj.com;return   302    https://discuz.fsj.com$request_uri;
}server {listen 443 ssl;server_name discuz.fsj.com;# 复用现有证书或单独申请ssl_certificate /nginx/fsj.crt;ssl_certificate_key /nginx/fsj.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {proxy_pass http://web_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;}
}
  1. 启动keepalived和nginx服务。
systemctl start keepalived nginx
systemctl enable keepalived nginx

步骤2:存储层部署(nfs服务器:nfs服务端)

nfs安装nfs服务端,配置共享目录并设置权限。

  1. 安装nfs服务端。
yum install nfs-utils -y
  1. 配置共享目录并设置权限
# 创建共享目录
mkdir -p /data/html/kod
mkdir -p /data/html/myadmin
mkdir -p /data/html/discuz
# 编辑exports文件配置共享目录
vim /etc/exports
# 配置内容示例(原有配置不变)
/data  192.168.148.0/24(rw,sync,no_root_squash,no_all_squash)
  1. 启动nfs服务
systemctl start rpcbind.service
systemctl start nfs-server.service
systemctl enable rpcbind.service nfs-server.service

步骤3:应用层部署(web01、web02:nginx+php+nfs客户端)

web01和web02安装nginx、php和nfs客户端,配置nginx实现反向代理,配置php连接mysql数据库,配置nfs客户端挂载nfs服务器的共享目录,配置php-redis扩展安装和Redis缓存配置。

  1. 安装依赖
yum install nginx php-fpm php-cli php-xml php-gd php-mbstring.x86_64 php-mysqlnd.x86_64 php-pecl-zip.x86_64 php-process.x86_64 php-cli php-devel -y
yum install nfs-utils -y
  1. 挂载nfs共享目录(新增discuz挂载点,原有挂载保留)。
# 创建挂载点
mkdir -p /nginx/html/kod
mkdir -p /nginx/html/myadmin
mkdir -p /nginx/html/discuz
# 开启服务
systemctl start rpcbind.service# 开启自动挂载
vim /etc/fstab 
192.168.148.166:/data/html                 /nginx/html              nfs     defaults        0 0# 开机自启
mount -a
  1. 创建网站nginx配置文件
# 新增discuz配置文件,kod和phpmyadmin 改个名就行
vim /etc/nginx/conf.d/discuz.conf
server {listen       80;server_name  discuz.fsj.com;root   /nginx/html/discuz ;index  index.php index.html index.htm;location / {}location ~ \.php$ {fastcgi_pass   unix:/run/php-fpm/www.sock;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;# 强制设置HTTPS为on,不用个别php代码会走http协议造成网页裸奔fastcgi_param HTTPS on;include        fastcgi_params;}
}
  1. 部署业务程序
# 部署Discuz
cd /nginx/html/discuz
# 下载Discuz安装包(或从本地上传)
wget https://gitee.com/Discuz/DiscuzX/repository/archive/master.zip
unzip master.zip
mv DiscuzX-master/upload/* .
rm -rf master.zip DiscuzX-master
# 设置权限
chown -R nginx:nginx /nginx/html/discuz
  1. 安装php-redis扩展
# 下载redis扩展包,当前php无法支持yum自动安装,需要手动编译安装
cd /usr/local/src/
wget https://pecl.php.net/get/redis-6.2.0.tgz
tar -xf redis-6.2.0.tgz
cd redis-6.2.0/
# 检查php编译环境
phpize
# 生成编译配置
./configure --with-php-config=/usr/bin/php-config
# 编译安装
make && make install
# 配置redis扩展
cp /etc/php.d/20-mbstring.ini /etc/php.d/20-redis.inivim /etc/php.d/20-redis.ini 
# 修改为以下内容
; Enable redis extension module
extension=redis
  1. 配置php使用redis存储session(新增内容,来自redis.md)。
vim /etc/php-fpm.d/www.conf
# 注释原有session配置,新增redis配置(redis无密码场景)
php_value[session.save_handler] = redis
php_value[session.save_path]    = "tcp://192.168.148.171:6379"
  1. 重启服务生效。
systemctl restart php-fpm nginx
systemctl enable php-fpm nginx

步骤4:数据层部署(mysql服务端 + Redis服务端)

4.1 关系型数据库:mysql服务端部署

  1. 安装mysql服务端。
yum install mysql-server mysql -y
  1. 初始化mysql数据库并启动服务。
# 初始化mysql数据库
mysql_secure_installation
# 启动mysql服务
systemctl start mysqld
systemctl enable mysqld
  1. 创建数据库和用户,并授权给web01和web02
# 登录mysql
mysql -uroot -p
# 创建discuz专用数据库和用户 phpmyadmin 类似
create database discuz character set utf8mb4;
create user discuz@'%' identified by '123@qq.COM';
grant all on discuz.* to discuz@'%';

4.2 缓存层:Redis服务端部署

  1. 安装redis服务端(在192.168.148.171 redis服务器上执行)。
yum install redis -y
  1. 配置redis监听地址。
vim /etc/redis/redis.conf
# 修改bind配置,监听指定地址(根据需求调整)
bind 192.168.148.171 127.0.0.1
# 如果需要密码,取消注释requirepass配置
# requirepass 123@qq.COM
  1. 启动redis服务。
systemctl start redis
systemctl enable redis
  1. 验证redis服务正常。
# 测试redis连接
redis-cli -h 192.168.148.171
192.168.148.171:6379> KEYS *
(empty array)
192.168.148.171:6379> exit

步骤5:业务配置(以discuz为例)

  1. 完成Discuz网页安装:访问https://discuz.fsj.com,按照向导安装,数据库填写192.168.148.167,用户discuz,密码123@qq.COM,完成安装。
  2. 配置Discuz使用Redis缓存:
vim /nginx/html/discuz/config/config_global.php
# 修改以下配置项,开启redis缓存
$_config['memory']['redis']['server'] = '192.168.148.171';
$_config['memory']['redis']['port'] = 6379;
  1. 重启web服务生效:
systemctl restart php-fpm nginx

四、架构对应关系说明

架构分层 对应部署步骤 组件清单
用户层 浏览器/客户端、VIP 192.168.148.170
接入层 步骤1 lb01、lb02(nginx+keepalived)
应用层 步骤3 web01、web02(nginx+php+discuz+kod+phpmyadmin)
存储层 步骤2 nfs服务器
数据层 步骤4 mysql服务端、redis服务端