上两篇博客中,我们学习了在一台服务器构建LAMP,今天开始学习在多台服务器上构建分离式LAMP。


一、构建分离式LAMP需要注意的点

在上两篇博客中也强调了构建分离式LAMP需要注意的地方,这里总结一下:

 1、动态资源(php页面)应部署在应用程序服务器上(php-fpm),静态资源部署在Web服务器上

 2、php以fpm工作方式时,它不会被编译成httpd模块,因此,编译时无须使用--with-apxs2=/PATH

参数,httpd的主配置文件中也无须再 LoadModule php7_module,把php编译为fpm工作模式时需要开启的重要的参数 --enable-fpm

 3、编译php时,需连接mysql或其他数据库管理系统时,需要启用其相关的驱动模块:--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd选项

 4、php与mysql不在同一节点,连接mysql的用户账号需要有远程访问权限。


  动态资源需要放在PHP服务器上,当httpd服务器接收到客户端浏览器请求的是动态页面内容时,

会把请求发往指定的PHP服务器上处理,但是静态页面例如:html、jpg等还是会在httpd服务器上

处理,不然图片等信息可能就无法显示,因此在部署网站时,需要把网站的资源分开部署在两边。


二、源码编译安装构建分离式LAMP

1、环境

OS:CentOS 6.5-x86_64 

已安装了常用的开发包组:

   Desktop Platform Development     # 桌面平台开发包

   Development tools            # 开发工具包

   Server Platform Development      # 服务器平台开发包


2、安装LAMP

安装Mysql

   使用node2主机上已二进制安装好的Mariadb10.2.20,可以查看之前的博客

    做好授权

安装Apache

    使用node4上已编译安装好的httpd-2.4.25

安装PHP

    使用node1上已编译安装好的php-7.1.1


3、配置

  1)配置好php-fpm并让其监听在node1可以远程访问的套接字上

  2)mysql授权允许node远程访问mysql

  3)配置httpd来组合php

ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.10.1:9000/data/htdocs/$1   # 写绝对路径

ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.10.1:9000/data/htdocs111/$1


4、测试

  在node4上创建.html的测试文件:

[root@Node4 web]# cat /web/a.com/htdocs/test.html 
10.4 a.com
[root@Node4 web]# cat /web/b.org/htdocs/test.html 
10.4 b.org

 在node1上创建.php的测试文件:

[root@Node1 php-7.1.1]# cat /data/htdocs/index.php
<?php
   $conn=mysqli_connect('192.168.10.2','root','xnxnxn');   # 注意授权问题
   if ($conn)
      echo "a.com php-fpm";
   else
      echo "Connect Faild";
   mysqli_close();
     
   phpinfo();
?>

[root@Node1 php-7.1.1]# cat /data/htdocs111/index.php
<?php
   $conn=mysqli_connect('192.168.10.2','root','xnxnxn');   # 注意授权问题
   if ($conn)
      echo "b.org php-fpm";
   else
      echo "Connect Faild";
   mysqli_close();
     
   phpinfo();
?>
[root@Node1 php-7.1.1]#


【LAMP】03、构建分离式的LAMP_Discuz【LAMP】03、构建分离式的LAMP_Discuz_02


【LAMP】03、构建分离式的LAMP_Discuz_03【LAMP】03、构建分离式的LAMP_Discuz_04  


三、安装Discuz

  安装Discuz来加深动静分离的理解

1、获取并解压Discu

   解压到php服务器上,站点页面文件存放目录:

[root@Node1 src]# unzip Discuz_X3.3_SC_UTF8.zip -d /data/htdocs111/Discuz

[root@Node1 src]# ls /data/htdocs111/Discuz
readme  upload  utility

  此时应该就可以通过httpd服务器访问到了,那如何访问呢?

     如果Apache和PHP是构建在同一台服务器上并使用同一个站点页面存放目录(或使用共享存储),通过浏览器直接访问upload目录就能开始进入Discuz安装向导;分离式的LAMP,且现在Apache服务器上并没有站点页面文件,Discuz的静态页面就无法访问到了,只能访问到动态资源:

【LAMP】03、构建分离式的LAMP_Discuz_05

   因为此次实验的目地是为了加深对“动静分离”的理解,这里就不使用共享存储,手动在Apache服务器上也复制一份站点页面文件:

[root@Node1 htdocs111]# scp -r Discuz 192.168.10.4:/web/b.org/Discuz

【LAMP】03、构建分离式的LAMP_Discuz_06

点同意进入安装环境检查:

【LAMP】03、构建分离式的LAMP_Discuz_07

  提示没有写权限,那到底是提示哪个用户没有写权限,不能粗暴的把权限改为777就好了,这里应该是运行php进程的用户需要对站点页面的写权限:

[root@Node1 Discuz]# ps aux|grep php-fpm
root     14244  0.0  0.9 109840  4496 ?        Ss   05:20   0:01 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)                                                                    
nobody   14245  0.0  1.6 109904  8204 ?        S    05:20   0:00 php-fpm: pool www                                                                                                            
nobody   14246  0.0  1.6 109904  8204 ?        S    05:20   0:00 php-fpm: pool www                                                                                                            
nobody   14247  0.0  1.5 109904  7596 ?        S    05:20   0:00 php-fpm: pool www                                                                                                            
nobody   14248  0.0  1.5 109904  7596 ?        S    05:20   0:00 php-fpm: pool www                                                                                                            
nobody   14249  0.0  1.6 109904  8212 ?        S    05:20   0:00 php-fpm: pool www                                                                                                            
root     18450  0.0  0.1 103244   852 pts/0    S+   15:39   0:00 grep php-fpm


[root@Node1 Discuz]# chown -R nobody .

  再刷新一下页面就可以了,再下一步;

创建数据库:

【LAMP】03、构建分离式的LAMP_Discuz_08

这里需要先在数据库服务器上创建库并授权再点下一步:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> 
MariaDB [(none)]> 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> create database discuz;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| discuz             |
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> grant all privileges on discuz.* to 'dzuser'@'192.168.10.%' identified by 'dzpass';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user,host,password from mysql.user;
+--------+--------------+-------------------------------------------+
| user   | host         | password                                  |
+--------+--------------+-------------------------------------------+
| root   | localhost    | *437F1809645E0A92DAB553503D2FE21DB91270FD |
| root   | 127.0.0.1    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root   | ::1          | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
| root   | 192.168.10.2 | *B7E7B0F26E70BBDAB77F672123EB1838F7876B9C |
| root   | 192.168.10.1 | *B7E7B0F26E70BBDAB77F672123EB1838F7876B9C |
| xj     | %            | *CBF0C074DC0D8662CBCA8DE689103A6B6320D96F |
| dzuser | 192.168.10.% | *02BDFE827D4075DE3993BB6123D4A3665B72DDDA |
+--------+--------------+-------------------------------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]>

   点一下不,安装完成,访问论坛:

【LAMP】03、构建分离式的LAMP_Discuz_09

  这里为什么又显示异常呢?

    之前的安装信息没有同步到Apache服务器上

把同步一下php服务器上的信息同步到Apache服务器上:

[root@Node1 htdocs111]# scp -rq Discuz/ 192.168.10.4:/web/b.org/htdocs

   再次访问就OK了:

【LAMP】03、构建分离式的LAMP_Discuz_10

不管做了什么操作都要在Apache和PHP服务器之间同步比较麻烦,可以使用共享存储。