目录
注:
本篇文章解决的主要问题是将LNMP中的数据也就是MySQL分离到另一台服务器上,达到LNMP分离部署的目的。
LNMP理论基础
LNMP数据流转分析:
LNMP之间的数据流转如图所示:
第一步:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)返回浏览器。
第二步:将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。
第三步:PHP脚本通过PHP和数据库的连接,完成对数据库进行增删改查的功能,并从数据库中获取数据。
第四步:将获取到的数据返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx。
第五步:服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
Nginx+FastCGi工作流程
Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过Fast-CGI接口来调用。Fast-CGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。
wrapper:为了调用CGI程序,还需要一个Fast-CGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过Fast-CGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过Fast-CGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+Fast-CGI的整个运作过程。
Nginx架构
如上图所示:
1、Nginx启动后,会产生一个主进程(master),主进程执行一系列的工作后会产生一个或者多个工作进程;
2、在客户端请求动态站点的过程中,Nginx服务器还涉及和后端服务器的通信。Nginx将接收到的Web请求通过代理转发到后端服务器,由后端服务器进行数据处理和组织;
3、Nginx为了提高对请求的响应效率,降低网络压力,采用了缓存机制,将历史应答数据缓存到本地。保障对缓存文件的快速访问;
Nginx和Apache异同
上图是截止到20180426官方发布的WebServer的市场占有率。一个明显的趋势就是Apache的市场占有率逐年下降,Nginx逐年上涨,说明,Nginx在某些方面是要远远强于Apache的。Nginx和Apache主要的区别有以下几点。
- 核心区别在于Apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程。在大部分场景中,Nginx的epoll模型性能要高于Apache的select模型。
- Nginx 处理请求是异步非阻塞的,而Apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 。
- 同样提供web 服务,Nginx比Apache 占用更少的内存及资源。
- Nginx除了能够提供Web服务以外,还能提供反向代理功能,在一定程度上实现负载均衡。
LNMP部署
实验环境:
- 两台新装的CentOs7,配置好Yum源,使用桥接连上网络。
- 小米源码包
给两台机器都配好yum源,https://opsx.alibaba.com/mirror,阿里云里面有无脑部署教程。配置好yum源和epep源即可。
考虑到某些同学自己不好找代码,我就把源代码分享了,以供大家学习之用。
源代码传送门
网络规划:一台IP为172.25.0.31/16的作为web服务器,上面搭建nginx和php-fpm等模块,主要提供web服务,起名web1。
一台IP为172.25.0.41/16的作为数据库服务器,在其上面主要运行数据库。对该数据库服务器起名mysql1。
注:
大家可以按照自己的需求规划这两台主机的IP地址,保证其能够上网,并且这两台机器在同一个网段就可以了。
实验过程:
Nginx的部署:
1、安装相关软件
[root@web1 /etc/yum.repos.d]# yum -y install php php-mysql php-fpm nginx
2、将php-fpm、nginx等服务开启,并设置为开机自启动。
3、创建/data/web目录,这个目录以后用作web服务的chroot.
4、配置nginx的配置文件。
[root@web1 /data/web]# vim /etc/nginx/nginx.conf
第一步:修改家目录为/data/web
第二步:修改nginx和fastcgi的连接配置,如下图所示
第三步:优化相关小配置
5、配置php相关配置文件
[root@web1 /data/web]# vim /etc/php.ini
注:
打开short_open_tag 如下
修改php-fpm配置文件,更改用户名
[root@web1 /data/web]# vim /etc/php-fpm.d/www.conf
将原本的apache用户改为nginx用户
5、重启相关服务
数据库的部署:
1、安装mariadb软件
[root@mysql1 ~]# yum -y install mariadb-server
2、创建用户root:
MariaDB [mysql]> create user root identified by 'centos';
3、创建数据库xiaomi.
MariaDB [mysql]> create databases xiaomi;
3、给添加的用户赋予权限:
MariaDB [(none)]> grant all on xiaomi.* to root@'%' identified by 'centos';
数据库和nginx连接
1、上传源代码至/data/web目录下,解压,如图:
2、修改php和数据库的连接文件
[root@web1 /data/web]# vim /data/web/data/config.php
修改如下:
3、还原数据库
浏览器上输入 172.25.0.31/eabk/index.php,弹出如下界面:
username:admin
passwd: 123456
4、数据还原
在参数设置页面中,填写自己的数据库服务器地址、部署数据库时远程授权的用户名和密码以及提供的数据库
5、还原数据
首先你需要修改/data/web中的所属人和所属组,都修改为nginx,然后进入数据恢复界面。如图
选择将database数据库恢复到xiaomi数据库即可。
实验结果:
当你在浏览器中输入172.25.0.31时,浏览器弹出这样的界面就说明你部署成功了。