本文旨在实现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.实验需求
(1)CentOS 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.实验拓扑
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.51Itworks!
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文件,指定datadir、basedir路径,同时开启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
找不到静态资源。
ok,达到效果。
(2)在apache站点目录下创建一个index.php文件测试
在172.16.52.51/data/vhosts/blog/站点下放置index.php测试:
此时web服务器会将.php请求发往php服务器查找,未找到index.php文件
8.9测试php与数据库的连接
[root@php blog]# cat test.php
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插入一张图片看看:
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 #你的数据库的密码
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
整合php和xcache,将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服务;
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 tests,Requests per second,Time 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 |