千家信息网

Centos 7.3部署LAMP架构动静分离

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,博文大纲:一、LAMP动静分离的概念二、LAMP的安装与配置三、web网站压力测试四、部署PHP加速软件Xcache五、部署bbs论坛之前写过一篇部署LAMP平台的博文:基于centos 7搭建LNM
千家信息网最后更新 2024年09月22日Centos 7.3部署LAMP架构动静分离

博文大纲:

  • 一、LAMP动静分离的概念
  • 二、LAMP的安装与配置
  • 三、web网站压力测试
  • 四、部署PHP加速软件Xcache
  • 五、部署bbs论坛

之前写过一篇部署LAMP平台的博文:基于centos 7搭建LNMP架构,只是那个是基于同一台服务器部署的,用来做测试网站或者访问量不大的情况下,是可以应付的,那么?如果该web网站访问量特别大呢?

一、LAMP动静分离的概念

当需要搭建一个高效的web架构时,采用动静分离无疑是最好的选择,这篇博文将写下来LAMP的动静分离部署方式。

所谓LAMP?LAMP架构是目前最成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态web站点服务及其应用开发环境。与之并肩的还有LNMP、LTMP等,LAMP说白了就是Linux操作系统上安装Apache网站服务,构建php/perl/Python运行环境来连接mysql数据库,四个组件合起来就简称"LAMP"。 LNMP只不过是用Nginx来搭建了这个httpd服务。

PHP在LAMP环境下共有三种工作模式:CGI 模式、apache 模块、FastCGI (FCGI)模式。CGI 模式下运行 PHP,性能不是很好。FastCGI 的方式和 apache 模块的不同点在于:FastCGI 方式 PHP 是一处独立的进程,所有 PHP 子进程都由 PHP 的一个叫做php-fpm 的组件负责管理;而 apache 模块化方式运行的 PHP,则是 apache 负责调用 PHP 完成工作。PHP 的 FastCGI 方式性能要比 apache模块化方式强很多。

这里将以 FastCGI 方式编译安装 LAMP架构。

FastCGI 的工作机制:
客户端发起请求,请求分为 2 种,一种是静态请求它可以直接由 Apache 直接响应返回;另一种是动态的请求,如其中包含中 php或者 Perl 这种脚本解释性语言,则由 Apache 服务器通过fastcgi协议调用php服务器执行并返回给Apache由Apache返回解释执行后的结果,如果这个过程中涉及到对数据的操作,此时 php 服务器还会还会通过 mysql 协议调用 mysql服务器。

示意图如下:

二、LAMP的安装与配置

1、环境准备

我这里环境如下:

我这里已经存在了Apache服务器和MySQL服务器,自行部署即可,可参考博文:Apache服务的安装及工作模式介绍;基于centos7搭建MySQL数据库。

2、对PHP服务器进行部署

这里直接开始部署PHP服务器

下载我提供的源码包,然后上传至PHP服务器。

#以下为安装PHP及其依赖[root@php ~ ]# tar zxf libmcrypt-2.5.7.tar.gz -C /usr/src[root@php ~]# tar zxf php-5.6.27.tar.gz -C /usr/src[root@php ~]# yum -y install libxml2-devel openssl-devel bzip2-devel[root@php ~]# cd /usr/src/libmcrypt-2.5.7[root@php libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install[root@php libmcrypt-2.5.7]# cd ../php-5.6.27/[root@php php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install

上面编译安装PHP的选项作用解释如下:

  • --prefix=/usr/local/php5.6 #安装位置
  • --with-mysql=mysqlnd #支持 mysql
  • --with-pdo-mysql=mysqlnd #支持 pdo 模块
  • --with-mysqli=mysqlnd #支持 mysqli 模块
    #上面的三选项的作用:数据库与 php 不在一个服务器上,指定此种方式,安装数据库连接驱动。
  • --with-openssl #支持 openssl 模块
  • --enable-fpm #支持 fpm 模式
  • --enable-sockets #启用 socket 支持
  • --enable-sysvshm #启用系统共享内存支持
  • --enable-mbstring #多字节字串、像我们的中文就是多字节字串
  • --with-freetype-dir #支持 freetype、就要装 freetype-devel、跟字体相关的、字体解析工具
  • --with-jpeg-dir
  • --with-png-dir
    #上面的二选项的作用:处理 jpeg、png 图片的、php 可以动态生成 jpeg 图片
  • --with-zlib #是个压缩库、在互联网传输时用来压缩传输的
  • --with-libxml-dir=/usr #这个 libxml 是用来解析 xml 的、指定/usr 下
  • --enable-xml #支持 xml 的
  • --with-mhash #支持 mhash
  • --with-mcrypt=/usr/local/libmcrypt #libmcrypt-devel 这个程序包所指定的
  • --with-config-file-path=/etc #指定配置文件的存放路径的
  • --with-config-file-scan-dir=/etc/php.d #配置文件扫描路径
  • --with-bz2 #支持 BZip2

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

#以下为调整PHP的配置文件及控制服务的启停[root@php php-5.6.27]# cp php.ini-production /etc/php.ini    #复制源码中中提供的PHP配置文件[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm#复制其服务控制脚本文件[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm    #赋予执行权限[root@php php-5.6.27]# chkconfig --add php-fpm    #添加为系统服务,以便支持systemctl管理[root@php php-5.6.27]# chkconfig php-fpm on   #开启#复制php-fpm提供的默认配置文件并编辑它[root@php php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf[root@php php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conflisten = 192.168.20.5:9000    #监听地址是本机的IP9000端口pm.max_children = 50         #最大启动的进程数pm.start_servers = 5          #初始启动进程数pm.min_spare_servers = 5     #最小空闲进程pm.max_spare_servers = 35     #最大空闲进程#修改完成后,保存退出即可[root@php php-5.6.27]# systemctl start php-fpm    #启动PHP服务[root@php php-5.6.27]# netstat -anput | grep php-fpm     #确认其9000端口以启动[root@php ~]# mkdir -p /var/www/html        #创建其网页存放目录,须和apache服务器的网页存放路径一样[root@php ~]# firewall-cmd --permanent --add-port=9000/tcp   #防火墙放行9000端口的流量[root@php ~]# firewall-cmd --reload    #重载以便生效

3、配置apache服务器(切换到apache服务器进行以下操作)

[root@apache ~]# cd /usr/local/http-2.4.23/conf/[root@apache conf]# vim httpd.conf     #编辑apache服务的主配置文件#启用以下两个模块(将下面两行前面的"#"号去掉即可)LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.soInclude conf/extra/httpd-vhosts.conf        #启用虚拟主机的配置文件               ..............#省略部分内容        AddType application/x-compress .Z    AddType application/x-gzip .gz .tgz#定位到上面两行(注意,这两行一定是没有被注释的),然后写入下面两行配置,让apache可以识别php格式的页面    AddType application/x-httpd-php .php    AddType application/x-httpd-php-source .phps      #定位到该标签    DirectoryIndex index.php index.html   #在index.html前添加index.php#至此保存退出即可[root@apache conf]# vim extra/httpd-vhosts.conf     #编辑虚拟主机配置文件#虚拟主机的配置文件如下    ServerAdmin lv916551516@163.com    DocumentRoot "/var/www/html"    ServerName www.test.com    ErrorLog "logs/test-error_log"    CustomLog "logs/test-access_log" common    ProxyRequests OffProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.20.5:9000/var/www/html/$1Options FollowSymLinksAllowOverride NoneRequire all granted#编辑完成后,保存退出[root@apache conf]# mkdir -p /var/www/html/    #创建网页根目录[root@apache conf]# echo this is a test file >> /var/www/html/index.html[root@apache conf]# apachectl restart    #重启apache服务

以上虚拟主机的配置文件解释如下:

  • ProxyRequests off #关闭正向代理
  • ProxyPassMatch #把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://192.168.20.5:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。
  • 特别注意的是,/var/www/html/需要与中的 DocumentRoot 后的路径一致
  • ProxyPassMatch #只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(..php(/.)?)$ ,从网站(虚拟主机的根目录开始,匹配任何以 .php 结尾,或者在 .php 之后紧跟一个 / 再跟别的内容的路径。
  • ^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束
  • ( )括号里的内容可以用 $1 来表示,以方便后面引用它。
  • fcgi://192.168.20.5:9000 通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到PHP-FPM 监听的端口。
  • /var/www/html #非常重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操作系统中的绝对路径,否则会找不到文件。

4、回到PHP服务器,测试LAMP环境

#编写以下两个网页文件[root@php ~]# cat /var/www/html/index.php   #用来显示PHP的版本信息[root@php ~]# cat /var/www/html/test.php    #用来测试连接数据库

5、在MySQL服务器上添加用户,并赋予远程登录的权限

[root@localhost src]# mysql -uroot -p    Enter password:            #验证数据库用户密码mysql> create database bbs;        #创建专用的数据库Query OK, 1 row affected (0.00 sec)mysql> grant all on bbs.* to lvjz@192.168.20.5 identified by 'pwd@123';  #授权用户为lvjzQuery OK, 0 rows affected (0.01 sec)

客户端访问web服务器的www.test.com 进行测试:

客户端访问web服务器的www.test.com/test.php 进行测试:

看到上面两个测试页说明 apache、php、mysql 之间可以协同工作了。

三、web网站压力测试

网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。

性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege。我比较习惯用apahce自带的ab工具。

ab 非常实用,它不仅可以对 apache 服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如 nginx、tomcat、IIS 等。

1、ab 的原理

ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问。它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。
ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似 CC gong击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

2、ab的安装

ab 的安装非常简单,如果是源码安装 apache 的话,那就更简单了。apache 安装完毕后 ab命令存放在 apache 安装目录的 bin 目录下。如下:
/usr/local/http2.4.23/bin/ab。
如果 apache 是通过 yum 的 RPM 包方式安装的话,ab 命令默认存放在/usr/bin 目录下。如下:
which ab
注意:如果不想安装 apache 但是又想使用 ab 命令的话,我们可以直接安装 apache 的工具包 httpd-tools。如下:
yum -y install httpd-tools
查看 ab 是否安装成功,可以切换到上述目录下,使用 ab -V 命令进行检测。

[root@apache conf]# ab -V     #好像报错了ab: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory[root@apache conf]# export    LD_LIBRARY_PATH="/usr/local/openssl/lib/"  #执行该命令,设置环境变量即可[root@apache conf]# ab -VThis is ApacheBench, Version 2.3 <$Revision: 1748469 $>               .................... #省略部分内容

3、ab压力测试

[root@apache ~]# ab -c 500 -n 1000 127.0.0.1/index.html   #对本机的静态网页进行测试#-n:在测试会话中所执行的请求个数(即总请求数)。#-c:一次产生的请求个数(即 并发用户数 )。This is ApacheBench, Version 2.3 <$Revision: 1748469 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking 127.0.0.1 (be patient)Completed 100 requestsCompleted 200 requestsCompleted 300 requestsCompleted 400 requestsCompleted 500 requestsCompleted 600 requestsCompleted 700 requestsCompleted 800 requestsCompleted 900 requestsCompleted 1000 requestsFinished 1000 requestsServer Software:        Apache/2.4.23Server Hostname:        127.0.0.1Server Port:            80Document Path:          /index.html     #请求的资源Document Length:        20 bytes     #HTTP 响应数据的正文长度Concurrency Level:      500    #并发个数(并发用户数)Time taken for tests:   2.093 seconds   #所有这些请求处理完成所花费的时间Complete requests:      1000    #完成请求数Failed requests:        0        #失败的请求数Total transferred:      264000 bytes    #表示所有请求的响应数据长度总和,包括每个 HTTP响应数据的头信息和正文数据的长度。HTML transferred:       20000 bytes  #网页文件的大小(就是去除响应头部后的大小) Requests per second:    477.87 [#/sec] (mean)  #吞吐量,计算方式:请求的次数/用户等待时间(Complete requests/Time taken for tests)Time per request:       1046.320 [ms] (mean)   #用户平均等待一个页面的时间,计算方式:用户等待时间/完成请求的次数(Complete requests/Concurrency Level)Time per request:       2.093 [ms] (mean, across all concurrent requests)#服务器处理一个请求花费的时间,计算方式:用户等待时间/完成请求的次数(Time taken for tests/Complete requests)Transfer rate:          123.20 [Kbytes/sec] received#用户请求的数据大小,计算方式:数据的总长度/用户等待时间(Total trnasferred/ Time taken for tests)#这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。(即平均每秒网络上的流量)Connection Times (ms)              min  mean[+/-sd] median   maxConnect:        1  252 401.1    109    1262Processing:    13  245 224.7    230     817Waiting:        2  225 208.0    230     816Total:         20  498 559.7    243    1812Percentage of the requests served within a certain time (ms)  50%    243  66%    496  75%    691  80%    834  90%   1760  95%   1760  98%   1762  99%   1762 100%   1812 (longest request)以上部分的数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过 834ms,这个处理时间是指前面的 Time per request,即对于单个用户而言,平均每个请求的处理时间。

4、ab性能指标

在进行性能测试过程中有几个指标比较重要:
1)吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是 reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
注:吞吐率是基于并发用户数的。这句话代表了两个含义:

  • 吞吐率和并发用户数相关;
  • 不同的并发用户数下,吞吐率一般是不同的。

计算公式:总请求数/处理完成这些请求数所花费的时间,即
Request per second=Complete requests/Time taken for tests
必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。
2)并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
3)并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
4)用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5)服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也等于用户平均请求等待时间/并发用户数,即
Time per request/Concurrency Level

四、部署PHP加速软件Xcache

Xcache是一款用来为PHP页面做缓存的工具。当然,实际工作环境中,是不会对PHP动态页面来做缓存的,意义不大(动态页面嘛,数据更新较快)又占用内存空间。这里只是为了表现出,PHP动态页面,也是可以做缓存的。

1、安装Xcache

在对PHP部署时,我提供了一个下载的链接,其中包含了这个xcache这个源码包,上传至PHP服务器即可。

[root@php ~]# tar zxf xcache-3.2.0.tar.gz -C /usr/src[root@php ~]# cd /usr/src/xcache-3.2.0/[root@php xcache-3.2.0]# /usr/local/php5.6/bin/phpize   #使用PHP中的phpize生成configure文件Configuring for:PHP Api Version:         20131106Zend Module Api No:      20131226Zend Extension Api No:   220131226[root@php xcache-3.2.0]# ./configure  --enable-xcache  --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install#安装完成后,记住结尾提示的路径,以后会用到,如下:/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/

2、创建Xcache缓存文件

[root@php ~]# touch /tmp/xcache[root@php ~]# chmod 777 /tmp/xcache    #保证有写入权限

3、复制Xcache后台管理程序到网站根目录

[root@php xcache-3.2.0]# cp -r htdocs/ /var/www/html/xcache

4、配置PHP支持Xcache

[root@php xcache-3.2.0]# vim /etc/php.ini  #编辑PHP的主配置文件#在文件末尾添加以下内容[xcache-common]extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so#这就是指定安装Xcache后返回的目录[xcache.admin]xcache.admin.enable_auth = Off[xcache]xcache.shm_scheme ="mmap"xcache.size=60Mxcache.count =1xcache.slots =8Kxcache.ttl=0xcache.gc_interval =0xcache.var_size=64Mxcache.var_count =1xcache.var_slots =8Kxcache.var_ttl=0xcache.var_maxttl=0xcache.var_gc_interval =300xcache.test =Offxcache.readonly_protection = Offxcache.mmap_path ="/tmp/xcache"xcache.coredump_directory =""xcache.cacher =Onxcache.stat=Onxcache.optimizer =Off[xcache.coverager]xcache.coverager =Onxcache.coveragedump_directory ="" [root@php xcache-3.2.0]# systemctl restart php-fpm   #重启PHP[root@php xcache-3.2.0]# vim /etc/exports   #设置nfs/var/www/html/       192.168.20.0/24(rw,sec=sys,sync,no_root_squash)

5、回到apache服务器,挂载nfs共享目录,以便同步网页根目录下的文件

[root@apache ~]# showmount -e 192.168.20.5  #确认可以查看到PHP共享的目录Export list for 192.168.20.5:/var/www/html 192.168.20.0/24[root@apache ~]# mount -t nfs 192.168.20.5:/var/www/html/ /var/www/html/#挂载[root@apache ~]# df -hT /var/www/html/    #确认已挂载文件系统                   类型  容量  已用  可用 已用% 挂载点192.168.20.5:/var/www/html nfs4   39G  5.0G   34G   13% /var/www/html

6、测试

访问www.test.com/xcache ,即可看到如下页面:

至此,Linux 下安装 php 加速软件 Xcache 完成。

7、对apache的动态页面进行测试

[root@apache ~]# export LD_LIBRARY_PATH="/usr/local/openssl/lib/" [root@apache ~]# ab -c 100 -n 1000 http://192.168.20.4/index.php        #进行第一次测试          ......#省略部分内容Time taken for tests:   4.292 seconds         ......#省略部分内容Requests per second:    232.99 [#/sec] (mean)          ......#省略部分内容[root@apache ~]# ab -c 100 -n 1000 http://192.168.20.4/index.php        #进行第二次测试         ......#省略部分内容Time taken for tests:   1.631 seconds          ......#省略部分内容Requests per second:    613.29 [#/sec] (mean)         ......#省略部分内容

查看Xcache的命中率:

五、部署bbs论坛

1、在PHP服务器上进行以下操作

bbs论坛的源码包为Discuz_7.0.0_FULL_SC_UTF8.zip,同样在我文章开头的链接中可以提取,并上传至PHP服务器。

[root@php ~]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip    #解压[root@php Discuz_7.0.0_FULL_SC_UTF8]# cp -r upload/ /var/www/html/bbs[root@php Discuz_7.0.0_FULL_SC_UTF8]# chmod -R 777 /var/www/html/bbs/[root@php ~]# vim /etc/php.ini     #修改PHP配置文件short_open_tag = On   #将原来的Off修改为On[root@php xcache-3.2.0]# systemctl restart php-fpm   #重启PHP

2、配置bbs(使用之前用来测试链接数据库的用户给bbs论坛使用即可)

浏览器访问www.test.com/bbs/install :


-------- 本文至此结束,感谢阅读 --------

0