本文旨在实现lamp服务分离实验,即httpd一台机器,php一台机器,mysql一台机器,并且提供wordpress程序和phpMyAdmin程序,为php提供xcache加速。


前言


1.实验需求

2.实验软件

3.服务器规划

4.目录规划

5.实验拓扑

6.部署apache服务

7.部署mariadb服务

8.部署php-fpm服务

9.部署wordpres程序

10.部署phpMyadmin程序

11.压力测试


1.实验需求


1CentOS 7, amp + xcache,编译安装,php-fpm

2)分别安装:httpd, php, mariadb分别部署在一个单独的主机上,以及都在同一主机;

3)一个虚拟主机提供phpMyAdmin,另一个虚拟主机提供wordpress

4)为phpMyAdmim提供https服务;


2.实验软件


httpd-2.4.6.tar.bz2

mariadb-5.5.46-linux-x86_64.tar.gz

php-5.5.30.tar.gz

phpMyAdmin-4.4.14.1-all-languages.zip

wordpress-4.3.1-zh_CN.zip

xcache-3.2.0.tar.bz2


3.服务器规划



系统版本 主机名 运行服务 IP地址
centos7.2 x86_64 web httpd2.4静态资源

10.0.0.51/24

172.16.52.51/16

centos7.2 x86_64 php php-fpm动态资源 172.16.52.52/16
centos7.2 x86_64 db mysqld 172.16.52.53/16


4.目录规划


目录名称 目录用途
/server/scripts 脚本存放目录
/tools 软件包存放目录
/data/soft 软件安装目录
/data/mydata 数据库数据目录
/data/vhosts web站点目录


5.实验拓扑


LAMP组合之服务分离部署_第1张图片


6.部署apache服务


6.1 解决httpd2.4 依赖关系

[root@web ~]# yum -y install apr-develapr-util-devel

 

6.2 编译httpd2.4

[root@web soft]# tar xf httpd-2.4.6.tar.bz2
[root@web soft]# cd httpd-2.4.6/
[root@web httpd-2.4.6]# ./configure--prefix=/data/soft/apache2.4.6 --sysconfdir=/etc/httpd24 --enable-so--enable-ssl --enable-cgi --enable-rewrite --enable-modules=most--enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib--with-apr=/usr --with-apr-util=/usr
[root@web httpd-2.4.6]# make -j 4  #多线程编译
[root@web httpd-2.4.6]# make install
 
[root@web soft]# ln -sv apache2.4.6 apache

 

6.3 创建apache用户

[root@web soft]# useradd -s /sbin/nologin -M apache

  

6.4 启动apache服务

修改PATH变量:
[root@web apache]# cat  /etc/profile.d/httpd.sh
export PATH=/data/soft/apache/bin:$PATH
 
[root@web httpd24]# apachectl -t
Syntax OK
[root@web httpd24]# apachectl start
 
访问测试:
[root@web httpd24]# curl 172.16.52.51

Itworks!


6.5 配置虚拟主机

(1) 修改httpd.conf 文件

User apache
Group apache
Include conf/extra/httpd-vhosts.conf 开启


(2) 配置虚拟主机文件http-vhosts.conf


    DocumentRoot"/data/vhosts/blog"
   ServerName blog.magedu.com
    ErrorLog"logs/blog/error_log"
    CustomLog"logs/blog/access_log" common
         
         OptionsNone
         AllowOverrideNone
         Requireall granted
         

 

   DocumentRoot "/data/vhosts/phpmyadmin"
         ServerNamepma.magedu.com
    ErrorLog"logs/pma/error_log"
    CustomLog"logs/pma/access_log" common
         
    OptionsNone
   AllowOverride None
    Require allgranted
   

测试:

[root@web apache]# curl blog.magedu.com
blog sit
[root@web apache]# curl pma.magedu.com
phpMyAdmin sit


7.部署mariadb服务


采用mysql 二进制安装方式


7.1创建mysql用户和组

# groupadd -g 306 mysql
# useradd -u 306 -g mysql -s /sbin/nologin -M mysql


7.2 解压mariadb-5.5.46-linux-x86_64.tar.gz


# tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C/data/soft/
 
[root@db soft]# ln -sv mariadb-5.5.46-linux-x86_64/mariadb
‘mariadb’ -> ‘mariadb-5.5.46-linux-x86_64/’


7.3 创建mysql数据目录并授权

mkdir /data/mydata -p
chown -R mysql.mysql /data/mydata



7.4 初始化数据库文件

[root@db soft]# chown -R root.mysql/data/soft/mariadb/

[root@db soft]# cd /data/soft/mariadb

 

[root@db mariadb]# scripts/mysql_install_db--user=mysql --datadir=/data/mydata/ --basedir=/data/soft/mariadb

 

7.5 配置mariadb主配置文件my.cnf

复制/data/soft/mariadb/support-files目录下的my-large.cnf文件到/etc/ 目录下,覆盖原有的mysql配置文件 my.cnf(注意:覆盖前需自己手动备份):

# cp support-files/my-large.cnf /etc/my.cnf


修改/etc/my.cnf文件,指定datadirbasedir路径,同时开启3306端口

[mysqld]
port = 3306
basedir = /data/soft/mariadb
datadir = /data/mydata
innodb_file_per_table = 1 #让innodb表每个表一个表空间文件。


7.6 复制mysql启动脚本到/etc/init.d/mysqld

# cp /data/soft/mariadb/support-files/mysql.server/etc/init.d/mysqld
# chmod 755 /etc/init.d/mysqld


7.7 修改PATH环境变量

[root@db mariadb]# cat /etc/profile.d/mysql.sh
export mysql_home=/data/soft/mariadb
export PATH=$mysql_home/bin:$PATH

 

7.8 启动mysql服务

[root@db mariadb]# chkconfig --add mysqld
[root@db mariadb]# chkconfig mysqld on
[root@db mariadb]# service mysqld start
Starting MySQL... SUCCESS!


8.部署php-fpm服务


8.1 解压mariadb二进制包

编译安装php依赖于MariaDB的文件,但是不需要对MariaDB进行任何配置,只需要解压到指定目录即可。

解压MariaDB到指定位置。

[root@php soft]# tar xfmariadb-5.5.46-linux-x86_64.tar.gz
 
[root@php soft]# ln -sv mariadb-5.5.46-linux-x86_64 mariadb


8.2 解决php依赖关系

 配置好epel

# yum install libxml2-devel gd-devel freetype-devellibmcrypt-devel openssl-devel  bzip2  bzip2-devel


8.3 编译安装php5.5

 

[root@php soft]# tar xf php-5.5.30.tar.gz
[root@php soft]# cd php-5.5.30
[root@php php-5.5.30]#
./configure --prefix=/data/soft/php-5.5.30--with-mysql=/data/soft/mariadb --with-openssl--with-mysqli=/data/soft/mariadb/bin/mysql_config --enable-mbstring--enable-xml --enable-sockets --with-freetype-dir --with-gd--with-libxml-dir=/usr --with-zlib --with-jpeg-dir --with-png-dir --with-mcrypt  --with-config-file-path=/etc/php.ini--with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-fpm
# make
# make install
[root@php soft]# ln -sv php5.5.30 php5


8.4 添加php.ini 和php-fpm文件

1)为php提供配置文件

复制php-5.5.30的解压包中的php.ini-production文件

[root@php soft]# cp/tools/php-5.5.30/php.ini-production /etc/php.ini

2)为php-fpm 提供配置文件                            

[root@php soft]# cd php5.5/etc/
[root@php etc]# cp php-fpm.conf.defaultphp-fpm.conf


8.5 配置php-fpm文件

[root@php php5.5]# vim etc/php-fpm.conf
pid = run/php-fpm.pid
listen= 172.16.52.52:9000
listen.allowed_clients= 172.16.52.51 #web服务器地址
pm.max_children = 1024
pm.start_servers = 16
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 15s
pm.max_requests = 2048


8.6 启动php-fpm服务


1)设置PATH环境变量

[root@php php5.5]# cat /etc/profile.d/php-fpm.sh
export PATH=/data/soft/php5.5/sbin/:$PATH

 

2)为php-fpm提供启动脚本

[root@php php5.5]# cp/tools/php-5.5.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@php php5.5]# chmod +x /etc/init.d/php-fpm
[root@php php5.5]# chkconfig --add php-fpm
[root@php php5.5]# chkconfig php-fpm on

 

3)启动php-fpm,查看php-fpm进程数

[root@php php5.5]# service php-fpm start
Starting php-fpm done
 
[root@php php5.5]# ps -ef |grep -c php-fpm
18


8.7 设置apache的虚拟主机连接php

1)配置apache支持fcgi

[root@web ~]# vim /etc/httpd24/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_modulemodules/mod_proxy_fcgi.so

 

2)修改虚拟主机配置,让所有php结尾的文件转发到后端的php服务器

 如下:


   DocumentRoot "/data/vhosts/blog"
   ServerName blog.magedu.com
    ErrorLog"logs/blog/error_log"
    CustomLog"logs/blog/access_log" common
         
         OptionsNone
         AllowOverrideNone
         Requireall granted
         
         ProxyRequests Off
         ProxyPassMatch ^/(.*\.php)$fcgi://172.16.52.52:9000/data/vhosts/blog/$1

 重启apache服务:

[root@web extra]# apachectl -k restart


8.8 PHP服务器创建站点目录测试php访问

(1)在172.16.52.52 /data/vhosts/blog/站点下放置test.php test.html测试访问

[root@php ~]# mkdir -p /data/vhosts/{blog,phpmyadmin}
[root@php blog]# cat test.php

LAMP组合之服务分离部署_第2张图片


LAMP组合之服务分离部署_第3张图片

找不到静态资源。

ok,达到效果。

(2)在apache站点目录下创建一个index.php文件测试

    在172.16.52.51/data/vhosts/blog/站点下放置index.php测试:

    此时web服务器会将.php请求发往php服务器查找,未找到index.php文件

 LAMP组合之服务分离部署_第4张图片


8.9测试php与数据库的连接

[root@php blog]# cat test.php

LAMP组合之服务分离部署_第5张图片


9.部署wordpress程序


注意:web服务器和php服务器上面都要部署

php服务器:

[root@php tools]# unzip wordpress-4.3.1-zh_CN.zip
[root@php tools]# mv wordpress/* /data/vhosts/blog/
[root@php blog]# cp wp-config-sample.phpwp-config.php

 配置一下wp-config.php 文件

 

 设置wordpress上传目录的属主和属组,以便客户端能够上传图片,附件啥的。

[root@web blog]# chown -R root.root/data/vhosts/blog
[root@web blog]# find /data/vhosts/blog/ -type f|xargs chmod 644
[root@web blog]# find /data/vhosts/blog/ -type d|xargs chmod 755
[root@web blog]# chown -R apache.apache/data/vhosts/blog/wp-content

  

 web服务器站点配置同上;


wordpress插入一张图片看看:

 LAMP组合之服务分离部署_第6张图片


10 部署phpMyAdmin程序


 注意:web服务器和php服务器都要部署

[root@web tools]# unzipphpMyAdmin-4.4.14.1-all-languages.zip
[root@web tools]# cpphpMyAdmin-4.4.14.1-all-languages /data/vhosts/phpmyadmin/
[root@web phpmyadmin]# ln -svphpMyAdmin-4.4.14.1-all-languages/ phpMyAdmin

 复制phpMyAdmin目录中libraries文件夹下的config.default.php文件到phpMyAdmin目录下

    1、查找$cfg['PmaAbsoluteUri'],将其值设置为http://pma.magedu.com/phpMyAdmin/

    2、查找$cfg['Servers'][$i]['host'],将其值设置为172.16.52.53

(如果Mysql在本地直接改成localhost

    3、查找$cfg['Servers'][$i]['user'] 将其值设置为root

    4、查找$cfg['Servers'][$i]['password'] 将其值设置为123456  #你的数据库的密码

    LAMP组合之服务分离部署_第7张图片


11.部署xcache



[root@php tools]# tar -xvf xcache-3.2.0.tar.bz2
[root@php tools]# cd  xcache-3.2.0
[root@php xcache-3.2.0]#/data/soft/php5.5/bin/phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
[root@php xcache-3.2.0]# ./configure--enable-xcache --with-php-config=/data/soft/ph
[root@php xcache-3.2.0]# make && makeinstall
[[email protected]]# ls /data/soft/php-5.5.30/lib/php/extensions/no-debug-non
-zts-20121212/
opcache.a opcache.so  xcache.so

 整合phpxcache,将XCache配置文件复制到php.d目录下,使php可以读取XCache配置文件

[root@php xcache-3.2.0]# mkdir /etc/php.d
[root@php xcache-3.2.0]# cp xcache.ini /etc/php.d/

 

 编辑/etc/php.d/xcache.ini文件,指定xcache.so的位置

[root@php ~]# sed -n '4p'  /etc/php.d/xcache.ini
extension =/data/soft/php-5.5.30/lib/php/extensions/no-debug-non-zts-20121212/xcache.so

 

 重载php-fpm服务;


 LAMP组合之服务分离部署_第8张图片

 ok,xcache功能已经有了。


12.压力测试


 PHP没有安装xache之前,访问http://blog.magedu.com测试的数据

 [root@web ~]# ab -c 10 -n 100http://blog.magedu.com/wp/index.php

 压测三次分别取Time taken for testsRequests per secondTime per request(client)Time  per request(server)的平均值

 

压测网站 http://blog.magedu.com/wp/index.php
压测总时长[sec] 16.051 s
吞吐率 [#/sec] 6.243 s
用户平均请求等待时间 [ms] 1604.181 ms
服务器平均请求处理时间[ms] 160.418 ms

 

 php安装xcache之后访问http://blog.magedu.com测试的数据  

 

压测网站 http://blog.magedu.com/wp/index.php
压测总时长[sec] 4.495
吞吐率 [#/sec] 20.303
用户平均请求等待时间 [ms] 495.906
服务器平均请求处理时间[ms] 49.590