LNMP 分散式叢集(五):ThinkPHP專案部署

dfface發表於2020-03-18

前言

LNMP 分散式叢集的部署實踐 系列文章:

回顧一下基本的架構:

架構(序號代表IP地址:192.168.177.1X)

基本上我們已經搭好了平臺,接下來就是為了web應用能在叢集上工作進行一些必要的環境配置。

配置

專案下載:

連結: pan.baidu.com/s/1mhPkx2S 密碼: rft8

7號建立資料庫和使用者

/usr/local/mysql/bin/mysql -uroot -p123456
CREATE DATABASE itshop;
GRANT USAGE ON *.* TO 'itshop'@'192.168.177.14' IDENTIFIED BY '123456';
GRANT USAGE ON *.* TO 'itshop'@'192.168.177.15' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON itshop.* TO 'itshop'@'192.168.177.14';
GRANT ALL PRIVILEGES ON itshop.* TO 'itshop'@'192.168.177.15';
FLUSH PRIVILEGES;
EXIT
複製程式碼

7號機建立資料庫和使用者

3、4、5號部署專案

tar -zxvf itshop-1.0.tar.gz
rm -rf /data/www
mv itshop-1.0 /data/www
chown -R www:www /data/www
ls /data/www
複製程式碼

7號匯入資料

curl -o data.sql http://192.168.177.13/data.sql
ll data.sql
/usr/local/mysql/bin/mysql -uroot -p123456
USE itshop;
source /root/data.sql
複製程式碼

4、5號配置專案

cd /data/www
rm -f data.sql
vi Application/Common/Conf/config.php
'DB_DEPLOY_TYPE' => 1,  # 分散式資料庫支援
'DB_RW_SEPARATE' => TRUE,  # 讀寫分離
'DB_TYPE' => 'MYSQL', 
'DB_HOST' => '192.168.177.17,192.168.177.18', 
'DB_NAME' => 'itshop',
'DB_USER' => 'itshop',
'DB_PWD' => '123456',
'DB_PORT' => '3306',
'DB_PREFIX' => 'shop_',	
'DB_CHARSET' => 'utf8',	
複製程式碼

測試:

http://192.168.177.11/?m=admin&c=login&a=index

訪問測試

4、5號配置單入口

針對Nginx在server塊中,進行配置解決 PATHINFO 格式的問題:

rewrite  ^/index.php/(.*) /index.php?s=$1 break;
location / {
    try_files $uri $uri/ /index.php?s=$uri;
}
location ~ \.(gif|jpg|jpeg|png|bmg|swf|xml|ico|css|js|map|txt)$ {
    expires 30d;
}
複製程式碼

3、4、5號配置Session

當服務端PHP開啟Session時,每收到一個新客戶端瀏覽器的請求,就會為這個瀏覽器建立一個Session檔案儲存在伺服器中,其檔名是一串自動生成的祕鑰,伺服器利用Set-Cookie將祕鑰響應給瀏覽器,下次請求就會攜帶Cookie中的祕鑰進行傳送。網站使用者登入功能的原理就是將使用者ID儲存到Session檔案中,從而區分每個請求對應的使用者。如果通過瀏覽器提交的祕鑰找不到Session檔案,就說明該使用者沒有登入。

如果使用伺服器本地儲存Session的話,每個伺服器都不一樣,無法正確識別使用者。因此我們需要兩臺伺服器共享Session資料,利用Memcached 儲存Session 就是非常好的方案。

vi /data/www/.user.ini
session.save_handler = memcached
session.save_path = "192.168.177.19:11211"

service php-fpm reload
複製程式碼

2號上傳專案靜態檔案

tar -zxvf itshop-1.0.tar.gz
cp -R itshop-1.0/Public /data/share
複製程式碼

4、5號配置目錄路徑,上傳與下載分離

vi /data/www/Application/Common/Conf/config.php # 配置模板路徑,上傳與下載分離
'TMPL_PARSE_STRING' => array(
        '__PUBLIC__' => '//file.itshop.test/Public',
'__UPLOAD_API__' => '//upload.itshop.test/upload.php',
),
複製程式碼

注意我們之前修改本地主機的hosts檔案,例如我的MacBook Pro上的vi /etc/hosts

192.168.177.11 itshop.test
192.168.177.11 www.itshop.test
192.168.177.12 file.itshop.test
192.168.177.13 upload.itshop.test
複製程式碼

3號連結上傳目錄,配置Nginx只允許上傳

cd /data/www
rm -rf data.sql Public/Uploads
ln -s /data/share/Public/Uploads Public/Uploads  # 將NFS共享目錄連結為上傳目錄
chmod -R 777 Public/Uploads
vi /usr/local/nginx/conf/nginx.conf
location / {
        return 403;
    }
location /upload.php {  # 替換原來的  ~ \.php$
        try_files $uri =404;
        add_header Access-Control-Allow-Origin *;  # 新增此行允許跨域請求
        fastcgi_pass unix:/dev/shm/php-cgi.sock;
        include fastcgi.conf;
    }

service nginx reload
複製程式碼

9個虛擬機器

訪問速度極快(靜態檔案伺服器有快取哦)

效能測試

我們這裡補充做一下效能測試,要知道這九臺虛擬機器的配置都是一樣的:

Server1 處理器和記憶體

利用Apache中提供的ApacheBench工具,該工具可以在一臺計算機中向一個URL地址傳送大量的併發請求,然後檢測伺服器響應這些請求花了多長時間,有多少請求處理失敗。故此我們來測試叢集的併發能力。

yum -y install httpd-tools
ab -c 500 -n 5000 http://itshop.test/
複製程式碼

ab

結果這樣啦

-c表示Concurrency Level即併發使用者數,-n表示總的請求數量。在使用ab命令時,併發了過高會出現錯誤:Too many open files,由於系統開啟檔案數量限制了。MAC中應該是自帶了Apache。檢視系統開啟檔案數量,命令:ulimit -a。修改開啟檔案數量,修改成1024,命令:ulimit -n 1024,檢視修改後情況,命令:ulimit -n。——ApacheBench(ab)壓力測試工具

Apache JMeter 有軟體介面,用來做壓力和效能測試也不錯。

LNMP 分散式叢集的部署實踐 系列文章:


dfface 的版權宣告:所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處,嚴禁商業用途!

相關文章