码迷,mamicode.com
首页 > 系统相关 > 详细

Linux之LAMP架构搭建配置

时间:2015-11-09 00:16:34      阅读:564      评论:0      收藏:0      [点我收藏+]

标签:lanp   数据库   mysql   mariadb   php   http   

Linux之LAMP架构搭建配置

LAMP简介

  LAMP定义指Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台。

  对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN 等之外,在软件架构上需要重点关注下面几个环节: 使用高性能的操作系统 (OS) 、 高性能的网页服务器 (Web Server) 、高性能的数据库(Databse)、高效率的编程语言等。

  操作系统:Linux 操作系统有很多个不同的发行版,如 Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS 等,操作系统选择 CentOS(Community ENTerprise Operating System)是一个理想的方案。CentOS(Community ENTerprise Operating System)是 Linux 发行版之一, 是RHEL/Red Hat Enterprise Linux 的精简免费版,和 RHEL 为同样的源代码, 因此要求免费的高度稳定性的服务器可以用 CentOS 替代 Red Hat Enterprise Linux使用。

  Web 服务器和PHP:Apache 是 LAMP 架构最核心的 Web Server,开源、稳定、模块丰富是 Apache 的优势。PHP 的加速使用 eAccelerator 加速器,eAccelerator 是一个自由开放源码 PHP 加速器,优化和动态内容缓存,提高了性能 PHP 脚本的缓存性能,使得 PHP 脚本在编译的状态下,对服务器的开销几乎完全消除。

  注:Apache的缺点是有些臃肿,内存和 CPU 开销大,性能上有损耗,不如一些轻量级的 Web 服务器(例如 nginx)高效,轻量级的 Web 服务器对于静态文件的响应能力来说远高于Apache 服务器。Apache 做为 Web Server 是负载 PHP 的最佳选择, 如果流量很大的话, 可以采用 nginx 来负载非 PHP的 Web 请求。nginx 是一个高性能的 HTTP 和反向代理服务器。

  数据库:开源的数据库中,MySQL 在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将 MySQL 和 Web 服务器放在一起, 但是当访问量达到一定规模后, 应该将 MySQL 数据库从 Web Server上独立出来,在单独的服务器上运行,同时保持 Web Server 和 MySQL 服务器的稳定连接。当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。

  综上,基于LAMP 架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是 Web 网络应用和环境的相当优秀的组合。


LAMP配置环境

操作系统:Centos6.7

准备安装包:httpd 2.4.9 、mariadb-5.5.42-linux-x86_64、php-5.6.2、xcache-3.1.0.tar.gz、apr-1.5.0.tar.bz2、apr-util-1.5.3.tar.bz2、系统光盘安装源或epel源

基础架构图:场景A技术分享  场景B

技术分享 

LAMP安装配置有2种应用场景  

  A、php编译成为httpd的模块

  B、php以fpm工作为独立守护进程

实验一:以php编译成为httpd的模块为例子(LAMP-ip:192.168.2.5(httpd+php)、192.168.2.7(mariadb))

  一、编译安装apache

   1、解决依赖关系

   httpd-2.4.9需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。编译安装时操作系统必须安装必要的组件如gcc、cc等,否则有可能报错

技术分享

  (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

技术分享

技术分享

 (3) httpd-2.4.9编译过程也要依赖于pcre-devel软件包

技术分享

 (4) 编译安装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

   编译参数说明:

   --prefix   #安装路径

   --sysconfdir   #指定配置文件路径

   --with-apr   #指定apr安装路径

   --with-apr-util   #指定par-util安装路径

   --enable-so   #DSO兼容,DSO=Dynamic Shared Object,动态共享对象,可实现模块装载

   --enable-ssl   #支持SSL/TLS,可以实现https访问

   --enable-cgi   #支持CGI脚本

   --enable-rewrite   #加入mod_rewrite模块,支持URL重写

   --with-zilb   #打开zlib库的支持

   --with-pcre   #支持perl的正则表达式

   --enable-deflate   #支持网页压缩

   --enable-expires   #支持HTTP控制,对网站图片、js、css等内容,提供在客户端游览器缓存

   --enable-headers    #允许对HTTP请求头的控制

   --enable-modules=most   #支持大多数模块

   --enable-mpms-shared=all   #支持动态加载的MPM模块

   --with-mpm=event   #设置默认启用的MPM模式

  注:

  1)、httpd编译有可能遇到以下报错信息

技术分享

  解决方法

  yum install openssl-devel

技术分享

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

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

  注:prefork(多进程模型,每个进程响应一个请求。一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个) 

      worker(多线程模型,每个线程响应一个请求。一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求)    

      event(事件驱动模型,每个线程响应n个请求。一个主进程:生成m个子进程,每个进程直接n个请求)

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

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

        PidFile  "/var/run/httpd.pid"

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

#!/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.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

   (7)、为此脚本赋予执行权限:

        # chmod +x /etc/rc.d/init.d/httpd

   (8)、加入服务列表:

        # chkconfig --add httpd

   (9)、启动服务

        #service httpd start

        注意:启动服务可能会报以下错误

        AH00557: httpd: apr_sockaddr_info_get() failedfor SERVER_NAME

        AH00558: httpd: Could not reliably determinethe server‘s fully qualified domain name

        解决方法:

        编辑主配置文件 /etc/httpd2.4/httpd.conf

        修改 ServerName www.example.com:80为 ServerName 127.0.0.1:80

技术分享


   二、安装mariadb-5.5.42-linux-x86_64

    1、创建用于存放数据库文件的目录,/mydata/data,并把该目录属主、属组为mysql

    # mkdir -pv /mydata/data

    # groupadd -r mysql

    # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

    # chown -R mysql:mysql /mydata/data

技术分享

    2、安装并初始化mariadb-5.5.42-linux-x86_64

    # tar xf mariadb-5.5.42-linux-x86_64.tar.gz -C /usr/local

    # cd /usr/local/

    # ln -sv mariadb-5.5.42-linux-x86_64  mysql

    # cd mysql 

    # chown -R mysql:mysql  /usr/local/mysql/*

    # scripts/mysql_install_db --user=mysql --datadir=/mydata/data

    # chown -R root  .

技术分享

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

    # cd /usr/local/mysql

    # cp support-files/my-large.cnf  /etc/my.cnf

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

    thread_concurrency = 2

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

    datadir = /mydata/data       

    4、为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

    5、输出二进制程序、设置环境变量

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

    6、导出帮助手册

    编辑/etc/man.config 添加一条路径 

    MANPATH /usr/local/mysql/man 

    注:没有导出帮助手册,可直接指定路径查找:

    man -M /usr/local/mysql/man mysql

    7、添加至服务列表:

    # chkconfig --add mysqld

    # chkconfig mysqld on

    8、启动服务测试

技术分享

    9、数据库管理员root设置密码,并且对用户和主机进行授权root用户在192.168.2.%网段可以访问该数据库所有表。(MariaDB默认不允许用户远程登录)

    # mysqladmin -u root password ‘root‘
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY ‘root‘ WITH GRANT OPTION;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘192.168.2.%‘ IDENTIFIED BY ‘root‘ WITH GRANT OPTION;
Query OK, 0 rows affected (1.03 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;   //更新授权
Query OK, 0 rows affected (0.13 sec)
MariaDB [(none)]> SELECT user,host,password FROM mysql.user;   //查看用户授权信息
+------+-------------+-------------------------------------------+
| user | host        | password                                  |
+------+-------------+-------------------------------------------+
| root | localhost   | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | 6.7-3       |                                           |
| root | 127.0.0.1   |                                           |
| root | ::1         |                                           |
|      | localhost   |                                           |
|      | 6.7-3       |                                           |
| root | %           | *DC8ECCF746836838D9D7D4CF0C91EB64D4194AE6 |
| root | 192.168.2.% | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+------+-------------+-------------------------------------------+


   三、编译安装php-5.6.2

   1、解决依赖关系:

    yum执行如下命令解决组件问题:

    # yum -y groupinstall "Desktop Platform Development" 

    # yum -y install zlib zlib-devel bzip2 bzip2-devel freetype freetype-devel libmcrypt libmcrypt-devel libxml2 libxml2-devel libxslt libxslt-devel libpng libpng-devel libjpeg-turbo libjpeg-turbo-devel curl libcurl-devel gd-devel openssl openssl-devel


    编译安装libiconv-1.14.tar.gz

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

    ./configure --prefix=/usr/local/libiconv

    make && make install

    安装libmcrypt-2.5.8-9.el6.x86_64.rpm 、libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

    wget http://mirrors.sohu.com/fedora-epel/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm

    wget http://mirrors.sohu.com/fedora-epel/6/x86_64/libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

    rpm -ivh libmcrypt-2.5.8-9.el6.x86_64.rpm

    rpm -ivh libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

   2、编译安装php-5.6.2

   # tar xf php-5.6.2.tar.bz2

   # cd php-5.6.2

   # ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --with-apxs2=/usr/local/apache/bin/apxs --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-bz2 --enable-xml --with-xsl --with-libxml-dir  --with-mcrypt  --with-openssl --with-curl  --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

技术分享

    编译参数说明:

     --prefix    #程序安装路径

     --with-config-file-path   #指定配置文件路径

     --with-config-file-scan-dir   #离散的配置文件搜索路径

     --with-apxs2   #编译共享的apache2.0处理程序的模块。

     --enable-mbstring   #启用多字节字符串的支持

     --with-freetype-dir   #指定FreeType2的安装目录

     --with-jpeg-dir   #开启对jpeg图片的支持

     --with-png-dir   #开启对png图片的支持

     --with-zlib   #开启zlib库的支持

     --with-libxml-dir   #开启libxml2库的支持

     --enable-xml   #开启对XML支持

     --with-mcrypt   #mcrypt算法的扩展

     --with-bz2   #开启对bz2文件的支持

     --with-openssl   #对openssl的支持,加密传输时用到的

     --with-curl   #开启curl浏览工具的支持

     --with-xsl    #开启XSLT文件支持,扩展了libXML2库 ,需要libxslt软件

     --with-iconv=/usr/local/libiconv    #支持iconv,并指定iconv安装路径

     --enable-sockets   #开启sockets支持

     --enable-short-tags   #开启使用短的标记

     --enable-static   #编译静态库

     --enable-gd-native-ttf   #支持TrueType字符串函数库

     --enable-ftp   #开启ftp的支持

     --enable-maintainer-zts #启用线程安全模式

     --with-mysql=mysqlnd   #启动对MySQL的支持

     --with-pdo-mysql=mysqlnd #pdo的mysql支持

     --with-mysqli=mysqlnd   #启用对MySQLi支持

   注意:--with-apxs2=/usr/sbin/apxs的路径要写对(可以用which或者find apxs查找),否则有可能报以下错误

   Sorry, I cannot run apxs. Possible reasons follow:

   1. Perl is not installed

   2. apxs was not found. Try to pass the path using –with-apxs2=/path/to/apxs

   3. Apache was not built using –enable-so (the apxs usage page is displayed)

   说明:

    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

技术分享

   3、为php提供配置文件,并且修改时区:

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

   vim /ect/php.ini

   data.timezone = “Asia/Shanghai”    修改时区

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

   # vim /etc/httpd/httpd.conf

   在AddType application/x-gzip .gz .tgz添加如下二行

   AddType application/x-httpd-php  .php

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

   定位至DirectoryIndex index.html 

   修改为:

    DirectoryIndex  index.php  index.html

   而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。

   5、在apach网站目录下/usr/local/apache/htdocs编辑index.php如下内容

   <?php

    phpinfo();

   ?>;

技术分享

   

   以下测试连接数据库是否正常,测试页面index.php示例如下:

    <?php

      $link = mysql_connect(‘192.168.2.7‘,‘root‘,‘root‘);

      if ($link)

        echo "Success...";

      else

        echo "Failure...";


      mysql_close();

    ?>

技术分享


    四、用xcache扩展模块提升php网站性能

    扩展之前先测试当前的性能

    [root@6 htdocs]# ab -n 1000 -c 50 http://192.168.2.5/index.php    //共发起1000个请求,并发访问50个

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/


Benchmarking 192.168.2.5 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests



Server Software:        Apache/2.4.9

Server Hostname:        192.168.2.5

Server Port:            80


Document Path:          /index.php

Document Length:        12 bytes          #页面大小


Concurrency Level:      50

Time taken for tests:   6.425 seconds

Complete requests:      1000

Failed requests:        0

Write errors:           0

Total transferred:      211422 bytes

HTML transferred:       12024 bytes

Requests per second:    155.65 [#/sec] (mean)          #服务器每秒响应个数

Time per request:       321.232 [ms] (mean)

Time per request:       6.425 [ms] (mean, across all concurrent requests)

Transfer rate:          32.14 [Kbytes/sec] received


Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0   11  24.6      2     173

Processing:    21  305 576.9    150    2847

Waiting:        2  300 565.2    148    2752

Total:         28  316 575.9    158    2848


Percentage of the requests served within a certain time (ms)

  50%    158

  66%    223

  75%    271

  80%    301

  90%    398

  95%   2709

  98%   2798

  99%   2815

 100%   2848 (longest request)


    1、安装xcache

    # tar xf xcache-3.1.0.tar.gz

    # cd xcache-3.1.0

    # /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-20131226/

技术分享

技术分享

   2、编辑php.ini,整合php和xcache,保存并退出并且重启httpd服务

   首先将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-20131226/xcache.so

   测试:打开phpinfo页,可看到php已加载该模块

技术分享

技术分享

   重新进行压力测试

   [root@6 htdocs]# ab -n 1000 -c 50 http://192.168.2.5/index.php

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/


Benchmarking 192.168.2.5 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests



Server Software:        Apache/2.4.9

Server Hostname:        192.168.2.5

Server Port:            80


Document Path:          /index.php

Document Length:        90184 bytes


Concurrency Level:      50

Time taken for tests:   1.845 seconds

Complete requests:      1000

Failed requests:        97

   (Connect: 0, Receive: 0, Length: 97, Exceptions: 0)

Write errors:           0

Total transferred:      90362891 bytes

HTML transferred:       90183891 bytes

Requests per second:    541.94 [#/sec] (mean)    //每秒响应的个数(对比之前提升4倍左右)

Time per request:       92.261 [ms] (mean)

Time per request:       1.845 [ms] (mean, across all concurrent requests)

Transfer rate:          47823.83 [Kbytes/sec] received


Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0   35  22.9     35      90

Processing:     5   56  22.9     57     103

Waiting:        0   33  22.7     32      88

Total:         10   92   8.7     91     176


Percentage of the requests served within a certain time (ms)

  50%     91

  66%     92

  75%     94

  80%     95

  90%     96

  95%    100

  98%    101

  99%    101

 100%    176 (longest request)


实验二:php以fpm工作为独立守护进程(LAMP-ip:192.168.2.5(httpd)、192.168.2.6(php)、192.168.2.7(mariadb))

    说明:php-5.3.3 之后的版本自带了fpm组件,fpm组件能把PHP解释器工作为守护进程,并提供类似prefork模式的应用,它能够接收来自前端httpd,http-proxy-fcgi反向代理用户对动态内容请求至后端的fastcgi server 

    构建分离式LAMP需要注意的地方:

       1).动态资源部署在应用程序服务器上(php-fpm),静态资源部署在Web服务器上

       2).php以fpm工作方式时,它不会被编译成httpd模块,因此,编译时无须使用--with-apxs2=/PATH参数,httpd的主配置文件中也无须再 LoadModule php5_module把php编译为fpm工作模式时需要开启的重要的参数 --enable-fpm

      3).编译php时,需连接mysql或其他数据库管理系统时,需要启用其相关的驱动模块。

      4).php与mysql不在同一节点,连接mysql的用户账号需要有远程访问权限。

    一、php安装配置

   1、编译安装PHP

   # tar xf php-5.6.2.tar.bz2

   # cd php-5.6.2

   # ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --enable-mbstring --with-freetype-dir--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml--with-mcrypt --with-bz2 --with-openssl --with-curl --with-xsl --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-fpm

   # make && make install

   

   2、为php提供配置文件

   # mkdir /etc/php /etc/php.d

   # cp php.ini-production /ect/php/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服务是否自启动

      # chkconfig | grep php

      php-fpm               0:off        1:off        2:on        3:on        4:on        5:on        6:off

      为php-fpm提供配置文件:

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

     编辑php-fpm的配置文件/usr/local/php/etc/php-fpm.conf,配置fpm的相关选项为你所需要的值,并启用pid文件:

     # vim /usr/local/php/etc/php-fpm.conf

 

      listen = 192.168.2.6:9000

      pm.max_children = 50   #静态方式下开启的php-fpm进程数量

      pm.start_servers = 5   #动态方式下的起始php-fpm进程数量

      pm.min_spare_servers = 2   #动态方式下的最小php-fpm进程数量

      pm.max_spare_servers = 8   #动态方式下的最大php-fpm进程数量

      pid = /usr/local/php/var/run/php-fpm.pid    #PID文件路径

 

      注意:如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。

          如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的

需求动态在pm.min_spare_servers 和pm.max_spare_servers之间调整php-fpm进程数。

            当php-fpm工作为独立守护进程时,默认监听在127.0.0.1:9000 端口上,即默认至允许本机上。当httpd进程访问,当前环境是httpd和php分别在不同服务器安装,因此要修改监听端口(192.168.2.6),让其他主机能够访问。各自以fast-cgi方式工作时,前端的Web服务器必须以fcgi模块跟后端主机进行通信。

   4、启动php-fpm,并查看进程

   # service php-fpm start

   #ps aux | grep php

技术分享

   二、httpd配置

   1、在vi /etc/httpd24/httpd.conf配置文件中启用httpd的相关模块,启动虚拟主机

      在Apache httpd2.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

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

技术分享

技术分享

   2、在/etc/httpd24/extra/httpd-vhosts.conf配置虚拟主机支持使用fcgi

  # vim /etc/httpd/extra/httpd-vhosts.conf

 

<VirtualHost *:80>
ServerAdmin admin@weilinux.com
DocumentRoot "/web/www/"
ServerName weilinux.com
ServerAlias weilinux.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.2.6:9000/web/www/$1
ErrorLog "/usr/local/apache/logs/phpinfo-error_log"
CustomLog"/usr/local/apache/logs/phpinfo-access_log" common
<Directory "/web/www/">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>


 

   3、编辑apache配置文件/etc/httpd24/httpd.conf,让apache能识别php格式的页面,并支持php格式的主页,并重启httpd服务

    添加如下二行

   AddType application/x-httpd-php  .php

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


   定位至DirectoryIndex index.html 

   修改为:

    DirectoryIndex  index.php  index.html


 

   4、在PHP Server上创建虚拟主机主页,新建虚拟机主机目录,测试httpd能否支持php

   #mkdir -pv /web/www/

   # vi /web/www/index.php

   编辑如下内容:

   <?php

   phpinfo();

   ?>

技术分享

   5、浏览器访问http://192.168.2.5/index.php

技术分享


  可以进一步搭建discuz论坛静待后续续章......


本文出自 “一万小时定律” 博客,请务必保留此出处http://daisywei.blog.51cto.com/7837970/1710710

Linux之LAMP架构搭建配置

标签:lanp   数据库   mysql   mariadb   php   http   

原文地址:http://daisywei.blog.51cto.com/7837970/1710710

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!