分离部署lamp环境+xcache
LAMP:Linux操作系统+apache+mysql+php
FastCGI 工作机制:
首先客户端发起请求,请求分为 2 种,一种是静态请求它可以直接由 Apache 直接响应返回; 另一种是动态的请求,如其中包含中 php 或者 Perl 这种脚本解释性语言,则由 Apache 服务 器通过 fastcgi 协议调用 php 服务器执行并返回给Apache由 Apache返回解释执行后的结果, 如果这个过程中涉及到对数据的操作,此时 php 服务器还会还会通过 mysql 协议调用 mysql 服务器。
php 的工作模式:
php 在 lamp 环境下共有三种工作模式:CGI 模式、apache 模块、FastCGI 模式。CGI 模式下 运行 PHP,性能不是很好。作为 apache 的模块方式运行,在以前的课程中编译安装 lamp 已 经介绍过了。FastCGI 的方式和 apache 模块的不同点在于:FastCGI 方式 PHP 是一处独立的 进程,所有 PHP 子进程都由 PHP 的一个叫作 php-fpm 的组件负责管理;而 apache 模块化方 式运行的 PHP,则是 apache 负责调用 PHP 完成工作。PHP 的 FastCGI 方式性能要比 apache 模块化方式强很多。

编译环境及各软件版本:
分离部署lamp环境+xcache
主机规划分配:
1台httpd服务器(192.168.1.10/24)
1台php服务器(192.168.1.20/24)
1台MySQL服务器(192.168.1.30/24)
编译安装LAMP:
编译安装apache
编译安装MySQL
Fast CGI方式安装php
1、 解决php的依赖关系:
分离部署lamp环境+xcache
[root@php ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-deve

安装libmcrypt:
分离部署lamp环境+xcache
[root@php ~]# tar zxf libmcrypt-2.5.7.tar.gz -C /usr/src/
[root@php ~]# cd /usr/src/libmcrypt-2.5.7/
[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
2、 编译安装php:
[root@php ~]# tar zxf php-5.6.27.tar.gz -C /usr/src/
[root@php ~]# cd /usr/src/php-5.6.27/
分离部署lamp环境+xcache
[root@phpt php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
[root@php php-5.6.27]# make && make install
相关解释:
--prefix=/usr/local/php5.6//安装位置
--with-mysql=mysqlnd //支持 mysql
--with-pdo-mysql=mysqlnd //支持 pdo 模块
--with-mysqli=mysqlnd //支持 mysqli 模块
--with-openssl //支持 openssl 模块
--enable-fpm //支持 fpm 模式
--enable-sockets //启用 socket 支持
--enable-sysvshm //启用系统共享内存支持
--enable-mbstring //多字节字串、像我们的中文就是多字节字串
--with-freetype-dir //支持 freetype、就要装 freetype-devel、跟字体相关的、字体解析工具
--with-jpeg-dir
--with-png-dir //处理 jpeg、png 图片的、php 可以动态生成 jpeg 图片
--with-zlib //是个压缩库、在互联网传输时用来压缩传输的
--with-libxml-dir=/usr //这个 libxml 是用来解析 xml 的、指定/usr 下
--enable-xml //支持 xml 的
--with-mhash //支持 mhash
--with-mcrypt=/usr/local/libmcrypt //libmcrypt-devel //这个程序包所指定的
--with-config-file-path=/etc //指定配置文件的存放路径的
--with-config-file-scan-dir=/etc/php.d //配置文件扫描路径
--with-bz2 //支持 BZip2
--with-bz2--enable-maintainer-zts //为了支持 apache 的 worker 或 event 这两个 MPM,编译时使用了--enable-maintainer-zts 选项
如果使用 PHP5.3 以上版本,为了链接 MySQL 数据库,可以指定 mysqlnd,这样在本机就不 需要先安装 MySQL 或 MySQL 开发包了。mysqlnd 从 php 5.3 开始可用,可以编译时绑定到它 (而不用和具体的 MySQL 客户端库绑定形成依赖),但从 PHP 5.4 开始它就是默认设置了。
3、配置php文件:
在php源码包路径下操作:
分离部署lamp环境+xcache_第1张图片
[root@localhost php-5.6.27]# cp php.ini-production /etc/php.ini
[root@localhost php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chkconfig --add php-fpm
[root@localhost php-5.6.27]# chkconfig php-fpm on
[root@localhost php-5.6.27]# cd /usr/local/php5.6/etc/
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# vim php-fpm.conf
修改如下内容:
分离部署lamp环境+xcache_第2张图片
pid = run/php-fpm.pid //php的pid
listen = 0.0.0.0:9000 //监听地址,0.0.0.0代表监听所有
pm.max_children = 50 //最大启动进程数
pm.start_servers = 5 //启动时的进程个数
pm.min_spare_servers = 5 //最小空闲进程
pm.max_spare_servers = 35 //最大空闲进程
4、 启动php-fpm服务:
分离部署lamp环境+xcache

[root@localhost etc]# service php-fpm start
Starting php-fpm done
[root@localhost etc]# netstat -anput | grep 9000 //php的端口为9000
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 14920/php-fpm: mast
在该主机上新建虚拟主机目录用于存放网页问文件:

分离部署lamp环境+xcache

php已经安装配置完毕,下面配置apache通过fastcgi协议调用
5、 安装apache并配置:
安装apache所需软件包:(用脚本一键安装即可)
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
pcre-8.39.tar.gz
httpd-2.4.23.tar.gz
openssl-1.0.1u.tar.gz
zlib-1.2.8.tar.gz
配置apache:
在 Apache2.4 以后已经专门有一个模块针对 FastCGI 的实现,此模块为 mod_proxy_fcgi.so, 它其实是作为 mod_proxy.so 模块的扩充,因此,这两个模块都要加载
在主配置文件里修改以下内容:[root@apache ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
加载模块(去掉注释):
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
启用虚拟主机功能:(去掉注释)
Include conf/extra/httpd-vhosts.conf
定位到AddType,添加下面两行:让apache能够识别php格式的页面
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
同时定位到Direcorylndx:添加index.php,以支持php格式的主页
DirectoryIndex index.php index.html //添加 index.php(最好添加在最前面)
6、 配置虚拟主机支持使用fcgi:(在默认模板上进行修该即可)
分离部署lamp环境+xcache_第3张图片
[root@apache ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf
:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/pdx"
ServerName www.pdx.com
ServerAlias pdx.com
ErrorLog "logs/pdx.com-error_log"
CustomLog "logs/pdx.com-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(..php(/.)?)$ fcgi://192.168.1.20:9000/var/www/pdx/$1

Options FollowSymLinks
AllowOverride None
Require all granted


其中:
ProxyRequests off #关闭正向代理
ProxyPassMatch:把以.php结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://192.168.1.20:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。 特别注意的是,红色字体部分需要与中的 DocumentRoot后的路径一致
ProxyPassMatch
只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(.
.php(/.*)?)$ 从网站(虚拟主机的根目录开始,匹配任何以 .php 结尾,或者在 .php 之后 紧跟一个 / 再跟别的内容的路径。
^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束
( )括号里的内容可以用 $1 来表示,以方便后面引用它。
fcgi:// 192.168.1.20:9000 通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到 PHP-FPM 监听的端口。
/path/to/your/documentroot/
非常重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操作系统中的绝对路径。 否则会找不到文件
$1 可以从原始请求扩展成整个请求路径的变量,这里指代前面( ) 里面匹配的那个路径(uri)
Apache httpd 2.4 以前的版本中,要么把 PHP 作为 Apache 的模块运行,要么添加一个第 三方模块支持 PHP-FPM 实现。
创建一个目录作为虚拟主机的家目录:
分离部署lamp环境+xcache
[root@apache ~]# mkdir -p /var/www/pdx
重启apache服务:

[root@apache ~]# apachectl restart
7、 安装MySQL数据库:
用脚本一键安装即可:
分离部署lamp环境+xcache
[root@mysql ~]# sh mysql.sh
分离部署lamp环境+xcache
////说明安装成功////
8、 测试LAMP环境:
在 mysql 主机上创建用于 php 服务器连接的 mysql 账户
分离部署lamp环境+xcache
mysql> grant all on . to pdx@'%' identified by '123456';
////注意防火前墙允许mysql连接////
在 php 服务器上的/var/www/benet 目录下创建.php 的测试页:
分离部署lamp环境+xcache_第4张图片
[root@localhost ~]# cat /var/www/pdx/index.php
phpinfo();
?>
[root@localhost ~]# cat /var/www/pdx/test.php
$link=mysql_connect('192.168.1.30','pdx','123456');
if ($link)echo "connection success......";
mysql_close();
?>
访问php测试页:
分离部署lamp环境+xcache_第5张图片
分离部署lamp环境+xcache
9、 ab压力测试:
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压 情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。
性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege
ab 是 apache 自带的压力测试工具。ab 非常实用,它不仅可以对 apache 服务器进行网站访 问压力测试,也可以对或其它类型的服务器进行压力测试。比如 nginx、tomcat、IIS 等。
ab命令的使用:
1):ab的原理:
ab 是 apachebench 命令的缩写。
ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访 问。它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测 试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。
ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但 却会给目标服务器造成巨大的负载,其原理类似 CC 。自己测试使用也需要注意,否则 一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。
2)ab的安装:
ab 的安装非常简单,如果是源码安装 apache 的话,那就更简单了。apache 安装完毕后 ab 命令存放在 apache 安装目录的 bin 目录下 ///usr/local/http2.4.23/bin/ab
如果 apache 是通过 yum 的 RPM 包方式安装的话,ab 命令默认存放在/usr/bin 目录下
////可以是用which ab查找////
注意:如果不想安装 apache 但是又想使用 ab 命令的话,我们可以直接安装 apache 的工具 包 httpd-tools ///yum -y install httpd-tools
查看 ab 是否安装成功,可以切换到上述目录下,使用 ab –V 命令进行检测
分离部署lamp环境+xcache
如果出现以上错误,有两种解决办法:

  1. export LD_LIBRARY_PATH="/usr/local/openssl/lib/",
  2. vim /etc/ld.so.conf,在里面添加/usr/loocal/openssl/lib----wq保存退出,使用ldconfig命令刷新
    分离部署lamp环境+xcache_第6张图片
    3)ab的参数:
    -n:在测试会话中所执行的请求个数(即总请求数)。
    -c:一次产生的请求个数(即并发用户数)。
    ////更多参数可以使用ab --help查看详细说明
    [root@apache ~]# ab -c 500 -n 10000 http://192.168.1.10/index.html
    分离部署lamp环境+xcache_第7张图片
    分离部署lamp环境+xcache_第8张图片

这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间 都不超过 66ms,这个处理时间是指前面的 Time per request,即对于单个用户而言,平均 每个请求的处理时间。
4)ab性能指标:
1、吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是 reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 记住:吞吐率是基于并发用户数的。这句话代表了两个含义:
a、吞吐率和并发用户数相关
b、不同的并发用户数下,吞吐率一般是不同的
计算公式:总请求数/处理完成这些请求数所花费的时间,即 Request per second=Complete requests/Time taken for tests 必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。
2、 并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话 3、并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连 接数。
4、用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5、服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也等于用户平均请求等待时间/并发用户数,即
Time per request/Concurrency Level
10、 安装php加速软件xcache(在php主机上进行操作)
说明:
php 安装目录:/usr/local/php5.6
php.ini 配置文件路径:/etc/php.ini
php 网页根目录:/var/www/pdx
1) 安装xcache
分离部署lamp环境+xcache_第9张图片
[root@localhost ~]# tar zxf xcache-3.2.0.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/xcache-3.2.0/
[root@localhost xcache-3.2.0]# /usr/local/php5.6/bin/phpize //用 phpize 生成 configure 配置文件
[root@localhost xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install
///配置、编译、安装///
安装完成后会出下一下界面:(记住路径,后面要用到)
分离部署lamp环境+xcache
2) 创建xcache缓存文件:
[root@localhost xcache-3.2.0]# touch /tmp/xcache
[root@localhost xcache-3.2.0]# chmod 777 /tmp/xcache
3) 拷贝 xcache 后台管理程序到网站根目录
[root@localhost xcache-3.2.0]# cp -r htdocs/ /var/www/pdx/xcache
4) 配置 php 支持 xcache
vim /etc/php.ini ///编译配置文件,在最后一行添加一下内容:
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
将 xcache 目录拷贝到 apache 主机的网页文档目录下
[root@localhost xcache-3.2.0]# scp -r /var/www/pdx/xcache/ [email protected]:/var/www/pdx/
5) 测试:
重启php-fpm:service php-fpm restart
浏览器打开网站根目录下面的 xcache:
http://192.168.1.10/xcache/cacher/可以看到如下界面:
分离部署lamp环境+xcache_第10张图片
至此,Linux 下安装 php 加速软件 Xcache 教程完成
再次执行ab压力测试:
[root@apache ~]# ab -c 500 -n 10000 http://192.168.1.10/index.php
分离部署lamp环境+xcache_第11张图片
11、 部署bbs论坛:
将Discuz 的程序文件解压,并且将 upload 中所有文件放置到网站目录(php 服务器的操作)
[root@localhost ~]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip
[root@localhost ~]# cp -r Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/pdx/bbs
设置 php-fpm 的服务用户为下面文件的属主或者对其设置写权限,否则安装时会报错
[root@localhost ~]# chmod -R 777 /var/www/pdx/bbs/
修改 php.ini 文件(/etc/php.ini)
[root@localhost ~]# vim /etc/php.ini
将php.ini 中的 short_open_tag 设置为 On //否则程序无法正常运行
设置完成后重启php-fpm ///[root@localhost ~]# service php-fpm restart
分离部署lamp环境+xcache_第12张图片
web 服务器也需要有静态文件(apache 服务器上操作)
直接使用scp命令处复制一份就行:
[root@localhost ~]# scp -r /var/www/pdx/bbs/ [email protected]:/var/www/pdx/
分离部署lamp环境+xcache
配置完成后,浏览器输入http://192.168.1.10/bbs/install/即可安装
分离部署lamp环境+xcache_第13张图片
分离部署lamp环境+xcache_第14张图片
出现上面这种情况是由于 php 服务器安装了 discuz 之后导致程序发生变化从而导致动态服 务器和静态服务器的程序不一致,只需要手动把 bbs 服务器的文件和 web 服务器进行一次 同步即可,如果想实现自动同步,需要使用其他服务,如 initory+rsync、sersync 等工具
[root@localhost ~]# scp -r /var/www/pdx/bbs/* [email protected]:/var/www/pdx/bbs/
动态服务器和静态服务器同步文件之后,再次访问 bbs 的网址就正常了。
分离部署lamp环境+xcache_第15张图片