一、前导原理
浏览器在访问网页时,会发起静态请求,之后请求会转发到Nginx服务器,最终将静态数据响应给用户浏览器,但如果接收的是动态请求,会通过后端tomcta或者php-fpm服务,进行动态数据请求的处理,两者之间采用的协议是fastcgi协议,如果此时还有动态数据变化的话,那么就必须接触到数据持久层的业务了,这里与数据库打交道的话,通常会接触到数据库驱动(php-redis,php-mysqlnd)来将数据返回给后端,最终后端数据将被打到前端Nginx服务处理

二、前置环境准备
|-----------|-------------------|
| 10.0.0.5 | Nginx配置 |
| 10.0.0.6 | php-fpm、MYSQL(主机) |
| 10.0.0..7 | php-fpm、MYSQL(从机) |
三、实验操作
运行环境准备
bash
## 数据库程序的安装(前置准备yum源已完成配置)
yum -y install mysql-server mysql
## php搭建工作
yum -y install php-fpm php-mysqlnd
## Nginx安装
yum -y install nginx
mysql主从复制
若主库已经打开了二进制日志,首先需要在从库打开start slave,此时从库会自动打开I/O线程,记录二进制日志的名称和position点位情况,slave节点接受到数据之后会将二进制日志数据和更新的position位置更新到slave的relay_log日志的末端,当slave节点i/o线程检测到数据库文件信息发生更改之后,relay_log在master中接收到的数据会在slave数据中进行同步

bash
## 确定主库增加log-bin日志和server信息
vim /etc/my.cnf.d/mysql-server.cnf
## 加入主库配置信息
server-id=6
log-bin=mysql-bin
## 加入从库配置信息
server-id=7
## 重启mysql服务
systemctl start mysqld
配置主节点
CHANGE MASTER TO
MASTER_HOST='10.0.0.6',
MASTER_USER='jfedu',
MASTER_PASSWORD='aaaAAA111.',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=899;

修改Nginx配置文件
bash
## 修改配置文件信息
vim /etc/nginx/nginx.conf.default
## 用模板配置文件覆盖原配置文件
cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
## 测试是否报错
nginx -t
##启动服务
systemctl start nginx.service
systemctl start php-fpm
## 检查端口是否暂用服务
netstat -tnlp | grep 9000
##在php-fpm端添加一个配置文件
cat info.php
<?php
phpinfo();
?>
nginx.conf配置文件需要修改的地方

完成了初步的搭建

【注意】目前在php目录和nginx的html目录下有相同的配置文件,作用上使用的是不同情况下的动静分离效果
如果要使用php文件,就要放到后端php-fpm中,并且php配置文件信息的修改也要进行修改(两处地方都要进行修改)
vim /etc/php-fpm.d/www.conf;!sys;


当浏览器访问出现了如下页面即完成了LNMP的搭建

【注意】:其实html的公用路径也可以通过/usr/share/nginx/html也可以放在nfs机器上统一实现版本发布
具体实现步骤如下
bash
# 安装nfs安装插件
[root@localhost ~]# yum -y install nfs-utils
# 创建文件共享目录(将html源码文件放到此目录)
[root@localhost ~]# mkdir -p /data/discuz/
# 对外共享文件
vim /etc/exports
/data/discuz *(rw,sync,no_root_squash)
# 重启nfs服务
systemctl restart nfs
# 将nfs共享目录进行挂载(客户端需要安装nfs-util)
mount -t nfs 10.0.0.5:/data/discuz /usr/share/nginx/html/
完成redis部署
bash
## 下载并解压PHP-redis压缩包
tar -zxvf phpredis-6.0.2.tar.gz
## 有与源码编译使用了.configure------->phpize
yum provides phpize
yum -y install php-cli
## 使用phpize还会报错--->缺乏依赖
yum -y install php php-devel
## 执行phpize
./configure --help | more
./configure --with-php-config=/usr/bin/php-config --enable-redis
## 编译
make -j4 install
## 在php.ini末尾加入以下内容(只是php与redis服务连接的接口)
extension="/usr/lib64/php/modules/redis.so"
## 重启服务
systemctl restart php-fpm
redis完成安装后的部署图

导入论坛源码文件
bash
## 准备日期文件,做好时间同步
yum -y install ntpdate
ntpdate pool.ntp.org
mkdir `date +%F`
unzip Discuz_X3.5_SC_UTF8_20231001.zip
## 将静态文件放在nginx的html目录,动态文件放在php的html目录下
## 将upload目录到html目录
\cp * /usr/share/nginx/html/ -a
scp -r /usr/share/nginx/html/upload/* 10.0.0.6:/usr/share/nginx/html/
## 文件权限操作
chown -R apache.apache config/ data/ uc_*
## 缺乏php-fpm库存
yum -y install php-xml
## 在主库中创建用户
create user jfedu@'%' identified by 'aaaAAA111.';
grant all on *.* to jfedu@'%';
flush privileges;
论坛页面信息的填写
访问进去之后出现了css资源无法访问问题

原因分析 :由于Nginx负载均衡原因,当去均衡池中去取数据时,会依据其轮询的原理来均分去取机器,这样就导致数据在另一台均衡机器不能写入,通常情况下会使用ip_hash来保持会话原则
解决方案:scp -r /usr/share/nginx/html/data/cache/* 10.0.0.5:/usr/share/nginx/html/data/cache/
注意:三台机器都要有该静态文件(主要.5设备处理静态数据)
安装完成后的效果如下:

退出后数据长时间加载不出来(data目录缺少权限)
chown -R apache /usr/share/nginx/html/data/
在nginx.conf文件中配置的均衡池中配置ip_hash,即可防止nginx设备轮询跳转。

加入之后图片就能够正常显示了

LNMP+Redis环境结合部署
- 工作原理
当用户通过浏览器输入用户名和密码访问我们的Lnmp网页时,默认情况下redis不会进行数据的缓存,而是通过php-fpm进行mysql数据的存储,但是之后再同样输入用户名和密码就直接会在redis去找键值对,然而就能更快获取数据,不会再次经过mysql了,从而就能减轻后台数据库的访问压力了
- 准备工作
关于LNMP网站中存入Redis,需要有redis服务器、redis连接驱动、配置修改操作
|-------------|----------|
| LNMP服务器 | 10.0.0.5 |
| Redis主库 | 10.0.0.7 |
| Redis从库 | 10.0.0.6 |
- 实验步骤
bash
## 由于redis.so仅仅是php与redis服务连接的端口
## 所以这里还应当安装redis服务端
## yum安装redis
[root@localhost html]# yum -y install redis
## 重启redis服务
[root@localhost html]# service redis start
## 检查redis进程
ps -ef | grep redis
## 修改redis配置文件
vim /etc/redis.conf
bind 0.0.0.0
## 配置主从库
## 从库加入配置信息(replicaof 10.0.0.6 6379),然后进行测试
redis-cli
- 修改redis.conf配置

- php-redis配置文件修改

重启redis服务
nohup /usr/bin/redis-server /etc/redis.conf &
此时redis已经能与php-fpm后端正常建立连接了

Redis主从模式搭建
【原理】:Redis进行主从复制时,当用户往master端写入数据时,会通过Redis-Sync机制往slave数据文件中发送数据,slave也会以相同的方式往数据库中存入数据,同时slave中还可以开启二级slave、三级slave从库,具体原理图如下:

修改Maste和Slaver主配置文件
bash
## 主库信息添加
bind 0.0.0.0
protected-mode no
## 从库一定要加入主库信息
replicaof 10.0.0.7 6379
