前言
LNMP 分散式叢集的部署實踐 系列文章:
- 《(一):Nginx+PHP平臺搭建與負載均衡配置》
- 《(二):NFS檔案伺服器的搭建與檔案緩衝上傳的配置》
- 《(三):MySQL主從資料庫伺服器的搭建》
- 《(四):Memcached 快取伺服器的搭建》
- 《(五):ThinkPHP專案部署》
- 《(六):keepalived 高可用方案》
回顧一下基本的架構:

基本上我們已經搭好了平臺,接下來就是為了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
複製程式碼

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
複製程式碼


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

利用Apache中提供的ApacheBench工具,該工具可以在一臺計算機中向一個URL地址傳送大量的併發請求,然後檢測伺服器響應這些請求花了多長時間,有多少請求處理失敗。故此我們來測試叢集的併發能力。
yum -y install httpd-tools
ab -c 500 -n 5000 http://itshop.test/
複製程式碼


-c
表示Concurrency Level即併發使用者數,-n
表示總的請求數量。在使用ab命令時,併發了過高會出現錯誤:Too many open files,由於系統開啟檔案數量限制了。MAC中應該是自帶了Apache。檢視系統開啟檔案數量,命令:ulimit -a
。修改開啟檔案數量,修改成1024,命令:ulimit -n 1024
,檢視修改後情況,命令:ulimit -n
。——ApacheBench(ab)壓力測試工具
Apache JMeter 有軟體介面,用來做壓力和效能測試也不錯。
LNMP 分散式叢集的部署實踐 系列文章:
- 《(一):Nginx+PHP平臺搭建與負載均衡配置》
- 《(二):NFS檔案伺服器的搭建與檔案緩衝上傳的配置》
- 《(三):MySQL主從資料庫伺服器的搭建》
- 《(四):Memcached 快取伺服器的搭建》
- 《(五):ThinkPHP專案部署》
- 《(六):keepalived 高可用方案》
dfface 的版權宣告:所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明出處,嚴禁商業用途!