溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

發(fā)布時(shí)間:2020-07-29 20:33:30 來(lái)源:網(wǎng)絡(luò) 閱讀:5897 作者:warrent 欄目:建站服務(wù)器

博文大綱:

  • 一、LAMP動(dòng)靜分離的概念
  • 二、LAMP的安裝與配置
  • 三、web網(wǎng)站壓力測(cè)試
  • 四、部署PHP加速軟件Xcache
  • 五、部署bbs論壇

之前寫過(guò)一篇部署LAMP平臺(tái)的博文:基于centos 7搭建LNMP架構(gòu),只是那個(gè)是基于同一臺(tái)服務(wù)器部署的,用來(lái)做測(cè)試網(wǎng)站或者訪問(wèn)量不大的情況下,是可以應(yīng)付的,那么?如果該web網(wǎng)站訪問(wèn)量特別大呢?

一、LAMP動(dòng)靜分離的概念

當(dāng)需要搭建一個(gè)高效的web架構(gòu)時(shí),采用動(dòng)靜分離無(wú)疑是最好的選擇,這篇博文將寫下來(lái)LAMP的動(dòng)靜分離部署方式。

所謂LAMP?LAMP架構(gòu)是目前最成熟的企業(yè)網(wǎng)站應(yīng)用模式之一,指的是協(xié)同工作的一整套系統(tǒng)和相關(guān)軟件,能夠提供動(dòng)態(tài)web站點(diǎn)服務(wù)及其應(yīng)用開(kāi)發(fā)環(huán)境。與之并肩的還有LNMP、LTMP等,LAMP說(shuō)白了就是Linux操作系統(tǒng)上安裝Apache網(wǎng)站服務(wù),構(gòu)建php/perl/Python運(yùn)行環(huán)境來(lái)連接mysql數(shù)據(jù)庫(kù),四個(gè)組件合起來(lái)就簡(jiǎn)稱“LAMP”。 LNMP只不過(guò)是用Nginx來(lái)搭建了這個(gè)httpd服務(wù)。

PHP在LAMP環(huán)境下共有三種工作模式:CGI 模式、apache 模塊、FastCGI (FCGI)模式。CGI 模式下運(yùn)行 PHP,性能不是很好。FastCGI 的方式和 apache 模塊的不同點(diǎn)在于:FastCGI 方式 PHP 是一處獨(dú)立的進(jìn)程,所有 PHP 子進(jìn)程都由 PHP 的一個(gè)叫做php-fpm 的組件負(fù)責(zé)管理;而 apache 模塊化方式運(yùn)行的 PHP,則是 apache 負(fù)責(zé)調(diào)用 PHP 完成工作。PHP 的 FastCGI 方式性能要比 apache模塊化方式強(qiáng)很多。

這里將以 FastCGI 方式編譯安裝 LAMP架構(gòu)。

FastCGI 的工作機(jī)制:
客戶端發(fā)起請(qǐng)求,請(qǐng)求分為 2 種,一種是靜態(tài)請(qǐng)求它可以直接由 Apache 直接響應(yīng)返回;另一種是動(dòng)態(tài)的請(qǐng)求,如其中包含中 php或者 Perl 這種腳本解釋性語(yǔ)言,則由 Apache 服務(wù)器通過(guò)fastcgi協(xié)議調(diào)用php服務(wù)器執(zhí)行并返回給Apache由Apache返回解釋執(zhí)行后的結(jié)果,如果這個(gè)過(guò)程中涉及到對(duì)數(shù)據(jù)的操作,此時(shí) php 服務(wù)器還會(huì)還會(huì)通過(guò) mysql 協(xié)議調(diào)用 mysql服務(wù)器。

示意圖如下:
Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

二、LAMP的安裝與配置

1、環(huán)境準(zhǔn)備

我這里環(huán)境如下:

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

我這里已經(jīng)存在了Apache服務(wù)器和MySQL服務(wù)器,自行部署即可,可參考博文:Apache服務(wù)的安裝及工作模式介紹;基于centos7搭建MySQL數(shù)據(jù)庫(kù)。

2、對(duì)PHP服務(wù)器進(jìn)行部署

這里直接開(kāi)始部署PHP服務(wù)器

下載我提供的源碼包,然后上傳至PHP服務(wù)器。

#以下為安裝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的選項(xiàng)作用解釋如下:

  • --prefix=/usr/local/php5.6 #安裝位置
  • --with-mysql=mysqlnd #支持 mysql
  • --with-pdo-mysql=mysqlnd #支持 pdo 模塊
  • --with-mysqli=mysqlnd #支持 mysqli 模塊
    #上面的三選項(xiàng)的作用:數(shù)據(jù)庫(kù)與 php 不在一個(gè)服務(wù)器上,指定此種方式,安裝數(shù)據(jù)庫(kù)連接驅(qū)動(dòng)。
  • --with-openssl #支持 openssl 模塊
  • --enable-fpm #支持 fpm 模式
  • --enable-sockets #啟用 socket 支持
  • --enable-sysvshm #啟用系統(tǒng)共享內(nèi)存支持
  • --enable-mbstring #多字節(jié)字串、像我們的中文就是多字節(jié)字串
  • --with-freetype-dir #支持 freetype、就要裝 freetype-devel、跟字體相關(guān)的、字體解析工具
  • --with-jpeg-dir
  • --with-png-dir
    #上面的二選項(xiàng)的作用:處理 jpeg、png 圖片的、php 可以動(dòng)態(tài)生成 jpeg 圖片
  • --with-zlib #是個(gè)壓縮庫(kù)、在互聯(lián)網(wǎng)傳輸時(shí)用來(lái)壓縮傳輸?shù)?/li>
  • --with-libxml-dir=/usr #這個(gè) libxml 是用來(lái)解析 xml 的、指定/usr 下
  • --enable-xml #支持 xml 的
  • --with-mhash #支持 mhash
  • --with-mcrypt=/usr/local/libmcrypt #libmcrypt-devel 這個(gè)程序包所指定的
  • --with-config-file-path=/etc #指定配置文件的存放路徑的
  • --with-config-file-scan-dir=/etc/php.d #配置文件掃描路徑
  • --with-bz2 #支持 BZip2

為了支持 apache 的 worker 或 event 這兩個(gè) MPM,編譯時(shí)使用了--enable-maintainer-zts 選項(xiàng)。

#以下為調(diào)整PHP的配置文件及控制服務(wù)的啟停
[root@php php-5.6.27]# cp php.ini-production /etc/php.ini    #復(fù)制源碼中中提供的PHP配置文件
[root@php php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#復(fù)制其服務(wù)控制腳本文件
[root@php php-5.6.27]# chmod +x /etc/init.d/php-fpm    #賦予執(zhí)行權(quán)限
[root@php php-5.6.27]# chkconfig --add php-fpm    #添加為系統(tǒng)服務(wù),以便支持systemctl管理
[root@php php-5.6.27]# chkconfig php-fpm on   #開(kāi)啟
#復(fù)制php-fpm提供的默認(rèn)配置文件并編輯它
[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.conf
listen = 192.168.20.5:9000    #監(jiān)聽(tīng)地址是本機(jī)的IP9000端口
pm.max_children = 50         #最大啟動(dòng)的進(jìn)程數(shù)
pm.start_servers = 5          #初始啟動(dòng)進(jìn)程數(shù)
pm.min_spare_servers = 5     #最小空閑進(jìn)程
pm.max_spare_servers = 35     #最大空閑進(jìn)程
#修改完成后,保存退出即可
[root@php php-5.6.27]# systemctl start php-fpm    #啟動(dòng)PHP服務(wù)
[root@php php-5.6.27]# netstat -anput | grep php-fpm     #確認(rèn)其9000端口以啟動(dòng)
[root@php ~]# mkdir -p /var/www/html        #創(chuàng)建其網(wǎng)頁(yè)存放目錄,須和apache服務(wù)器的網(wǎng)頁(yè)存放路徑一樣
[root@php ~]# firewall-cmd --permanent --add-port=9000/tcp   #防火墻放行9000端口的流量
[root@php ~]# firewall-cmd --reload    #重載以便生效

3、配置apache服務(wù)器(切換到apache服務(wù)器進(jìn)行以下操作)

[root@apache ~]# cd /usr/local/http-2.4.23/conf/
[root@apache conf]# vim httpd.conf     #編輯apache服務(wù)的主配置文件
#啟用以下兩個(gè)模塊(將下面兩行前面的“#”號(hào)去掉即可)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Include conf/extra/httpd-vhosts.conf        #啟用虛擬主機(jī)的配置文件
               ..............#省略部分內(nèi)容
        AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
#定位到上面兩行(注意,這兩行一定是沒(méi)有被注釋的),然后寫入下面兩行配置,讓apache可以識(shí)別php格式的頁(yè)面
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
<IfModule dir_module>      #定位到該標(biāo)簽
    DirectoryIndex index.php index.html   #在index.html前添加index.php
</IfModule>
#至此保存退出即可
[root@apache conf]# vim extra/httpd-vhosts.conf     #編輯虛擬主機(jī)配置文件
#虛擬主機(jī)的配置文件如下
<VirtualHost *:80>
    ServerAdmin lv916551516@163.com
    DocumentRoot "/var/www/html"
    ServerName www.test.com
    ErrorLog "logs/test-error_log"
    CustomLog "logs/test-access_log" common
    ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.20.5:9000/var/www/html/$1
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
#編輯完成后,保存退出
[root@apache conf]# mkdir -p /var/www/html/    #創(chuàng)建網(wǎng)頁(yè)根目錄
[root@apache conf]# echo this is a test file >> /var/www/html/index.html
[root@apache conf]# apachectl restart    #重啟apache服務(wù)

以上虛擬主機(jī)的配置文件解釋如下:

  • ProxyRequests off #關(guān)閉正向代理
  • ProxyPassMatch #把以.php 結(jié)尾的文件請(qǐng)求發(fā)送到 php-fpm 進(jìn)程,php-fpm 至少需要知道運(yùn)行的目錄和 URI,所以這里直接在 fcgi://192.168.20.5:9000 后指明了這兩個(gè)參數(shù),其它的參數(shù)的傳遞已經(jīng)被 mod_proxy_fcgi.so 進(jìn)行了封裝,不需要手動(dòng)指定。
  • 特別注意的是,/var/www/html/需要與<VirtualHost >中的 DocumentRoot 后的路徑一致
  • ProxyPassMatch #只有滿足特定正則模式的內(nèi)容才會(huì)匹配并執(zhí)行此規(guī)則,這里的模式是,^/(..php(/.)?)$ ,從網(wǎng)站(虛擬主機(jī)<VirtualHost >的根目錄開(kāi)始,匹配任何以 .php 結(jié)尾,或者在 .php 之后緊跟一個(gè) / 再跟別的內(nèi)容的路徑。
  • ^ (caret) 和 $ (dollar)標(biāo)志要匹配的路徑的開(kāi)始和結(jié)束
  • ( )括號(hào)里的內(nèi)容可以用 $1 來(lái)表示,以方便后面引用它。
  • fcgi://192.168.20.5:9000 通過(guò) mod_proxy_fcgi 來(lái)轉(zhuǎn)發(fā)的代理,使用 fastCGI 協(xié)議,轉(zhuǎn)到PHP-FPM 監(jiān)聽(tīng)的端口。
  • /var/www/html #非常重要!必須與虛擬主機(jī)的路徑匹配,且必須是對(duì)應(yīng) php 文件在操作系統(tǒng)中的絕對(duì)路徑,否則會(huì)找不到文件。

4、回到PHP服務(wù)器,測(cè)試LAMP環(huán)境

#編寫以下兩個(gè)網(wǎng)頁(yè)文件
[root@php ~]# cat /var/www/html/index.php   #用來(lái)顯示PHP的版本信息
<?php
phpinfo();
?>
[root@php ~]# cat /var/www/html/test.php    #用來(lái)測(cè)試連接數(shù)據(jù)庫(kù)
<?php
$link=mysqli_connect('192.168.20.6','lvjz','pwd@123');
if($link) echo "恭喜你,數(shù)據(jù)庫(kù)連接成功?。?!"; else echo "connect shibai";
mysqli_close($link);
?>

5、在MySQL服務(wù)器上添加用戶,并賦予遠(yuǎn)程登錄的權(quán)限

[root@localhost src]# mysql -uroot -p    
Enter password:            #驗(yàn)證數(shù)據(jù)庫(kù)用戶密碼
mysql> create database bbs;        #創(chuàng)建專用的數(shù)據(jù)庫(kù)
Query OK, 1 row affected (0.00 sec)
mysql> grant all on bbs.* to lvjz@192.168.20.5 identified by 'pwd@123';  #授權(quán)用戶為lvjz
Query OK, 0 rows affected (0.01 sec)

客戶端訪問(wèn)web服務(wù)器的www.test.com 進(jìn)行測(cè)試:
Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

客戶端訪問(wèn)web服務(wù)器的www.test.com/test.php 進(jìn)行測(cè)試:

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

看到上面兩個(gè)測(cè)試頁(yè)說(shuō)明 apache、php、mysql 之間可以協(xié)同工作了。

三、web網(wǎng)站壓力測(cè)試

網(wǎng)站性能壓力測(cè)試是服務(wù)器網(wǎng)站性能調(diào)優(yōu)過(guò)程中必不可缺少的一環(huán)。只有讓服務(wù)器處在高壓情況下,才能真正體現(xiàn)出軟件、硬件等各種設(shè)置不當(dāng)所暴露出的問(wèn)題。

性能測(cè)試工具目前最常見(jiàn)的有以下幾種:ab、http_load、webbench、siege。我比較習(xí)慣用apahce自帶的ab工具。

ab 非常實(shí)用,它不僅可以對(duì) apache 服務(wù)器進(jìn)行網(wǎng)站訪問(wèn)壓力測(cè)試,也可以對(duì)或其它類型的服務(wù)器進(jìn)行壓力測(cè)試。比如 nginx、tomcat、IIS 等。

1、ab 的原理

ab 命令會(huì)創(chuàng)建多個(gè)并發(fā)訪問(wèn)線程,模擬多個(gè)訪問(wèn)者同時(shí)對(duì)某一 URL 地址進(jìn)行訪問(wèn)。它的測(cè)試目標(biāo)是基于 URL 的,因此,它既可以用來(lái)測(cè)試 apache 的負(fù)載壓力,也可以測(cè)試 nginx、lighthttp、tomcat、IIS 等其它 Web 服務(wù)器的壓力。
ab 命令對(duì)發(fā)出負(fù)載的計(jì)算機(jī)要求很低,它既不會(huì)占用很高 CPU,也不會(huì)占用很多內(nèi)存。但卻會(huì)給目標(biāo)服務(wù)器造成巨大的負(fù)載,其原理類似 CC gong擊。自己測(cè)試使用也需要注意,否則一次上太多的負(fù)載??赡茉斐赡繕?biāo)服務(wù)器資源耗完,嚴(yán)重時(shí)甚至導(dǎo)致死機(jī)。

2、ab的安裝

ab 的安裝非常簡(jiǎn)單,如果是源碼安裝 apache 的話,那就更簡(jiǎn)單了。apache 安裝完畢后 ab命令存放在 apache 安裝目錄的 bin 目錄下。如下:
/usr/local/http2.4.23/bin/ab。
如果 apache 是通過(guò) yum 的 RPM 包方式安裝的話,ab 命令默認(rèn)存放在/usr/bin 目錄下。如下:
which ab
注意:如果不想安裝 apache 但是又想使用 ab 命令的話,我們可以直接安裝 apache 的工具包 httpd-tools。如下:
yum -y install httpd-tools
查看 ab 是否安裝成功,可以切換到上述目錄下,使用 ab –V 命令進(jìn)行檢測(cè)。

[root@apache conf]# ab -V     #好像報(bào)錯(cuò)了
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/"  
#執(zhí)行該命令,設(shè)置環(huán)境變量即可
[root@apache conf]# ab -V
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
               .................... #省略部分內(nèi)容

3、ab壓力測(cè)試

[root@apache ~]# ab -c 500 -n 1000 127.0.0.1/index.html   #對(duì)本機(jī)的靜態(tài)網(wǎng)頁(yè)進(jìn)行測(cè)試
#-n:在測(cè)試會(huì)話中所執(zhí)行的請(qǐng)求個(gè)數(shù)(即總請(qǐng)求數(shù))。
#-c:一次產(chǎn)生的請(qǐng)求個(gè)數(shù)(即 并發(fā)用戶數(shù) )。
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 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.23
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /index.html     #請(qǐng)求的資源
Document Length:        20 bytes     #HTTP 響應(yīng)數(shù)據(jù)的正文長(zhǎng)度

Concurrency Level:      500    #并發(fā)個(gè)數(shù)(并發(fā)用戶數(shù))
Time taken for tests:   2.093 seconds   #所有這些請(qǐng)求處理完成所花費(fèi)的時(shí)間
Complete requests:      1000    #完成請(qǐng)求數(shù)
Failed requests:        0        #失敗的請(qǐng)求數(shù)
Total transferred:      264000 bytes    
#表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)長(zhǎng)度總和,包括每個(gè) HTTP響應(yīng)數(shù)據(jù)的頭信息和正文數(shù)據(jù)的長(zhǎng)度。
HTML transferred:       20000 bytes  #網(wǎng)頁(yè)文件的大小(就是去除響應(yīng)頭部后的大?。?
Requests per second:    477.87 [#/sec] (mean)  
#吞吐量,計(jì)算方式:請(qǐng)求的次數(shù)/用戶等待時(shí)間(Complete requests/Time taken for tests)
Time per request:       1046.320 [ms] (mean)   
#用戶平均等待一個(gè)頁(yè)面的時(shí)間,計(jì)算方式:用戶等待時(shí)間/完成請(qǐng)求的次數(shù)(Complete requests/Concurrency Level)
Time per request:       2.093 [ms] (mean, across all concurrent requests)
#服務(wù)器處理一個(gè)請(qǐng)求花費(fèi)的時(shí)間,計(jì)算方式:用戶等待時(shí)間/完成請(qǐng)求的次數(shù)(Time taken for tests/Complete requests)
Transfer rate:          123.20 [Kbytes/sec] received
#用戶請(qǐng)求的數(shù)據(jù)大小,計(jì)算方式:數(shù)據(jù)的總長(zhǎng)度/用戶等待時(shí)間(Total trnasferred/ Time taken for tests)
#這個(gè)統(tǒng)計(jì)很好的說(shuō)明服務(wù)器的處理能力達(dá)到極限時(shí),其出口寬帶的需求量。(即平均每秒網(wǎng)絡(luò)上的流量)

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1  252 401.1    109    1262
Processing:    13  245 224.7    230     817
Waiting:        2  225 208.0    230     816
Total:         20  498 559.7    243    1812

Percentage 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)
以上部分的數(shù)據(jù)用于描述每個(gè)請(qǐng)求處理時(shí)間的分布情況,比如以上測(cè)試,80%的請(qǐng)求處理時(shí)間都不超過(guò) 834ms,這個(gè)處理時(shí)間是指前面的 Time per request,即對(duì)于單個(gè)用戶而言,平均每個(gè)請(qǐng)求的處理時(shí)間。

4、ab性能指標(biāo)

在進(jìn)行性能測(cè)試過(guò)程中有幾個(gè)指標(biāo)比較重要:
1)吞吐率(Requests per second)
服務(wù)器并發(fā)處理能力的量化描述,單位是 reqs/s,指的是在某個(gè)并發(fā)用戶數(shù)下單位時(shí)間內(nèi)處理的請(qǐng)求數(shù)。某個(gè)并發(fā)用戶數(shù)下單位時(shí)間內(nèi)能處理的最大請(qǐng)求數(shù),稱之為最大吞吐率。
注:吞吐率是基于并發(fā)用戶數(shù)的。這句話代表了兩個(gè)含義:

  • 吞吐率和并發(fā)用戶數(shù)相關(guān);
  • 不同的并發(fā)用戶數(shù)下,吞吐率一般是不同的。

計(jì)算公式:總請(qǐng)求數(shù)/處理完成這些請(qǐng)求數(shù)所花費(fèi)的時(shí)間,即
Request per second=Complete requests/Time taken for tests
必須要說(shuō)明的是,這個(gè)數(shù)值表示當(dāng)前機(jī)器的整體性能,值越大越好。
2)并發(fā)連接數(shù)(The number of concurrent connections)
并發(fā)連接數(shù)指的是某個(gè)時(shí)刻服務(wù)器所接受的請(qǐng)求數(shù)目,簡(jiǎn)單的講,就是一個(gè)會(huì)話。
3)并發(fā)用戶數(shù)(Concurrency Level)
要注意區(qū)分這個(gè)概念和并發(fā)連接數(shù)之間的區(qū)別,一個(gè)用戶可能同時(shí)會(huì)產(chǎn)生多個(gè)會(huì)話,也即連接數(shù)。
4)用戶平均請(qǐng)求等待時(shí)間(Time per request)
計(jì)算公式:處理完成所有請(qǐng)求數(shù)所花費(fèi)的時(shí)間/(總請(qǐng)求數(shù)/并發(fā)用戶數(shù)),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5)服務(wù)器平均請(qǐng)求等待時(shí)間(Time per request:across all concurrent requests)
計(jì)算公式:處理完成所有請(qǐng)求數(shù)所花費(fèi)的時(shí)間/總請(qǐng)求數(shù),即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒數(shù)。
同時(shí),它也等于用戶平均請(qǐng)求等待時(shí)間/并發(fā)用戶數(shù),即
Time per request/Concurrency Level

四、部署PHP加速軟件Xcache

Xcache是一款用來(lái)為PHP頁(yè)面做緩存的工具。當(dāng)然,實(shí)際工作環(huán)境中,是不會(huì)對(duì)PHP動(dòng)態(tài)頁(yè)面來(lái)做緩存的,意義不大(動(dòng)態(tài)頁(yè)面嘛,數(shù)據(jù)更新較快)又占用內(nèi)存空間。這里只是為了表現(xiàn)出,PHP動(dòng)態(tài)頁(yè)面,也是可以做緩存的。

1、安裝Xcache

在對(duì)PHP部署時(shí),我提供了一個(gè)下載的鏈接,其中包含了這個(gè)xcache這個(gè)源碼包,上傳至PHP服務(wù)器即可。

[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:         20131106
Zend Module Api No:      20131226
Zend 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
#安裝完成后,記住結(jié)尾提示的路徑,以后會(huì)用到,如下:
/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/

2、創(chuàng)建Xcache緩存文件

[root@php ~]# touch /tmp/xcache
[root@php ~]# chmod 777 /tmp/xcache    #保證有寫入權(quán)限

3、復(fù)制Xcache后臺(tái)管理程序到網(wǎng)站根目錄

[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的主配置文件
#在文件末尾添加以下內(nèi)容
[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=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
xcache.var_count =1
xcache.var_slots =8K
xcache.var_ttl=0
xcache.var_maxttl=0
xcache.var_gc_interval =300
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory ="" 
[root@php xcache-3.2.0]# systemctl restart php-fpm   #重啟PHP
[root@php xcache-3.2.0]# vim /etc/exports   #設(shè)置nfs

/var/www/html/       192.168.20.0/24(rw,sec=sys,sync,no_root_squash)

5、回到apache服務(wù)器,掛載nfs共享目錄,以便同步網(wǎng)頁(yè)根目錄下的文件

[root@apache ~]# showmount -e 192.168.20.5  #確認(rèn)可以查看到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/    #確認(rèn)已掛載
文件系統(tǒng)                   類型  容量  已用  可用 已用% 掛載點(diǎn)
192.168.20.5:/var/www/html nfs4   39G  5.0G   34G   13% /var/www/html

6、測(cè)試

訪問(wèn)www.test.com/xcache ,即可看到如下頁(yè)面:

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

至此,Linux 下安裝 php 加速軟件 Xcache 完成。

7、對(duì)apache的動(dòng)態(tài)頁(yè)面進(jìn)行測(cè)試

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

查看Xcache的命中率:

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

五、部署bbs論壇

1、在PHP服務(wù)器上進(jìn)行以下操作

bbs論壇的源碼包為Discuz_7.0.0_FULL_SC_UTF8.zip,同樣在我文章開(kāi)頭的鏈接中可以提取,并上傳至PHP服務(wù)器。

[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   #將原來(lái)的Off修改為On
[root@php xcache-3.2.0]# systemctl restart php-fpm   #重啟PHP

2、配置bbs(使用之前用來(lái)測(cè)試鏈接數(shù)據(jù)庫(kù)的用戶給bbs論壇使用即可)

瀏覽器訪問(wèn)www.test.com/bbs/install :
Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離
Centos 7.3部署LAMP架構(gòu)動(dòng)靜分離

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問(wèn)一下細(xì)節(jié)
AI