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

day34-LNMP详解

1.每日复盘与今日内容

1.1复盘

  • LNMP结构
  • PHP部署、mariadb数据库🍟🍟🍟
  • wordpress部署、知乎部署

1.2今日内容

  • LNMP拆分
  • 扩展多台WEB服务器
  • 静态配置、动态挂载NFS🍟🍟🍟
  • 正向代理、反向代理🍟🍟🍟
  • 负载均衡基础🍟🍟🍟🍟🍟

2.LNMP架构拆分

  • 为什么?

由于单台服务器运行LNMP架构会导致网站访问缓慢,当内存被占满时,很容易导致系统出现oom从而kill掉MySQL数据库,所以要将web和数据库进行独立部署。

  • 静态数据 做缓存处理(CDN)

固定不变:一旦生成,内容不会随时间或操作改变(除非人为修改)

  • 动态数据 不能做缓存(部分)

实时变化:内容会随时间、用户交互或系统状态不断更新。

  • 数据库拆分后解决了什么问题

1.缓解web网站的压力

2.增强数据库读写性能

3.提高用户访问速度

  • 步骤拆分
第一步:创建51,安装mariadb服务
第二步:将web01上的所有库倒出
第三步:将wordpress库 zh库 数据库的用户名和密码一起导入到51服务器
第四步:将wordpress业务和zh业务中代码指向新的数据

1.创建10.0.0.51,安装mariadb服务

yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb

2.将web01上的所有库倒出

mysqldump -uroot -plzy123.com -A > all.sql
scp all.sql 10.0.0.51:~

3.将all.sql导入到51的库

#导入
[root@db01 ~]# mysql -uroot < all.sql 
#重启数据库
[root@db01 ~]# systemctl restart mariadb
#查看数据导入是否成功
[root@db01 ~]# mysql -uroot -plzy123.com -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpress          |
| zh                 |
+--------------------+
  • db01连接web01时,无法使用root登录
远程连接数据库的命令
WEB01测试和DB01的连通性
mysql -h 172.16.1.51 -uroot -plzy123.com#默认mysql禁止root远程连接
[root@web01 ~]# mysql -h 172.16.1.51 -uroot -plzy123.com
ERROR 1130 (HY000): Host '172.16.1.7' is not allowed to connect to this MariaDB server#需要创建远程连接的普通用户--在db01中添加
#授权所有权限   grant all
#授权所有库所有表 *.* 
#将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
#授权该用户登录的密码 identified by
[root@db01 ~]# mysql -uroot -plzy123.com -e "grant all on  *.* to lzy@'%' identified by 'lzy123.com';"
[root@db01 ~]# mysql -uroot -plzy123.com -e "flush privileges;"#使用lzy用户远程连接数据库测试
web01执行:
[root@web01 ~]# mysql -h 172.16.1.51 -ulzy -plzy123.com
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.3.39-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> quit	# 退出
Bye

4.修改wp数据库的指向

#1.停止WEB服务器上的mariadb
HTTP:401 用户密码验证失败
HTTP:500 无法连接数据库
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb#2.将代码中的数据库指向到51服务器
#将包含数据库信息的文件查找
[root@web01 wordpress]# grep -r 'lzy123.com' ./*
./wp-config.php:define( 'DB_PASSWORD', 'lzy123.com' );#修改配置文件
[root@web01 wordpress]# grep '^define' wp-config.php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'lzy' );
define( 'DB_PASSWORD', 'lzy123.com' );
define( 'DB_HOST', '172.16.1.51' );#测试访问www.wp.com恢复正常

  • 开发软件
软件-->测试-->运维
软件说明配置环境依赖服务配置启动方式每个配置文件说明
python test.py -hxxxxxxxxxxx

5.修改zh数据库指向

[root@web01 zh]# grep -r 'lzy123.com' ./*
./system/config/database.php:  'password' => 'lzy123.com',
[root@web01 zh]# vim ./system/config/database.php
<?php$config['charset'] = 'utf8mb4';^M
$config['prefix'] = 'aws_';^M
$config['driver'] = 'MySQLi';^M
$config['master'] = array ('charset' => 'utf8mb4','host' => '172.16.1.51',		# 修改为远程数据库主机IP'username' => 'lzy',			# 修改为远程用户'password' => 'lzy123.com','dbname' => 'zh',
);^M
$config['slave'] = false;^M#测试访问www.zh.com恢复业务

6.扩展多台相同的Web服务器

为什么要扩展多台web节点
单台web服务器能抗住的访问量是有限的,配置多台web服务器能提升更高的访问速度。
扩展多台web解决了什么问题
1.单台web节点如果故障,会导致业务down机
2.多台web节点能保证业务的持续稳定,扩展性高
3.多台web节点能有效的提升用户访问网站的速度
4.多台web节点技术架构组成,如下图所示

7.创建WEB02


#Nginx
1.配置nginx仓库
[root@web02 ~]# scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
2.通过官网仓库安装nginx
[root@web02 ~]# yum -y install nginx
3.将web01上的server全拷贝到web02
[root@web02 ~]# rsync -avz 10.0.0.7:/etc/nginx/conf.d/ /etc/nginx/conf.d/#PHP
1.安装php服务
[root@web02 ~]# yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo   php-process php-xml php-json2.同步php配置文件
[root@web02 ~]# scp 10.0.0.7:/etc/php-fpm.d/www.conf /etc/php-fpm.d/#测试nginx和php并启动
[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 -M -s /sbin/nologin wwwvim /etc/nginx/nginx.cinf
usr www;
[root@web02 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web02 ~]# php-fpm -t
[14-Aug-2025 10:24:54] NOTICE: configuration file /etc/php-fpm.conf test is successful[root@web02 ~]# systemctl start nginx php-fpm
[root@web02 ~]# systemctl enable nginx php-fpm查看是否启动成功 9000和80端口
[root@web02 ~]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      961/sshd: /usr/sbin 
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      58866/php-fpm: mast 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      58867/nginx: master 
tcp6       0      0 :::22                   :::*                    LISTEN      961/sshd: /usr/sbin 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           625/chronyd         
udp6       0      0 ::1:323                 :::*                                625/chronyd   

将web01的代码拷贝到web02
[root@web01 ~]# tar zcvf code.tar.gz /code
[root@web01 ~]# scp code.tar.gz 10.0.0.8:~#web02解压代码到/目录
[root@web02 ~]# tar xf code.tar.gz -C /#将windows hosts解析到web02
10.0.0.8 www.wp.com www.zh.com
  • 成功

8.静态文件实现一致性

拆分静态资源至独立服务器
为什么拆分静态资源至独立存储服务器
当后端的web节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台web服务器,那么其他的web服务器则无法访问到该图片。新增一台nfs存储解决了什么问题
1.保证了多台web节点静态资源一致。
2.有效节省多台web节点的存储空间。
3.统一管理静态资源,便于后期推送至CDN进行静态资源加速

windows hosts
10.0.0.8  www.wp.com
WEB02上传一张图片

windows解析一下
10.0.0.7 www.wp.com

原因:10.0.0.7服务器没有/code/wordpress/wp-content/uploads这个目录,所以图片找不到。

9.部署NFS服务

10.0.0.31服务器
1.安装nfs
yum -y install nfs-utils
2.配置nfs[root@nfs ~]# cat /etc/exports
/data/wp  172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh  172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)3.创建必要数据
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
[root@nfs ~]# ll /data/
total 0
drwxr-xr-x 2 root root 6 Aug 14 11:08 wp
drwxr-xr-x 2 root root 6 Aug 14 11:08 zh
[root@nfs ~]# chown -R www.www /data/
[root@nfs ~]# ll /data/
total 0
drwxr-xr-x 2 www www 6 Aug 14 11:08 wp
drwxr-xr-x 2 www www 6 Aug 14 11:08 zh4.启动nfs
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enalble nfs5.客户端测试
#安装软件但是不启动
[root@web01 ~]# yum -y install nfs-utils
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zh 172.16.1.0/24
/data/wp 172.16.1.0/24

10.将比较全的静态资源拷贝到31

1.WEB02最全的拷贝到31的/data/wp
[root@web02 ~]# scp -r /code/wordpress/wp-content/uploads/* 10.0.0.31:/data/wp/2.挂载NFS到web01和web02
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/wp /code/wordpress/wp-content/uploads/
[root@web02 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              459M     0  459M   0% /dev
tmpfs                 475M     0  475M   0% /dev/shm
tmpfs                 475M   13M  462M   3% /run
tmpfs                 475M     0  475M   0% /sys/fs/cgroup
/dev/sda3              48G  4.3G   44G   9% /
/dev/sda1             195M  122M   74M  63% /boot
tmpfs                  95M     0   95M   0% /run/user/0
172.16.1.31:/data/wp   48G  3.8G   45G   8% /code/wordpress/wp-content/uploads

  • 配置好后将window的hosts换到10.0.0.7查看发现可以看到

  • 但会发现没有办法上传图片--权限不够(写文章/上传)

chown -R www.www /data/wp
  • 原因是之前的/data/wp下的文件是以root写入的 www只有看的权限没有修改的权限,修改权限即可

11.代理

  • 正向代理

为用户提供服务--给用户分配公网ip等

  • 反向代理

为服务器提供服务--给用户分配服务器(一个用户一台)

  • 小试牛刀
#1.创建10.0.0.5 LB01
#2.安装并部署Nginx
yum -y install nginx
scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/#WEB01准备静态页面
[root@web01 conf.d]# cat www.oldboy.conf 
server {listen 80;server_name www.oldboy.com;location / {root /code/test;index index.html;}
}[root@web01 conf.d]# echo web01.... > /code/test/index.html
[root@web01 conf.d]# nginx -t
synginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl reload nginx#3.配置nginx反向代理
[root@lb01 conf.d]# cat lb.conf 
server {listen 80;server_name www.oldboy.com;location / {proxy_pass http://10.0.0.7;}
}
[root@lb01 conf.d]# systemctl start nginx#4.测试
windows的hosts指向10.0.0.5
10.0.0.5 www.oldboy.com

12.反向代理相关参数

proxy_set_header Host $http_host;  # 携带头部信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户真实的IP地址

参数

作用

proxy_connect_timeout 30;

定义 Nginx 与后端服务器建立 TCP 连接的最大时间。

值:30 秒(超时后返回 504 Gateway Timeout)。

场景:后端服务器网络延迟高或负载过高时,适当调大此值(如 60s)。

proxy_send_timeout 60;

定义 Nginx 向后端发送请求数据的超时时间。

值:60 秒(超时后中断连接)。

场景:客户端上传大文件或后端处理缓慢时,需增加此值。

proxy_read_timeout 60;

定义 Nginx 从后端读取响应数据的超时时间。

值:60 秒(超时后中断连接)。

场景:后端处理耗时较长(如复杂计算、长轮询)时需调高。

proxy_buffering on;

启用代理响应缓冲(默认开启)。

效果:Nginx 会先将后端返回的响应数据存入内存/磁盘缓冲区,再逐步发送给客户端。

优点:减轻后端服务器压力,优化慢客户端的传输效率。

缺点:可能增加内存占用,实时性略降低。

proxy_buffer_size 32k;

作用:设置单个缓冲区的大小,用于存储后端响应的第一部分(如响应头)。

值:32KB(默认通常为 4KB 或 8KB)。

关键点:这部分数据会直接发送给客户端,需确保足够容纳响应头(如 Set-Cookie 等)。

proxy_buffers 4 128k;

作用:设置缓冲区的数量和大小,用于存储后端响应的内容体。

值:4 个缓冲区 × 每个 128KB(总缓冲容量 = 4 × 128KB = 512KB)。

10.0.0.5配置
[root@lb01 conf.d]# cat lb.conf 
upstream webs {server 10.0.0.7;server 10.0.0.8;
}
server {listen 80;server_name www.wp.com;location / {proxy_pass http://webs;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;proxy_connect_timeout 30;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;}
}

刷新发现一会web01(10.0.0.7) web02(10.0.0.8)

3.今日总结

  • LNMP拆分
  • 扩展多台WEB服务器
  • 静态配置、动态挂载NFS🍟🍟🍟
  • 正向代理、反向代理🍟🍟🍟
  • 负载均衡基础🍟🍟🍟🍟🍟

http://www.dtcms.com/a/334432.html

相关文章:

  • 数据结构:构建 (create) 一个二叉树
  • 【图论】分层图 / 拆点
  • 算法训练营day53 图论④ 110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长
  • 树、哈夫曼树以及二叉树的各种操作
  • 【CF】Day128——杂题 (图论 + 贪心 | 集合 + 贪心 + 图论 | 二分答案 + 贪心)
  • 【完整源码+数据集+部署教程】植物病害检测系统源码和数据集:改进yolo11-RFAConv
  • ceph pools have too many placement groups
  • 0815 UDP通信协议TCP并发服务器
  • 【Java web】HTTP 协议详解
  • H20芯片与中国的科技自立:一场隐形的博弈
  • RK3568 NPU RKNN(四):RKNN-ToolKit2性能和内存评估
  • web-apache优化
  • Java Web部署
  • Python:如何在Pycharm中显示geemap地图?
  • Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
  • 开源数据发现平台:Amundsen Frontend Service React 配置 Flask 配置 Superset 预览集成
  • 教育行业破局:课程答疑智能体如何用“按次付费+算力限制”实现精准变现,可独立部署(井云智能体封装系统)
  • NLP:Transformer模型构建
  • 数字分类:机器学习经典案例解析
  • 通过rss订阅小红书,程序员将小红书同步到自己的github主页
  • MCU软件架构---RAM分区设计原则(四)
  • PyTorch生成式人工智能——使用MusicGen生成音乐
  • 二叉树的三种遍历方法
  • List容器:特性与操作使用指南
  • VS Code配置MinGW64编译GLPK(GNU Linear Programming Kit)开源库
  • 实现Android图片手势缩放功能的完整自定义View方案,结合了多种手势交互功能
  • 纸板制造制胶工艺学习记录4
  • Redis集群设计实战:从90%缓存命中率看高并发系统优化
  • Windows常见文件夹cache的作用还有其他缓存类型文件夹的作用
  • backward怎么计算的是torch.tensor(2.0, requires_grad=True)变量的梯度