編譯部署LAMP+xcache (php-fpm模式)

通過編譯安裝方式部署分離式LAMP+xcache (php-fpm模式)


要求:

(1)採用源碼編譯部署分離式的LAMP,其中php基於php-fpm模式

(2)基於LAMP平臺一個虛擬主機提供WordPress,另一個虛擬主機提供phpMyadmin

(3)利用xcache來爲php提供緩存加速頁面的訪問速度

(4)對其中一個站點緩分別做壓力測試,並且比對緩存加速前和加速後的數據。


環境:

192.168.1.103------>提供httpd服務

192.168.1.104------>提供mariadb服務

192.168.1.110------>提供PHP xcache服務 


軟件包:

httpd-2.4.6.tar   apr-1.5.0.tar     apr-util-1.5.2.tar      ###httpd2.4版本需要apr和apr-util包的1.4以上版本支持

mariadb-5.5.46-linux-x86_64.tar (二進制包)

php-5.4.26.tar 

xcache-3.1.0.tar

wordpress-4.3.1-zh_CN

phpMyAdmin-4.4.14.1-all-languages

---------------------------------------------------分割線------------------------------------------------------------

編譯安裝服務:


一、編譯安裝httpd服務(192.168.1.103)


1、首先確認系統是否已經安裝了httpd服務,如果存在我們需要卸載,爲了避免與後面有衝突。

2、安裝開發包組

[root@pxe132 ~]# yum -y groupinstall Desktop Platform Development Development Tools

3、編譯安裝apr和apr-util

   centos7中rpm包安裝apr和apr-util就是1.4版本支持httpd,此處我就使用編譯的方式來進行

###編譯安裝apr:
[root@pxe132 ~]# tar xf apr-1.5.0.tar.bz2 
[root@pxe132 ~]# cd apr-1.5.0/
[root@pxe132 apr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@pxe132 apr-1.5.0]# make -j 4 && make install


###編譯安裝apr-util:
[root@pxe132 ~]# tar xf apr-util-1.5.2.tar.bz2 
[root@pxe132 ~]# cd apr-util-1.5.2/
[root@pxe132 apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util 
                                          --with-apr=/usr/local/apr                                 
[root@pxe132 apr-util-1.5.2]# make -j 4 && make install 

###查看編譯安裝後的結果:
[root@pxe132 ~]# rpm -q apr
apr-1.4.8-3.el7.x86_64
[root@pxe132 ~]# rpm -q apr-util
apr-util-1.5.2-6.el7.x86_64


4、編譯安裝httpd

[root@pxe132 ~]# yum -y install pcre-devel  openssl-devel  libevent-devel 

[root@pxe132 ~]# tar xf httpd-2.4.6.tar.bz2 
[root@pxe132 ~]# cd httpd-2.4.6/
[root@pxe132 httpd-2.4.6]# ./configure 
--prefix=/usr/local/apache  ##安裝路徑
--sysconfdir=/etc/httpd24  ##配置文件路徑
--enable-so  ##支持動態裝卸載DSO機制,DSO是動態共享對象,可實現模塊動態生效
--enable-ssl ##支持SSL/TLS 可實現https功能,需要安裝openssl-devel開發工具
--enable-cgi  ##支持CGI腳本 默認對非線程的MPM(多路處理)模塊開啓
--enable-rewrite  ##支持URL重寫
--enable-defalte  ##支持壓縮功能
--enable-modules=most ##支持動態啓用的模塊 {all|most}
--enable-mpms-shared=all ##支持動態加載的MPM模塊 {most|all}
--with-mpm=prefork  ##設置默認啓用的mpm模式 {prefork|worker|event}
--with-pcre ##使用指定的pcre庫,需要安裝pcre-devel工具
--with-zlib ##使用指定的zlib庫
--with-apr=/usr/local/apr  ##指定apr安裝路徑
--with-apr-util=/usr/local/apr-util  ##指定apr-util安裝路徑


此時我們就可以啓動服務:
[root@pxe132 ~]# /usr/local/apache/bin/apachectl start 
但是這樣操作不是太方便,所有我們後面還需要做些操作:


5、添加PATH環境變量

[root@pxe132 ~]# vim /etc/profile.d/httpd24.sh 
                export PATH=/usr/local/apache/bin:$PATH

[root@pxe132 ~]# source /etc/profile.d/httpd24.sh ###重讀下文件路徑,使其立馬生效
[root@pxe132 ~]# echo $PATH
/usr/local/apache/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


6、導出頭文件:

[root@pxe132 ~]# ln -sv /usr/local/apache/include/ /usr/include/httpd24


7、啓動服務

[root@pxe132 ~]# apachectl start 
[root@pxe132 ~]# ss -tnl 
State      Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN     0      128                         *:22                                      *:*                  
LISTEN     0      128                 127.0.0.1:631                                     *:*                  
LISTEN     0      100                 127.0.0.1:25                                      *:*                  
LISTEN     0      128                 127.0.0.1:6012                                    *:*                  
LISTEN     0      128                        :::80                                     :::*


9、測試下httpd服務是否正常:

[root@pxe132 ~]# curl 192.168.1.103
<html><body><h1>It works!</h1></body></html>


二、編譯安裝mariadb服務(192.168.1.104)


1、爲了安全我們我mysql建立專門的用戶和組,讓其以普通用戶的身份運行

[root@bogon ~]# groupadd -r mysql 
[root@bogon ~]# useradd -r mysql -g mysql 
[root@bogon ~]# id mysql
uid=988(mysql) gid=983(mysql) groups=983(mysql)


2、建立數據可數據存放的目錄,此處需要注意權限的問題

[root@bogon ~]# mkdir -p /data/mydata
[root@bogon ~]# chown -R mysql:mysql /data/mydata/  ###此文件在後面我們安裝包的時候會用到


3、解壓mariadb安裝包到/usr/local目錄下

[root@bogon ~]# tar xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local


4、創建一個軟鏈接方便使用

[root@bogon ~]# ln -sv /usr/local/mariadb-5.5.46-linux-x86_64/ mysql 
‘mysql’ -> ‘/usr/local/mariadb-5.5.46-linux-x86_64/’


5、此時我們可以進入mysql的目錄去看下,發現裏面的屬組合屬主都是root,所有需要改下權限

[root@bogon ~]# cd /usr/local/mysql/
[root@bogon mysql]# ll
total 204
drwxr-xr-x.  2 root root   4096 Jul 21 14:39 bin
-rw-r--r--.  1  500  500  17987 Oct 10  2015 COPYING
-rw-r--r--.  1  500  500  26545 Oct 10  2015 COPYING.LESSER
drwxr-xr-x.  3 root root     17 Jul 21 14:39 data
-rw-r--r--.  1  500  500   8245 Oct 10  2015 EXCEPTIONS-CLIENT
drwxr-xr-x.  3 root root     18 Jul 21 14:39 include
-rw-r--r--.  1  500  500   8694 Oct 10  2015 INSTALL-BINARY
drwxr-xr-x.  3 root root   4096 Jul 21 14:39 lib
drwxr-xr-x.  4 root root     28 Jul 21 14:39 man
lrwxrwxrwx.  1 root root     39 Jul 21 14:42 mariadb-5.5.46-linux-x86_64 -> /usr/local/mariadb-5.5.46-linux-x86_64/
drwxr-xr-x. 11 root root   4096 Jul 21 14:39 mysql-test
-rw-r--r--.  1  500  500 108813 Oct 10  2015 README

[root@bogon mysql]# chown -R root.mysql ./*  ###更改文件的權限


6、使用mysql自己提供的scripts腳本文件mysql_install_db文件來安裝數據庫,其中指明用戶和數據可存放目錄(就是       我們在上邊剛開始的時候進行創建的用戶和數據存放路徑)

[root@bogon mysql]# scripts/mysql_install_db --user=mysql --datadir=/data/mydata
                    ###此處需要注意必須在mysql目錄下進行,切換到裏面去就不行了


7、爲mariadb提供配置文件,在support-files中有模板(my-large.conf)

[root@bogon mysql]# cp support-files/my-large.cnf /etc/my.cnf


8、編輯配置文件添加數據庫存放的目錄信息

datadir=/data/mydata     ###指明mysql的數據存放路徑
innodb_file_per_table = ON     ##成爲獨立表空間
skip_name_resolve = ON   ##跳過名稱解析


9、提供mysql服務啓動腳本,這個腳本在我們的support-file有模板(mysql.server)

[root@bogon support-files]# cp mysql.server /etc/rc.d/init.d/mysqld  
[root@bogon support-files]# chkconfig --add mysqld  ###添加到服務啓動


10、添加環境變量

[root@bogon ~]# vim /etc/profile.d/mysql.sh 
                export PATH=/usr/local/mysql/bin:$PATH
[root@bogon ~]# source /etc/profile.d/mysql.sh


11、導出頭文件

[root@bogon local]# ls
bin  etc  games  include  lib  lib64  libexec  mariadb-5.5.46-linux-x86_64  mysql  sbin  share  src
[root@bogon local]# 
[root@bogon local]# ln -sv include/ /usr/include/mysql
‘/usr/include/mysql’ -> ‘include/’


12、導出庫文件

[root@bogon local]# vim /etc/ld.so.conf.d/mysql.conf
添加:/usr/local/mysql/lib


13、啓動服務,測試是否正常

[root@bogon local]# systemctl start mysqld 
[root@bogon local]# ss -tnl 
State      Recv-Q Send-Q     Local Address:Port    Peer Address:Port              
LISTEN     0      50           *:3306     *:*    

[root@bogon local]# mysql 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.46-MariaDB-log MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>


三、編譯安裝php(192.168.1.110)

1、安裝開發包組及依賴關係的包

[root@pxe130 ~]# yum groupinstall Development tools Server Platform Development 
[root@pxe130 ~]# yum -y install bzip2-devel libmcrypt-devel libxml2-devel openssl-devel


2、編譯安裝php

[root@pxe130 ~]# tar xf php-5.4.26.tar.bz2 
[root@pxe130 ~]# cd php-5.4.26/
./configure --prefix=/usr/local/php --with-openssl --with-mysql=mysqlnd
 --with-pdo-mysql=mysqlnd --with-mysql=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 

[root@pxe130 php-5.4.26]# make -j 4 && make install

  注意:支持fpm是需要把--with-apxs給去掉,添加--enable-fpm,此兩項是不可以同時使用


3、提供php提供配置文件

[root@pxe130 php-5.4.26]# cp php.ini-production /etc/php.ini


4、提供php-fpm腳本,並添加到服務啓動列表

[root@pxe130 php-5.4.26]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@pxe130 php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm 
[root@pxe130 php-5.4.26]# chkconfig --add php-fpm


5、提供php-fpm配置文件

[root@pxe130 php]# cd /usr/local/php
[root@pxe130 php]# cp etc/php-fpm.conf.default etc/php-fpm.conf


6、啓動服務

[root@pxe130 php]# systemctl start php-fpm
[root@pxe130 php]# ss -tnl 
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128       127.0.0.1:9000                          *:*

到此時我們的httpd mariadb php服務都已經全部編譯安裝好,下面我們需要來部署LAMP環境了!

---------------------------------------------------分割線------------------------------------------------------------

部署LAMP環境配置:


一、配置httpd:(192.168.1.103)

1、啓用支持fastFCGI的模塊

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so


2、啓用虛擬主機

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


3、添加兩行使支持php

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


4、配置虛擬主機

[root@pxe132 ~]# vim /etc/httpd24/extra/httpd-vhosts.conf
Directory Index index.php
<VirtualHost 192.168.1.103:80>
    DocumentRoot "/data/vhost1/www1"
    ServerName  wp.magedu.com
    ProxyRequests off
    ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.110:9000/data/vhost1/www1/$1
   <Directory "/data/vhost1/www1">
        Options None
        AllowOverride None
        Require all granted
   </Directory>

</VirtualHost>


<VirtualHost 192.168.1.103:80>
    DocumentRoot "/data/vhost2/www2"
    ServerName pam.magedu.com
    ProxyRequests off
    ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.110:9000/data/vhost2/www2/$1
     <Directory "/data/vhost2/www2">
         Options None
         AllowOverride None
         Require all granted
     </Directory>
</VirtualHost>


5、創建網頁路徑

[root@pxe132 ~]# mkdir -p /data/vhost1/www1
[root@pxe132 ~]# mkdir -p /data/vhost2/www2

[root@pxe132 ~]# echo "vhost1" >/data/vhost1/www1/index.html 
[root@pxe132 ~]# echo "vhost2" >/data/vhost2/www2/index.html


6、重啓服務測試是否正常

[root@pxe132 ~]# apachectl -t 
Syntax OK
[root@pxe132 ~]# apachectl restart 
[root@pxe132 ~]# curl http://wp.magedu.com
vhost1
[root@pxe132 ~]# curl http://pam.magedu.com
vhost2    ###ok我們httpd服務是沒問題


二、配置php-fpm(192.168.1.110)

1、配置php監聽地址信息

[root@pxe130 ~]# vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid  #啓用
listen.allowed_clients = 192.168.1.103 ##監聽允許htpd的IP地址
listen = 192.168.1.110:9000 ##監聽php可以與外部通信的IP地址

[root@pxe130 ~]# systemctl restart php-fpm.service 
[root@pxe130 ~]# ss -tnl 
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128    192.168.1.110:9000                          *:*


2、創建與http網頁相同的路徑。然後測試php和http之間是否正常

[root@pxe130 ~]# mkdir -p /data/vhost1/www1
[root@pxe130 ~]# mkdir -p /data/vhost2/www2

[root@pxe130 ~]# vim /data/vhost1/www1/index.php
<?php
phpinfo();
?>
   
[root@pxe130 ~]# vim /data/vhost2/www2/index.php

<?php
phpinfo();
?>


3、測試:


wKioL1eQu4uBqGe9AABi9s6YhII627.png

wKiom1eQu4vzlZ64AABmehlwExA776.png

ok說明我們的php和httpd連接時正常的



三、配置mariadb(192.168.1.104)

1、創建表和授權用戶權限

MariaDB [(none)]> create database wpdb;###用於WordPress準備
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on wpdb.* to 'wpuser'@'192.168.%.%' identified by 'wppass';
Query OK, 0 rows affected (0.03 sec)


MariaDB [(none)]> create database pma;  ###用於phpmyadmin準備
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> grant all on pma.* to 'pmauser'@'192.168.%.%' identified by 'pmapass';
Query OK, 0 rows affected (0.00 sec)


2、在php服務中編寫下測試頁,測試php和mariadb是否連接正常

[root@pxe130 ~]# vim /data/vhost1/www1/index.php 

<?php
$conn = mysql_connect('192.168.1.104','wpuser','wppass');
        if ($conn)
                echo "ok";
        else
                echo "no";
phpinfo();
?>
                                                                                                


[root@pxe130 ~]# vim /data/vhost2/www2/index.php 

<?php
$conn = mysql_connect('192.168.1.104','pmauser','pmapass');
        if ($conn)
                echo "ok";
        else
                echo "no";
phpinfo();
?>


3、測試

wKiom1eQwGSh_ydpAABefhao8-Q718.png

wKioL1eQwGWymYljAABdpkWZyQ4732.png


ok到現在我們的LAMP平臺環境是搞好了!!

---------------------------------------------------分割線-----------------------------------------------------------

基於LAMP部署應用WordPress和phpmyadmin

此處以下的操作在php服務器中進行:

一、部署WordPress

1、解壓、配置連接密碼和用戶及數據庫地址

[root@pxe130 ~]# unzip wordpress-4.3.1-zh_CN.zip 
[root@pxe130 ~]# mv wordpress /data/vhost1/www1/
[root@pxe130 ~]# cd /data/vhost1/www1/wordpress/
[root@pxe130 wordpress]# mv wp-config-sample.php wp-config.php 
[root@pxe130 wordpress]# vim wp-config.php 

/** WordPress數據庫的名稱 */
define('DB_NAME', 'wpdb');

/** MySQL數據庫用戶名 */
define('DB_USER', 'wpuser');

/** MySQL數據庫密碼 */
define('DB_PASSWORD', 'wppass');

/** MySQL主機 */
define('DB_HOST', '192.168.1.104');

2、此時我們需要把WordPress這個目錄個傳到http服務器主頁訪問的路徑下

root@pxe130 www1]# scp -r wordpress/ [email protected]:/data/vhost1/www1/


二、部署phpmyadmin

1、解壓,配置

[root@pxe130 ~]# unzip phpMyAdmin-4.4.14.1-all-languages.zip
[root@pxe130 ~]# mv phpMyAdmin-4.4.14.1-all-languages /data/vhost2/www2/
[root@pxe130 www2]# ln -sv phpMyAdmin-4.4.14.1-all-languages/ phpmyadmin
[root@pxe130 www2]# vim phpmyadmin/libraries/config.default.php

$cfg['blowfish_secret'] = 'tSQRO02T+grA6rvJHCXr';
$cfg['Servers'][$i]['host'] = '192.168.1.104'; ###數據庫服務地址
$cfg['Servers'][$i]['user'] = 'pmauser';
$cfg['Servers'][$i]['password'] = 'pmapass';


2、將phpmyadmin傳一份給http服務器的相對應路徑下

[root@pxe130 www2]# scp -r phpmyadmin/ [email protected]:/data/vhost2/www2/


測試:


wKioL1eQ0uWynWKWAAEnu7UaZJg549.png

wKioL1eQ0uXybYieAACA0xosxJk547.png


4、壓力測試:

Server Software:        Apache/2.4.6
Server Hostname:        wp.magedu.com
Server Port:            80

Document Path:          /wordpress
Document Length:        239 bytes

Concurrency Level:      1000
Time taken for tests:   3.096 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10006
Total transferred:      4672802 bytes
HTML transferred:       2391434 bytes
Requests per second:    3229.61 [#/sec] (mean)
Time per request:       309.635 [ms] (mean)
Time per request:       0.310 [ms] (mean, across all concurrent requests)
Transfer rate:          1473.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1   64 319.1      3    3030
Processing:     1   55 186.0     21    1454
Waiting:        1   54 185.9     20    1454
Total:         12  120 426.7     24    3042

Percentage of the requests served within a certain time (ms)
  50%     24
  66%     25
  75%     26
  80%     27
  90%     30
  95%    691
  98%   1649
  99%   2462
 100%   3042 (longest request)


編譯安裝xcache緩存加速

1、解包生成配置

[root@pxe130 /]# tar xf xcache-3.2.0.tar.bz2 
[root@pxe130 /]# cd xcache-3.2.0/
[root@pxe130 xcache-3.2.0]# /usr/local/php/bin/phpize 
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525

[root@pxe130 xcache-3.2.0]# ./configure --enable-xcache 
--with-php-config=/usr/local/php/bin/php-config


[root@pxe130 xcache-3.2.0]# make && make install


2、配置xcache

[root@pxe130 ~]# cp /xcache-3.2.0/xcache.ini  /etc/php.d/
[root@pxe130 ~]# vim /etc/php.d/xcache.ini 

添加:
[xcache-common]
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
修改下緩存大小:
xcache.size  =               200M


3、重啓php-fpm服務,此時index.php頁面應該就會有xcache支持了

[root@pxe130 ~]# systemctl restart php-fpm.service

wKioL1eQ3ymTuriDAAAweZVcPls113.png

在進行壓力測試::

[root@bogon ~]# ab -n 10000 -c1000 http://wp.magedu.com/wordpress
Server Software:        Apache/2.4.6
Server Hostname:        wp.magedu.com
Server Port:            80

Document Path:          /wordpress
Document Length:        239 bytes

Concurrency Level:      1000
Time taken for tests:   2.128 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10000
Total transferred:      4670000 bytes
HTML transferred:       2390000 bytes
Requests per second:    4700.07 [#/sec] (mean)
Time per request:       212.763 [ms] (mean)
Time per request:       0.213 [ms] (mean, across all concurrent requests)
Transfer rate:          2143.49 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1   37 116.1     23    1028
Processing:     1   46 129.4     26    1480
Waiting:        1   40 129.8     20    1474
Total:         24   83 189.7     49    1646

Percentage of the requests served within a certain time (ms)
  50%     49
  66%     52
  75%     53
  80%     55
  90%     59
  95%     78
  98%    726
  99%   1458
 100%   1646 (longest request)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章