一)实验目的
通过3台主机搭建分别跑三个服务,依次,apache,php,mysql。主要实现当用户访问的网站的时候,网站分为动态,静态,当访问静态的时候交给apache,访问php动态格式时,交给php,作用减少服务器的压力,和提高用户访问的速度。apache和php之间的通信通过fastcgi,php和mysql之间的通信通过mysqlnd。
二)实验设置环境
服务器版本 [root@station106 ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m Mage Education Learning Services http://www.magedu.com [root@station106 ~]# uname -r 2.6.32-358.el6.x86_64
服务 | IP地址 | 软件版本 | 官方网站 |
apache前端服务器,提供静态页面。 |
192.168.1.116 | http-2.4.9.tar.bz2 | http://www.apache.org/ |
php后端服务器,提供动态页面。 | 192.168.1.114 | php-5.4.26.tar.bz2 | http://php.net/downloads.php |
xcache加速缓存器,和php一台主机。 | 192.168.1.114 | xcache-3.0.3.tar.bz2 | http://xcache.lighttpd.net/ |
mysql数据库服务器 | 192.168.1.108 | mysql-5.5.33-linux.2.6-x86.64.tar.gz | http://dev.mysql.com/downloads/ |
三)图形解释工作模式
四)http主配置文件的配置。
ps:
http和mysql的安装这里参考http://shunzi.blog.51cto.com/8289655/1381677,这里就不在讲述。
vim /etc/httpd/http.conf
DirectoryIndex index.html index.php最好这样写。如果按上面的方法写访问html页面会显示文件不存在。
配置虚拟主机,首先就要注释掉中心主机,并且开启虚拟主机配置文件。
注意如果下面的虚拟主机的目录:写成了别的,比如/www/benet/
那么<Directory "/www">这里必须写www,否则提示目录访问权限是拒绝的。
还有一种解决办法就是在虚拟主机中直接授权。这里选择第二种。
vim /etc/httpd/extra/httpd-vhosts.conf
mkdir -pv /www/{benet,accp}/htdocs
分别在两个虚拟主机下方入不同的网页,测试,启动httpd。
service httpd24 restart
在本机测试,如果不做dns就把ip 域名写入到hosts文件中。
五)php的安装和配置。
1)解压编译。
tar xf php-5.4.26.tar.bz2 cd php-5.4.26 ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 make && make install
php单独使用需要的编译模块。--enable=fpm
2)提供配置文件
mkdir /etc/php5
cp php.ini-production /etc/php5/php.ini提供配置文件。
3)提供fpm,fpm管理php单独工作。
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 --list php-fpm cd /usr/local/php/etc cp php-fpm.conf.default php-fpm.conf
编辑php-fpm配置文件
vim php-fpm.conf
pid = /usr/local/php/var/run/php-fpm.pid 启动pid文件 error_log = log/php-fpm.log启动错误日志 listen = 192.168.1.114:9000 监听端口写本机的。 pm.max_children = 50最多最大子进程数 pm.start_servers = 5默认启动几个子进程 pm.min_spare_servers = 3最小空闲数 pm.max_spare_servers = 6最大空闲数
保存退出
/etc/init.d/php-fpm start启动
ss -tln查看端口默认9000是否启动
浏览器访问发现没有访问到。这是因为前端服务器没有把请求数据交给后台php处理。
发现访问不到,因为没有找到php。
解决办法是需要支持反向代理功能。
1)修改前端服务器apache主配置文件。
重启httpd
2)在php后端服务器,创建和fcgi中相同的目录。
mkdir -p /www.accp.com
/etc/init.d/php-fpm restart
浏览器访问测试。
经过测试发现已经能顺利的把客户端请求的php的网站能通过前端调用到后台php后端处理。
六)开始处理php和mysql中的通信做测试。
在mysql服务器上授权给php后端服务器,能通信的一个用户。
在php服务器上写个mysql测试页,测试php和mysql能否正常通信。
七)安装phpmyadmin。
前端服务器上放一份,因为图片需要在前端处理。
unzip phpMyAdmin-
4.0
.
5
-all-languages.zip
mv phpMyAdmin-
4.0
.
5
-all-languages/ /www/accp/htdocs/
后端php上放一份。因为里面有php的网页需要,有的需要去php访问。
php上存放的目录时/www.accp.com里,这里就是在apache上定义的fcgi里的同一个目录。
页面访问成功,输入登录账号和密码无法登陆。
解决办法。在php后端服务器上修改。
修改的是phpmyadmin里的配置文件。
mv config.sample.inc.php config.inc.php
vim config.inc.php
ps:
php已经能和mysql正常通信。授权的用户也已生效。
以上三台机器,均已都正常通信。
下面对服务器做优化。
先做压力测试看效果,在前端执行。
ab -c 500 -n 2000 http://www.accp.com/php Concurrency Level: 500 Time taken for tests: 7.870 seconds Complete requests: 2000 Failed requests: 0 Non-2xx responses: 2000 Total transferred: 906000 bytes HTML transferred: 464000 bytes Requests per second: 254.14 [#/sec] (mean) Time per request: 1967.421 [ms] (mean) Time per request: 3.935 [ms] (mean, across all concurrent requests) Transfer rate: 112.43 [Kbytes/sec] received
八)安装xcache后在看压力效果,作对比。
1)tar xf xcache-3.0.3.tar.bz2 cd xcache-3.0.3 /usr/local/php/bin/phpize ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config make make install Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/安装完成。 2)修改xcache配置文件。 mkdir /etc/php.d cp xcache.ini /etc/php.d/ vim /etc/php.d/xcache.ini extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so /etc/init.d/php-fpm restart重启
九)前端继续做压力测试看效果。
ab -c 500 -n 2000 http://www.accp.com/php
Concurrency Level: 500
Time taken for tests: 2.584 seconds
Complete requests: 2000
Failed requests: 0
Non-2xx responses: 2000
Total transferred: 906000 bytes
HTML transferred: 464000 bytes
Requests per second: 773.99 [#/sec] (mean)
Time per request: 646.004 [ms] (mean)
Time per request: 1.292 [ms] (mean, across all concurrent requests)
Transfer rate: 342.40 [Kbytes/sec] received
PS:
效果挺明显。访问时间减少了将近2倍。实验操作完成。