Chinaunix首页 | 论坛 | 博客
  • 博客访问: 585525
  • 博文数量: 151
  • 博客积分: 3330
  • 博客等级: 中校
  • 技术积分: 1686
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-08 02:41
文章存档

2011年(151)

分类: LINUX

2011-09-25 15:15:22

今天写这篇文章是因为网上绝大多数都是用PHP5.2来搭建的,还要打补丁,PHP5.3都出来很久了,所以想试试集成的PHP-FPM

系统平台及相关软件

RHEL5.7
libmcrypt-2.5.8.tar.gz 
mcrypt-2.6.8.tar.gz 
mhash-0.9.9.9.tar.bz2 
bz2
zlib
jpeg
png
gd
libxml2
libxpm
freetype
ttf


第一步:
执行如下操作,系统这些都是基础的库文件,装上这些后在以后的安装配置中就不会有麻烦了

yum -y install gcc gcc-c++ compat-gcc-34-g77 flex bison autoconf automake libevent libevent-devel libgcrypt libgcrypt-devel libgpg-error-devel libmcrypt libmcrypt-devel libjpeg libjpeg-devel libpng libpng-devel libidn libidn-devel libtool libtool-ltdl-devel libtiff libtiff-devel libX11 libX11-devel libXpm libXpm-devel libxml2 libxml2-devel libxslt libxslt-devel freetype freetype-devel gd gd-devel gettext gettext-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel mhash mhash-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers pcre-devel pam-devel zlib zlib-devel xorg-x11-proto-devel

第二步:
安装apache,我用的MPM是worker,这个是混合型多进程,多线程的模式,由于使用线程来处理请求,所以可以处理海量请求而系统资源的开销小于基于进程的MPM.可能稳定性比prefork模式要差些。仅作安装配置测试。实际生产环境还需谨慎定夺!

1.安装apr
./configure
make && make install

2.安装apr-util
./configure
make && make install

3.安装apache
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache --enable-ssl --enable-static-ab --enable-http --enable-speling=shared --enable-rewrite=shared --enable-so --with-apr=/usr/local/apr --with-pcre --with-z --with-mpm=worker --enable-info --enable-deflate=shared --enable-expires=shared --enable-static-support --enable-static-rotatelogs --enable-static-logresolve --enable-authz-dbm=shared --enable-static-htdbm --enable-static-checkgid --with-apr-util=/usr/local/apr/bin/apu-1-config --enable-vhost-alias --with-ssl

make && make install
安装完成

将apache设置为linux systemV 服务
cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd

vi /etc/init.d/httpd   在第二行添加如下:
#chkconfig:345 85 15
#description: Start and stops the Apache HTTP Server.
保存退出

chmod +x /etc/init.d/httpd
chkconfig --add httpd
chkconfig --level 345 httpd on 

完成后即可通过 service httpd start/restart/stop来启动apache了

安装mod_fastcgi
cp Makefile.AP2 makeinstall
vi makeinstall ,将top_dir = /usr/local/apach2 (我的apache是安装在/usr/local/apache2 路径中)
make
make install

完成后,httpd.conf里面会有如下:

LoadModule fastcgi_module modules/mod_fastcgi.so


第二步:
安装mysql,我用的是5.5版本的
要先把cmake安装好
建账号
groupadd mysql
useradd -g mysql -s /sbin/nologin -d /dev/null mysql

进入源码包编译
编译参数如下:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql   \
-DINSTALL_DATADIR=/usr/local/mysql/data   \
-DDEFAULT_CHARSET=utf8   \
-DDEFAULT_COLLATION=utf8_general_ci  \ 
-DEXTRA_CHARSETS=all   \
-DWITH_SSL=system  \
-DWITH_EMBEDDED_SERVER=1  \
-DENABLED_LOCAL_INFILE=1  \
-DWITH_MYISAM_STORAGE_ENGINE=1   \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysqld.socket \
-DMYSQL_USER=mysql  \
-DWITH_READLINE=ON  \

make && make install

数据库初始化过程略

完成源代码的安装后,在将mysql设为systemV服务,进入mysql源码包,执行如下:
 cp support-files/mysql.server /etc/init.d/mysqld
 chmod +x /etc/init.d/mysqld
 chkconfig --add mysqld
 chkconfig --level 345 mysqld on

完成后即可通过service mysqld start/restart/stop来启动和关闭mysql了


第四步:
安装php
先建立一个php-fpm的运行帐号
groupadd fpm
useradd -g fpm -s /sbin/nologin -d /dev/null fpm

安装一些基本的库
编译安装 Libiconv
tar -zxf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure --prefix=/usr/local
make && make install

编译安装 Mhash
tar -jxf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9/
./configure --prefix=/usr/local
make && make install

编译安装 LibMcrypt
tar -zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure --prefix=/usr/local
make && make install

编译安装 Mcrypt
tar -zxf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
 ./configure --prefix=/usr/local
make && make install

在添加一个库的路径搜索,在/etc/ld.so.conf里面添加,添加如下就OK
/usr/local/lib
执行ldconfig  更新一下即可

开始编译PHP,编译参数如下:
 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql/ --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/usr/local/mysql/tmp/mysqld.socket --enable-ftp --with-zlib-dir --with-bz2 --enable-zip --with-iconv-dir=/usr/local/ --with-freetype-dir --with-jpeg-dir --with-png-dir --enable-calendar --with-gd --enable-gd-native-ttf --with-gettext --enable-bcmath --enable-exif --enable-intl --with-mhash --with-mcrypt=/usr/local/ --enable-fpm --enable-xml --with-xsl --with-libxml-dir=/usr/ --disable-rpath --enable-shmop --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-zend-multibyte --enable-mbregex --enable-mbstring --with-pcre-regex --with-openssl --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap --enable-pdo --enable-phar --with-xmlrpc --with-fpm-user=fpm --with-fpm-group=fpm --enable-wddx --with-curlwrappers --enable-ftp --with-xpm-dir --disable-cli 

注意:很多人在这个时候会 添加 --with-apxs2=/usr/local/apache2/bin/apxs ,据说这样添加后,产生的PHP 是 cli版本的,也就是说apache在处理用户对php页面请求的时候通过libphp5.so 这个模块来将页面的解析交给php引擎处理。
我现在的目的是想让php引擎有个独立的监听程序,来监听apache传递过来的php页面解析请求,因此用到php-fpm 来监听。这就是所谓的fastcgi,可能更快些,不知道理解的是不是正确的。反正我是这样的理解的。

继续....
make ZEND_EXTRA_LIBS="-liconv"  (如果make的时候不加后面的定会报错)
make install
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

将php-fpm设为systemV服务

cp sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --level 345 php-fpm on
完成后即可通过service php-fpm start/restar/stop来启动和关闭php-fpm了


现在环境搭建起来了,开始配置和测试

1.apache的配置:

我只设置了apache 与外部php-fpm 通信的设置


127.0.0.1:9000  是php-fpm 运行监听的地址和端口,apache要通过php-fpm将php页面的请求转交给php处理。

apache的mpm 用的是worker,设置如下:

我在htdocs目录里面放了一个test.php的页面

php-fpm 是fastcgi 进程管理器,要对他进行一些配置,配置文件 php-fpm.conf

配置项太多了,不好截图,就不发了


最后启动apche ,mysql ,查看下:



可以看到 php-fpm 9000端口,mysql 3306 ,apache 80 都已经正常启动了


在看看系统内存情况,用的2G的内存

剩下1G内存,启动了三个apache 进程
测下php是否解析正常,访问下test.php文件





解析正常,

接下来测试,在另一台linux上,用apache的专用测试工具ab,测试一下
 ab -n 2000 -c 500
  并发500,请求2000

然后到LAMP那台上看看

看80 端口

看9000 端口

看内存

内存在持续降低

看看其他状态图



好了,到此为止!!!
阅读(5123) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~