Linux下LAMP的实现及性能测试

一、什么是LAMP


   Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案.


   本篇博文,讲的是httpd 2.4.9 + mysql-5.5.33 + php-5.4.26 编译安装过程,最后安装xcache,为php加速。



二、编译安装apache    172.16.251.234


1、解决依赖关系

       httpd-2.4.9需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过


       源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行。

       它们的下载路径为:

wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.9.tar.bz2
wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.0.tar.bz2
wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.3.tar.bz2

       另外需要安装环境开发包组:

httpd-2.4.9编译过程也要依赖于pcre-devel软件包,此软件包系统光盘自带:  

yum groupinstall -y "Server Platform Development"
yum groupinstall -y "Development tools"
yum install pcre-devel -y


2、编译安装下载的包


       (1) 编译安装apr    

tar xf apr-1.5.0.tar.bz2
cd apr-1.5.0
./configure --prefix=/usr/local/apr
make && make install


       (2) 编译安装apr-util

tar xf apr-util-1.5.3.tar.bz2
cd apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

       附:apache官方对APR的介绍:

       The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.


       (3) 编译安装httpd-2.4.9

tar xf httpd-2.4.9.tar.bz2
cd 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
# make && make install

如果报错:
1
checking whether to enablemod_ssl... configure: error: mod_ssl has been requested but can no

解决方法:

yum install -y openssl-devel

   补充:        

       ①构建MPM为静态模块    在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。        

           ②构建 MPM 为动态模块在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。

    (4)、修改httpd24的主配置文件,设置其Pid文件的路径

         编辑/etc/httpd24/httpd.conf,添加如下行即可:

             PidFile  "/var/run/httpd24/httpd.pid"

       此处为指定httpd服务创建的pid文件路径,优先读取配置文件中的参数。脚本本身的定义的参数将被忽略。

   (5)、提供SysV服务脚本/etc/rc.d/init.d/httpd24,内容如下:          

         cd /etc/rc.d/init.d/            

         cp httpd httpd24

         vim httpd24    #修改httpd24里26,27行的路径

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve #        HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
  echo -n $"Stopping $prog: "
  killproc -p ${pidfile} -d 10 $httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
        status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
    stop
    start
  fi
  ;;
  reload)
        reload
  ;;
  graceful|help|configtest|fullstatus)
  $apachectl $@
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
esac
exit $RETVAL

       而后为此脚本赋予执行权限:

chmod +x /etc/rc.d/init.d/httpd24


       加入服务列表:

chkconfig --add httpd24
chkconfig httpd24 on
chkconfig --list httpd24


   (6)、启用httpd的相关模块

        在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载

vim /etc/httpd24/httpd.conf

        LoadModule proxy_module modules/mod_proxy.so

        LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

    (7)、配置虚拟主机支持使用fcgi

       LoadModule vhost_alias_module modules/mod_vhost_alias.so

       Include /etc/httpd24//extra/httpd-vhosts.conf


   (8)、在相应的虚拟主机中添加类似如下。

vim /etc/httpd24/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/www/test1"    //站点目录
    ServerName www.test1.com     //服务器FQDN
    ProxyRequests Off            //关闭正向代理
    ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.251.234:9000/www/test1.com/$1    //使用fcgi模块通过正则表达式过滤代理,在前段(http服务器)上并没有.php文件,所有的.php文件都在php处理器中。
        <Directory "/www/test1">
                Options none
                Require all granted
        </Directory>    //前段站点权限
    ServerAlias test1.com    //FQDN的CNAME
    ErrorLog "logs/test1.com.err"    //错误日志存放路径
    CustomLog "logs/test1.com.access" common
</VirtualHost>


       ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://192.168.1.20:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。


   (9)、定义环境变量

       vim /etc/profile.d/httpd.s

export PATH=/usr/local/apache/bin:$PATH

           重读环境变量

. /etc/profile.d/httpd.sh

(10)、编辑apache配置文件httpd.conf,以apache支持php

     vim /etc/httpd24/httpd.conf

     添加如下二行

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

       定位至DirectoryIndex index.html

         修改为:

DirectoryIndex index.php index.html


三、安装mysql-5.5.33    IP:172.16.251.113


    1、准备数据存放的文件系统        

新建一个逻辑卷,并将其挂载至特定目录即可。        

   这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

mkdir /mydata

mkdir /mydata/data


   2、新建用户以安全方式运行进程:

groupadd -r mysql
useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
chown -R mysql:mysql /mydata/data


   3、安装并初始化mysql-5.5.33

       首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.33-linux2.6-i686.tar.gz,其下载位置为ftp://172.16.0.1/pub/Sources/6.x86_64/mysql

tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local
cd /usr/local/
ln -sv mysql-5.5.33-linux2.6-x86_64 mysql
cd mysql
chown -R mysql:mysql  .
scripts/mysql_install_db --user=mysql --datadir=/mydata/data
chown -R root  .


   4、为mysql提供主配置文件:


cd /usr/local/mysql
cp support-files/my-large.cnf  /etc/my.cnf

   并修改/etc/my.cnf中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:        

       thread_concurrency = 2        

       另外还需要添加如下行指定mysql数据文件的存放位置:                                         datadir = /mydata/data    


     5、为mysql提供sysv服务脚本:
cd /usr/local/mysql
cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
添加至服务列表:
chkconfig --add mysqld
chkconfig mysqld on

   而后就可以启动服务测试使用了。


为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:

   6、输出mysql的man手册至man命令的查找路径:  

编辑/etc/man.config,添加如下行即可:


MANPATH  /usr/local/mysql/man

7、输出mysql的头文件至系统头文件路径/usr/include:

   这可以通过简单的创建链接实现:

ln -sv /usr/local/mysql/include  /usr/include/mysql


8、输出mysql的库文件给系统库查找路径:


echo ‘/usr/local/mysql/lib‘ > /etc/ld.so.conf.d/mysql.conf
    而后让系统重新载入系统库:
ldconfig


9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。

       vim /etc/profile.d/mysql.sh

export PATH=/usr/local/mysql/bin:$PATH

. /etc/profile.d/mysql.sh

   重读环境变量文件


   service mysqld start



   四、编译安装php-5.4.26    IP:172.16.251.244


   1、解决依赖关系:

yum groupinstall -y "Server Platform Development"
yum groupinstall -y "Development tools"


      如果想让编译的php支持mcrypt扩展,此处还需要下载ftp://172.16.0.1/pub/Sources/sources/php目录中的如下两个rpm包并安装之:
yum -y install libmcrypt-devel
yum install bzip2-devel -y


   2、编译安装php-5.4.26

   首先下载源码包至本地目录

wget http://am1.php.net/distributions/php-5.4.26.tar.bz2

   编译安装:

tar xf php-5.4.26.tar.bz2
cd php-5.4.26
./configure --prefix=/usr/local/php --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 --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2


   说明:

   1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

   2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。


   httpd、php、mysql不在一台机器执行:

./configure --prefix=/usr/local/php --with-h-mysql=mysqlnd --with-openssl --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


   报错:

configure: error: xml2-config not found. Please check your libxml2 installation.

   解决:

yum install libxml2-devel -y
make
make test
make intall

   为php提供配置文件:

cp php.ini-production /etc/php.ini


   3、配置php-fpm
   为php-fpm提供Sysv init脚本,并将其添加至服务列表:
cd php-5.4.26
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


4、为php-fpm提供配置文件:

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf


   编辑php-fpm的配置文件:    # vim /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

   接下来就可以启动php-fpm了:  

   # service php-fpm start    

   使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):    

   # ps aux | grep php-fpm    

   默认情况下,fpm监听在addr:172.16.251.244的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。    

   # netstat -tnlp | grep php-fpm

tcp        0      0 addr:172.16.251.244:9000              0.0.0.0:*                   LISTEN      689/php-fpm

五、安装xcache,为php加速:


   压力测试:

   ulimit -n 3000     #未免请求过多,服务器崩溃,限制最大请求数3000

ab -c 100 -n 1000 http://172.16.251.234/pma/index.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/php/bin/php-config
make && make install

   安装结束时,会出现类似如下行:

Installing shared extensions:     /usr/local/php/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,找到extension开头的行,修改为如下行:
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so
    vim /usr/local/apache/htdocs/index.php 
<?php
        $link = mysql_connect(‘172.16.251.113‘,‘root‘,‘redhat‘);
        if ($link)
                echo "Successfull...";
        else
                echo "Failure...";
        mysql_close();
        phpinfo();
?>

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。



六、启用服务器状态


   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来限制仅允许指定网段的主机查看此页面。



本文出自 “斜视天花板” 博客,请务必保留此出处http://lemidi.blog.51cto.com/8601832/1381848

Linux下LAMP的实现及性能测试,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。