上两篇博客中,我们学习了在一台服务器构建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 [root@Node1 php-7.1.1]# cat /data/htdocs111/index.php [root@Node1 php-7.1.1]#
三、安装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/Discuzreadme upload utility
此时应该就可以通过httpd服务器访问到了,那如何访问呢?
如果Apache和PHP是构建在同一台服务器上并使用同一个站点页面存放目录(或使用共享存储),通过浏览器直接访问upload目录就能开始进入Discuz安装向导;分离式的LAMP,且现在Apache服务器上并没有站点页面文件,Discuz的静态页面就无法访问到了,只能访问到动态资源:
因为此次实验的目地是为了加深对“动静分离”的理解,这里就不使用共享存储,手动在Apache服务器上也复制一份站点页面文件:
[root@Node1 htdocs111]# scp -r Discuz 192.168.10.4:/web/b.org/Discuz
点同意进入安装环境检查:
提示没有写权限,那到底是提示哪个用户没有写权限,不能粗暴的把权限改为777就好了,这里应该是运行php进程的用户需要对站点页面的写权限:
[root@Node1 Discuz]# ps aux|grep php-fpmroot 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 .
再刷新一下页面就可以了,再下一步;
创建数据库:
这里需要先在数据库服务器上创建库并授权再点下一步:
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)]>
点一下不,安装完成,访问论坛:
这里为什么又显示异常呢?
之前的安装信息没有同步到Apache服务器上
把同步一下php服务器上的信息同步到Apache服务器上:
[root@Node1 htdocs111]# scp -rq Discuz/ 192.168.10.4:/web/b.org/htdocs
再次访问就OK了:
但不管做了什么操作都要在Apache和PHP服务器之间同步比较麻烦,可以使用共享存储。