编译环境:
Linux:CentOS 6.5
Aapache: httpd-2.4.9
Mysql: MaraiDB-5.5.32
PHP: php-5.5.26
模式一:web服务器 、数据库服务器、php在同一台服务器
实验拓扑图:
在这种模式下,处理客户端的请求过程大致如下:
web介接收到客户端的请求后,如果是静态资源,则直接返回;如果请求的是动态资源,httpd负责处理的这个请求的进程(线程)会通过模块来处理请求,如果请求中会访问数据库会去数据库中取得数据,然后经运行结果返回这个进程,进程将结果返回到客户端。
第一步:源码编译 httpd-2.4.9
1、安装 apr 和 apr-util 依赖包,这里采用源码方式安装。
2、安装其他依赖包,例如:
yum install pcer-devel openssl-devel -y
3、安装 httpd-2.4.9
编译参数如下:
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
4、提供 httpd 配置文件和服务启动脚本。
这块的内容参照上一篇博客《http-2.4.9源码编译》。
第二步:编译安装 MaraiDB-5.5.32
这里采用的安装方式是采用通用二进制的方式,类似于“绿色软件”。解压后不需要再次编译直接可以使用。具体使用源码编译会使用cmake编译,会在后续的过程中继续介绍。
1、创建用户和组
groupadd -r mysql useradd -r -g mysql mysql
2、准备好数据存储的磁盘
为了在使用数据开始提高数据的安全性,建议将数据库的数据存放于独立的磁盘中,使用逻辑卷。
pvcreate /dev/sda5 vgcreate mysqlvg -s 4M /dev/sda5 lvcreate -n data -m 3 -L MYDATA -L 5G mysqlvg lvcreate -n data -L 5G mysqlvg mke2fs -t ext4 -L MYDATA -m 3 /dev/mysqlvg/data mkdir /mydata mount /dev/mapper/mysqlvg-data /mydata/ mkdir /mydata/data chown mysql.mysql /mydata/data/ usermod -m -d /mydata/data
3、安装并初始化MariaDB
解压到/usr/local目录:
tar xf mariadb-5.5.32-linux-x86_64.tar.gz -C /usr/local/
创建链接文件,名称为mysql:
ln -sv /usr/local/mariadb-5.5.32-linux-x86_64 /usr/local/mysql
改变目录的属主和属组:
chown mysql.mysql /usr/local/mysql -R
初始化环境:
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data
4、提供主配置文件
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
修改:
[mysqld] thread_concurrency = 2 #工作的线程数,建议是当前cpu数的2倍 datadir = /mydata/data #添加数据目录
5、提供服务控制脚本
cp /usr/local/mysqlsupport-files/mysql.server /etc/rc.d/init.d/mysqld<BR>chmod +x /etc/rc.d/init.d/mysqld
添加至服务列表:
chkconfig --add mysqld chkconfig mysqld on
首次启动时安全保证:这里可以设置 root 密码,删除test库等操作
usr/local/mysql/bin/mysql_secure_installation
而后就可以启动服务测试使用了。
6、输出mysql的man手册、头文件、库文件
man:在/etc/man.conf中添加:
MANPATH /usr/local/mysql/man
头文件:
ln -sv /usr/local/mysql/include /usr/include/mysql
库文件:
echo “/usr/local/mysql/lib” > /etc/ld.conf.d/mysql.conf ldconfig
7、导出命令
echo ”PATH=/usr/local/mysql/bin:$PATH“
第三步、编译php-5.5.26
编译后直接作为httpd的模块运行:
1、解决依赖关系
yum groupinstall “Development tools” "Desktop Platform Development" -y yum install libmcrypt-devel bizp2-devel libpng-devel
2、编译安装php-5.4.26
tar xf php-5.4.26.tar.bz2 cd php-5.4.26 ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
# 这一步可能出现错误,一般都是安装包的问题,解决依赖关系就可以了。
说明:
1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
make make test make intall
为php提供配置文件:
cp php.ini-production /etc/php.ini
3、 编辑apache配置文件httpd.conf,以apache支持php
# vim /etc/httpd/httpd.conf
1、添加如下二行
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html
而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。
四、启用服务器状态
mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:
(1) 处于工作状态的worker进程数;
(2) 空闲状态的worker进程数;
(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;
(4) 当前服务器总共发送的字节数;
(5) 服务器自上次启动或重启以来至当前的时长;
(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;
启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:
<Location /server-status> SetHandler server-status Require all granted </Location>
需要提醒的是,这里的状态信息不应该被所有人随意访问,因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看此页面。
示例:利用搭建好的yum平台安装phpMyAdmin数据库管理软件。
tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2 -C /usr/local/apache24/htdocs/ mv /usr/local/apache24/htdocs/phpMyAdmin-3.5.1-all-languages/ /usr/local/apache24/htdocs/pma
此时我们就可以访问测试了:
此时我们可以使用ab工具对web服务器压测:
测试环境:
cpu型号:Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz
内存大小:4G
cpu核心数:4
ab -n 10000 -c 1000 http://192.168.1.66/pam/index.php
测试结果:
Requests per second: 424.73 [#/sec] (mean) Time per request: 2354.452 [ms] (mean) Time per request: 2.354 [ms] (mean, across all concurrent requests)
五、安装xcache,为php加速:
1、安装
tar xf xcache-3.0.3.tar.gz cd xcache-3.0.3 /usr/local/php/bin/phpize ./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config make && make install
安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-zts-20100525/
2、编辑php.ini,整合php和xcache:
首先将xcache提供的样例配置导入php.ini
mkdir /etc/php.d cp xcache.ini /etc/php.d
说明:xcache.ini文件在xcache的源码目录中。
接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
zend_extension = /usr/local/php/lib/php5/extensions/no-debug-zts-20100525/xcache.so
注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。
安装了php加速器后,测试效果大致能提升一倍左右
Requests per second: 1161.31 [#/sec] (mean) Time per request: 861.096 [ms] (mean) Time per request: 0.861 [ms] (mean, across all concurrent requests)
模式二:web服务器 、数据库服务器、php在分别在不同服务器
实验拓扑图如下:
第一步:在192.168.1.33上安装http-2.4.9
安装过程和模式一一样,这里不再详述。安装完成后只提供服务脚本,先不做其他配置。
测试结果:
第二步:在192.168.1.66上安装mariadb-5.5.32
这里使用通用二进制方式安装,与模式一也是一样。
测试结果:
第三步:在192.168.1.99上安装php-5.5.26
此时httpd和php之间通过fcgi协议通信。
在192.168.1.99上:
1、解决依赖关系
yum -y groupinstall "Desktop Platform Development" “Development Tools” yum install -y openssl-devel bzip2-devel libmcrypt-devel
2、安装php-5.4.26
tar xf php-5.4.26.tar.bz2 cd php-5.4.26 ./configure --prefix=/usr/local/php --with-openssl --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --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 --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-gd --enable-maintainer-zts
make && make install
--with-config-file-scan-dir Set the path where to scan for configuration files
mysqli 扩展允许用户访问由 MySQL 4.1 或更高版本所提供的功能。
pdo:轻量级的统一接口(PHP Data Objects)
为php提供配置文件:
cp php.ini-production /etc/php.ini
3、配置php-fpm
为php-fpm提供SysV init脚本,并将其添加至服务列表:
cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm chmod +x /etc/rc.d/init.d/php-fpm chkconfig --add php-fpm chkconfig php-fpm on
为php-fpm提供配置文件:
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件:
pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pid = /usr/local/php/var/run/php-fpm.pid listen = 192.168.1.99:9000 listen.allowed_clients = 192.168.1.33 # 为了安全开启此设置,默认情况下是都允许连接的
接下来就可以启动php-fpm了:
service php-fpm start
验证:
在192.168.1.33上:
1、启用httpd的相关模块
在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
2、配置虚拟主机支持使用fcgi
在相应的虚拟主机中添加类似如下两行
ProxyRequests Off # 开启反向代理 ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.99:9000/PATH/TO/DOCUMENT_ROOT/$1
ProxyRequests Off:关闭正向代理
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://192.168.1.99:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页
vim /etc/httpd24/httpd.conf
1)、添加如下二行
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
2)、定位至DirectoryIndex index.html 修改为:
DirectoryIndex index.php index.html
4、创建站点目录和测试页面
mkdir -p /web/vhosts/wordpress
测试结果:
结果尽然没有成功。why???
仔细发现是原理的问题,关键的一点是:web服务器接收到关于php的请求后,实在哪里执行php程序呢??
出现上述问题是,没有把握好原理。web服务器(192.168.1.33)收到php请求后,使用 fcgi 协议反向代理到 php 应用程序服务器(192.168.1.1)的对应路径下执行相关的 php 程序。
解决办法:
在192.168.1.33:
rm -rf /web/vhosts/wordpress/index.php
在192.168.1.99:
mkdir -p /web/vhosts/wordpress/
添加测试页面:
cat << EOF >/web/vhosts/wordpress/index.php <?php $link = mysql_connect(‘192.168.1.66‘,‘guoting‘,‘guoting‘); if ($link) echo "Success..."; else echo "Failure..."; mysql_close(); phpinfo(); ?> EOF
测试结果如下:
解决了这个问题的话,lamp平台搭建就基本完成。
在192.168.1.99上安装xcache,作法同模式一。安装完成后,确保有这个模块。如下图:
示例:
在模式二的平台上搭建drupal。
在192.168.1.33上:
unzip /root/wordpress-3.3.1-zh_CN.zip -d /web/vhosts/wordpress/
访问:http://www.wordpress.org/wordpress 根据提示安装,关键步骤如下:
这里面好多图片等内容都没有加载到,解决办法之一是:在web服务器上提供相同的资源,如下图:
至此,lapm平台的搭建基本完成。对于如何解决httpd动静资源的分离,后续会讲解更好的方法。
本文出自 “逆水寒” 博客,请务必保留此出处http://guoting.blog.51cto.com/8886857/1540185
原文地址:http://guoting.blog.51cto.com/8886857/1540185