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 Server

    Copyright (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 -h
    xxx
    xxxx
    xxxx

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

vb 复制代码
`#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-json

2.同步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 www

vim /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 zh


4.启动nfs
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enalble nfs


5.客户端测试
#安装软件但是不启动
[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🍟🍟🍟
  • 正向代理、反向代理🍟🍟🍟
  • 负载均衡基础🍟🍟🍟🍟🍟
相关推荐
一只栖枝2 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
wuicer5 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
玩转以太网6 小时前
基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
服务器·网络协议·http
cui__OaO6 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
小狗爱吃黄桃罐头6 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
画个太阳作晴天7 小时前
A12预装app
linux·服务器·前端
fengyehongWorld7 小时前
Linux crontab定时任务
linux·运维
shuangrenlong8 小时前
ubuntu更新chrome版本
linux·chrome·ubuntu
碎像8 小时前
Linux上配置环境变量
linux·运维·服务器