设为首页 收藏本站
查看: 1056|回复: 0

LAMP架构之分离式-php-fpm

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-7 08:26:48 | 显示全部楼层 |阅读模式
一、LAMP架构之分离式拓扑

wKioL1VKIweCgeCOAAqTmH2wcT4425.jpg

二、架构说明


  当客户端访问Web服务器时,Web服务器根据客户端访问的资源进行判断,如果是静态的页面Web服务器就直接返回给给客户端,如果是动态的页面,Web服务器就请求PHP服务器进行解析,在解析过程有需要MySQL数据的PHP服务器就请求MySQL服务器,PHP服务器解析完后封装发送给Web服务器,Webt器在封装发送给客户端。

三、架构规划


主机
网卡1
网卡2
备注
客户端
172.16.9.6
-
-
Web服务器
172.16.9.21
10.0.9.21
提供Web服务
PHP服务器
10.0.9.31
10.0.9.41
提供PHP程序解析
MySQL服务器
10.0.9.51
-
提供MySQL服务

四、LAMP程序包版本
1
2
3
4
5
6
7
apr-1.5.0.tar.bz2
apr-util-1.5.3.tar.bz2
httpd-2.4.10.tar.bz2
mariadb-5.5.43-linux-x86_64.tar.gz
php-5.6.4.tar.xz
phpMyAdmin-4.0.5-all-languages.zip
Discuz_X3.2_SC_UTF8.zip




五、准备安装开发环境
1
2
3
4
yum groupinstall  "Server Platform Development"  "Development tools" -y
yum install pcre-devel -y
yum install bzip2-devel libmcrypt-devel -y
yum install libxml2-devel -y




六、Web服务器上安装httpd服务程序


1)安装httpd程序依赖apr程序包
1
2
3
4
tar xf apr-1.5.0.tar.bz2
cd apr-1.5.0
./configure --prefix=/usr/local/apr
make && make install



2)安装httpd程序依赖apr-util程序包
1
2
3
4
tar xf apr-util-1.5.3.tar.bz2
cdapr-util-1.5.3
./configure --prefix=/usr/local/apr-util--with-apr=/usr/local/apr/
make&& make install



3)安装http程序包
1
2
3
4
5
6
7
[iyunv@node-2 httpd-2.4.10]#useradd -r bbs
[iyunv@node-2 httpd-2.4.10]# ./configure--prefix=/usr/local/apache-2.4.10 \
--sysconfdir=/etc/apache24 --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ --enable-so--enable-ssl \
--enable-cgi --enable-rewrite --with-zlib --with-pcre--enable-modules=most \
--enable-mpms-shared=all --with-mpm=prefork  --user=bbs
[iyunv@node-2 httpd-2.4.10]# make &&make install



4)创建apahce软链接
1
2
3
[iyunv@node-2 ~]# ln -s/usr/local/apache-2.4.10/ /usr/local/apache
[iyunv@node-2 ~]# ll /usr/local/apache
lrwxrwxrwx 1 root root 25 May  3 11:27 /usr/local/apache ->/usr/local/apache-2.4.10/



5)提供服务脚本/etc/rc.d/init.d/httpd
修改httpd的配置文件中指定pid文件存放路径
1
   PidFile"/var/run/httpd.pid"



服务脚本通过复制系统原有的httpd服务脚本,在此基础上进行简单的修改,修改的内容如下:
1
2
3
[iyunv@node-2 ~]# cp/etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
    apachectl=/usr/local/apache/bin/apachectl
    httpd=${HTTPD-/usr/local/apache/bin/httpd}



添加到开机自启动服务中:
1
2
[iyunv@node-2 ~]# chkconfig --add httpd24
[iyunv@node-2 ~]# chkconfig httpd24 on



6)设置httpd环境变量
1
2
3
[iyunv@node-2 httpd-2.4.10]# vim/etc/profile.d/httpd.sh
         PATH=/usr/local/apache/bin/:$PATH
[iyunv@node-2 httpd-2.4.10]# ./etc/profile.d/httpd.sh



7)启用http的相关php-fpm模块/etc/apache24/httpd.conf
在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
1
2
LoadModule proxy_modulemodules/mod_proxy.so
LoadModule proxy_fcgi_modulemodules/mod_proxy_fcgi.so



9)启用http对php的支持/etc/apache24/httpd.conf  
1
2
3
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html



10)提供httpd虚拟机为www.blog.com和www.phpmysql.com
修改/etc/apache24/httpd.conf的配置文件,开启虚拟文件:
1
2
#DocumentRoot "/usr/local/apache-2.4.10/htdocs"
Include/etc/apache24/extra/httpd-vhosts.conf



在编辑/etc/apache24/extra/httpd-vhost.conf文件,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<VirtualHost *:80>
   ServerAdmin admin@bbs.com
   DocumentRoot "/web/discuz"
   ServerName www.bbs.com
   ServerAlias bbs.com
   ErrorLog "logs/bbs.com-error_log"
   CustomLog "logs/bbs.com-access_log" combined
   ProxyRequests Off
   ProxyPassMatch ^/(.*\.php)$ fcgi://10.0.9.31:9000/web/discuz/$1
   <Directory "/web/discuz">
     AllowOverride None
     Options None
      Require all granted
  </Directory>
</VirtualHost>
  
<VirtualHost *:80>
   ServerAdmin admin@phpmysql.com
   DocumentRoot "/web/pma"
   ServerName www.phpmysql.com
   ServerAlias phpmysql.com
   ErrorLog "logs/phpmysql.com-error_log"
   CustomLog "logs/phpmysql.com-access_log" combined
   ProxyRequests Off
   ProxyPassMatch ^/(.*\.php)$ fcgi://10.0.9.31:9000/web/pma/$1
   <Directory "/web/pma">
     AllowOverride None
     Options None
     Require all granted
   </Directory>
</VirtualHost>



11)启用httpd服务
service httpd24 start

七、MySQL服务器上安装MariaDb数据库


1)创建MariaDB运行的用户
1
2
[iyunv@mysql ~]# groupadd -r mysql
[iyunv@mysql ~]# useradd -r -g mysql mysql



2)创建数据库存放目录并设置属主、属组
1
2
[iyunv@mysql ~]# mkdir /data/mysql -p
[iyunv@mysql ~]# chown -R  mysql.mysql /data/mysql/



3)解压MariaDB程序包到/usr/local目录下
1
[iyunv@mysql tools]# tar xfmariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/



4)创建软链接
1
2
[iyunv@ mysql tools]# cd /usr/local/
[iyunv@ mysql local]# ln -smariadb-5.5.43-linux-x86_64/ mysql



5)初始化数据库
1
2
3
[iyunv@ mysql local]# cd mysql
[iyunv@ mysql mysql]# chown -R  root.mysql ./*
[iyunv@ mysql mysql]#scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql



6)提供MySQL的主配置文件
1
2
[iyunv@ mysql mysql]# mkdir /etc/mysql
[iyunv@ mysql mysql]# cpsupport-files/my-large.cnf /etc/mysql/my.cnf



7)编辑/etc/mysql/my.cnf配置文件

在/etc/mysql/my.cnf配置文件中在[mysqld]标签中添加数据库存放目录。
1
datadir = /data/mysql



8)为MySQL提供服务脚本
1
2
3
4
[iyunv@ mysql mysql]# cpsupport-files/mysql.server /etc/rc.d/init.d/mysqld
[iyunv@ mysql mysql]# chmod +x/etc/rc.d/init.d/mysqld
[iyunv@ mysql mysql]# chkconfig --add mysqld
[iyunv@ mysql mysql]# chkconfig mysqld on



9)设置mysql命令的环境变量
1
2
3
[iyunv@ mysql mysql]# vim/etc/profile.d/mysql.sh
    PATH=/usr/local/mysql/bin:$PATH
[iyunv@ mysql mysql]# ./etc/profile.d/mysql.sh



10)设置mysql命令的man帮助手册
在/etc/man.cnf中添加如下一行
1
   MANPATH/usr/local/mysql/man



11)导出mysql头文件至/usr/include
1
[iyunv@ mysql mysql]# ln -s/usr/local/mysql/include/mysql/ /usr/include/



12)输出MySQL库文件
1
2
[iyunv@ mysql mysql]# echo '/usr/local/mysql/lib'> /etc/ld.so.conf.d/mysql.conf
[iyunv@ mysql mysql]# ldconfig



12)添加用于BBS的数据库和设置管理MySQL的用户名和密码
1
2
3
4
5
6
7
8
MariaDB [(none)]> CREATE DATABASE bbs;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON bbs.* TO'userbbs'@'10.%.%.%' IDENTIFIED BY 'bbspass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON *.* TO'root'@'10.%.%.%' IDENTIFIED BY 'bbspass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)



八、PHP服务器上安装PHP程序


创建php的运行用户bbs
1
useradd -r bbs



1)编译安装php
1
2
3
4
5
6
7
8
tar xf php-5.6.4.tar.xz
cd php-5.6.4
./configure--prefix=/usr/local/php5.6.4 --with-openssl \
--enable-mbstring --with-freetype-dir --with-jpeg-dir--with-png-dir \
--with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets \
--enable-fpm --with-mcrypt  --with-config-file-path=/etc/php \
--with-config-file-scan-dir=/etc/php/php.d --with-bz2  --user=bbs
make && make install



2)为/usr/local/php-5.6.4创建软链接
1
2
3
[iyunv@node-3 php-5.6.4]# ln -s/usr/local/php5.6.4/ /usr/local/php
[iyunv@node-3 php-5.6.4]# ll /usr/local/php
lrwxrwxrwx 1 root root 20 May  3 18:42 /usr/local/php ->/usr/local/php5.6.4/



3)为PHP提供配置文件
1
2
[iyunv@node-3 php-5.6.4]# mkdir -p/etc/php/php.d/
[iyunv@node-3 php-5.6.4]# cpphp.ini-development /etc/php/php.ini



4)配置php-fpm
1
2
3
4
[iyunv@node-3 php-5.6.4]# cpsapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[iyunv@node-3 php-5.6.4]# chmod +x/etc/rc.d/init.d/php-fpm
[iyunv@node-3 php-5.6.4]# chkconfig --addphp-fpm
[iyunv@node-3 php-5.6.4]# chkconfig php-fpmon



5)为php-fpm提供配置文件
1
[iyunv@node-3 php-5.6.4]# cp /usr/local/php5.6.4/etc/php-fpm.conf.default  /usr/local/php5.6.4/etc/php-fpm.conf



6)编辑php-fpm配置文件/etc/local/php/etc/php-fpm.conf
1
2
3
4
5
6
pid = /usr/local/php/var/run/php-fpm.pid
listen = 10.0.9.31:9000
pm.max_children = 60
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8



6)启动php-fpm
1
2
[iyunv@node-3 pma]# service php-fpm start
Starting php-fpm  done




九、安装和配置phpMyAdmin程序



1)分别在Web服务器上和PHP服务器解压PHPMyAdmin程序
  在解压完之后,把PHPMyAdmin复制至/web/pma目录中,如果你看懂PHPMyAdmin的程序是可以把动态的面面放PHP服务器,静态的页面放在Web服务器的,这样可以实现动静的分离。
1
2
3
# mkdir /web/
# unzip phpMyAdmin-4.0.5-all-languages.zip
# mv phpMyAdmin-4.0.5-all-languages/web/pma



2)修复PHP服务器中的PHPMyAdmin的数据库连接文件
1
2
3
# cd /web/pma
# cp config.sample.inc.php config.inc.php
# vim config.inc.php



将$cfg['Servers'][$i]['host']= 'localhost';更改为:
1
$cfg['Servers'][$i]['host'] = '10.0.9.51';



3)编辑本地电脑上hosts文件
编辑本地电脑上hosts文件,以实现解析域名的目的,内容如下:
1
2
172.16.9.21 www.bbs.com
172.16.9.21 www.phpmysql.com



4)在浏览器访问
在浏览器访问www.phpmysql.com,出现登录界面,根据在数据库的授权登录数据库,登录后就可以轻松的管理MySQL数据库了,登录后的效果如图:
wKioL1VKI7HyjC6cAA4nWL0sN9w188.jpg

十、安装和配置Discuz程序


  安装Discuz程序需要在Web服务器和PHP服务器都要有程序,静态的内容的Web服务器将调用本地的文件,php页面就将交给PHP服务器来进行解析完成。
1)解压Discuz程序包
1
2
# unzip Discuz_X3.2_SC_UTF8.zip
# mv upload/ /web/discuz



2)更改Discuz文件的属主和属组
1
[iyunv@http discuz]# chown -R  bbs.bbs ./*



2)安装Discuz程序
安装Discuz时很简单,因为前面已经把文件的属主和属组已经更改了,进行对相应的目录和文件都有写的权限,只需要要同意、下一步、全新安装、填写相应的数据库名等,填写数据库内容如图:
wKiom1VKImrRLUOtAAvOPMol8b8963.jpg
3)访问www.bbs.com
wKiom1VKIrbD9fLSAA318NN_3wM052.jpg

十一、安装Discuz问题集


1)打开网页缺少CSS样式
  在安装之后,发出打开Discuz页面缺少CSS样式,后来经过分析,Discuz在安装时把所有内容都安装在PHP服务器了,而Web服务器没有相应的文件,而生成的文件都是静态的文件,所以Web服务器找不到相应的文件,效果如下:
wKiom1VKIunBU1M3AAw5SO8ZveI570.jpg

通过调用Google Chrome浏览器的调试功能F12,发现页面找不到相应的文件,把PHP服务器相应的文件复制过来就可以解决问题了。

wKioL1VKJJHRUwxqAAtCQI0reYQ907.jpg

解决过程
在PHP服务器打包cache目录中的文件
1
2
3
4
5
[iyunv@php discuz]# cd data/
[iyunv@php data]# tar jcf cache.tar.gzcache/
[iyunv@php data]# scp cache.tar.gz172.16.9.21:/web/discuz/data/
root@172.16.9.21's password:
cache.tar.gz                    100%  32KB  32.3KB/s   00:00



在Web服务器中解压cache目录
1
2
3
[iyunv@http discuz]# cd data/
[iyunv@http data]# rm -fr cache
[iyunv@http data]# tar xf cache.tar.gz




2)网页页面加载慢
  在实验环境中,客户端在没有与互联网连网时,只有内网的环境中,就会出现网页页面加载很慢,但在有外网的环境网页页面加载就会很快,后来经过使用HttpWatch的分析,页面在加载时会使用互联网上指定的链接;在没有外网是就是出现加载页面慢的情况。
wKioL1VKJLbi7Sn9AAvGAPlReIk271.jpg

小结:
此架构是有一种的缺点:
   1)Web服务器文件缺少;安装时有些文件被安装在PHP服务器而调用去要使用Web服务器上的文件;
   2)用户上传文件无法显示;用户上传文件时被放置于PHP服务器,显示去查找的Web服务器上的文件;
改进方法:
   1)Web服务器与PHP服务器站点文件目录同步使用,如rsync+inotify;
   2)使用共享存储,如NFS;
   3) 对程序进行二次开发

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-64402-1-1.html 上篇帖子: 安装配置LAMP 下篇帖子: 基于编译安装LAMP架构---模块化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表