LAMP簡單架構實驗:Apache+NFS+MySQL

實驗要求


  1. 兩臺WEB服務器,Apache-2.4[編譯] + PHP-5.6.14[編譯];

  2. 數據庫服務器, MariaDB-5.4.46[通用二進制];

  3. NFS服務器,存放網頁文件;

  4. DNS中做輪循,分別指向這兩臺WEB服務器,起到負載均衡的作用,當然也可以做單點故障切換;

  5. 搭建的是DZ論壇,要求實現負載均衡,要保證數據一致,即通過web1訪問的論壇數據和web2一致;

拓撲如下:

wKioL1YzFBzx8zlMAA3cwI7OQDQ648.bmp


實驗步驟1.部署WEB1


1.1 安裝編譯開發環境

yum  groupinstall "Development Tools" "Server Platform Development" -y

1.2 編譯安裝Apr-1.5『因爲Apache2.4依賴1.4以上版本的apr和apr-util』

./configure --prefix=/usr/local/apr
make && make install

此處遇到報錯:

Error:rm: cannot remove `libtoolT': No such file or directory

解決:編輯目錄下configure文件,注視掉 # $RM "$cfgfile"

1.3 編譯安裝Apr-util

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

1.4 編譯安裝Apache-2.4

需指明apr、apr-util路徑,否則會自動尋找,如果系統上有1.4以下版本的apr可能會出錯!

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd/ --enable-so 
--enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork

1.5 創建apache用戶,爲httpd2.4進程運行

groupadd -r -g 48 apache
useradd -r -u 48 -g 48 apache

1.6 編輯apache配置文件,以apache用戶身份運行web進程

vi /etc/httpd/httpd.conf
164行 User  apache
165行 Group apache

1.7 準備PHP安裝環境

yum -y install zlib zlib-devel bzip2 bzip2-devel freetype freetype-devel libmcrypt libmcrypt-devel libxml2 libxml2-devel libxslt libxslt-devel libpng libpng-devel libjpeg-turbo libjpeg-turbo-devel curl libcurl-devel gd-devel openssl

細心的你一定發現這裏的包大多成對出現,請注意一般-devel附包都未安裝,devel包需要指定EPEL源,反正我用的是Aliyun的EPEL源 http://mirrors.aliyun.com/repo/

也許一些特殊的CMS需要特別的PHP庫支持,可以通過PHP的phpize後期方便的編譯後調用即可。


1.8 編譯安裝libiconv

wget 
./configure --prefix=/usr/local/libiconv
make && make install

1.9 編譯安裝PHP

  ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/ --with-apxs2=/usr/local/apache/bin/apxs --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-bz2 --enable-xml --with-xsl --with-libxml-dir  --with-mcrypt  --with-openssl --with-curl  --with-iconv=/usr/local/libiconv --enable-sockets --enable-short-tags --enable-static --enable-gd-native-ttf --enable-ftp --enable-maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

關於PHP和MySQL結合驅動問題,可以參考我的博文《》


1.10 編輯php配置文件

mkdir /etc/php/
cp /download/php-5.6.14/php.ini-production /etc/php/php.ini
vim /ect/php/php.ini
data.timezone = “Asia/Shanghai”    修改時區

1.11 編輯apache主配置文件

vim /etc/httpd/httpd.conf
LoadModule php5_module   modules/libphp5.so

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

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>	

請注意由於加載的libphp5.so使用的相對路徑,而/usr/local/apache並未寫到環境變量,所以可能會出問題。建議 export PATH=/usr/local/apache:/usr/local/apache/bin:$PATH


1.12 編輯一個測試頁面,測試是否成功!

wKiom1YzGrCx5vVvABNDZGqK5DE548.bmp


至此,Web服務器端已搭設完畢!web1和web2安裝步驟相同。


實驗步驟2.部署MariaDB Server


2.1 通用二進制安裝MariaDB

在之前已經成功部署過MariaDB Server,請參照我博文 《MariaDB通用二進制部署手冊》


2.2 創建數據庫

在架構中MariadDB Server是獨立於Web服務器的,所以Web服務器上的PHP引擎通過php-mysql驅動連接到MariaDB Server是基於TCP/IP協議棧的遠程連接,這需要在數據庫服務器上授權

CREATE DATABASE BBS;
GRANT ALL PRIVILEGES ON BBS.* TO 'bbs'@'10.134.140.%' IDENTIFIED BY 'zxczxc' WITH GRANT OPTION;
FLUSH PRIVILEGES;

2.3 查看數據庫授權信息

wKioL1YzHYqyvHT2AAZAkCKk770108.bmp

至此,數據庫服務器搭建完畢!


實驗步驟3.部署NFS Server


架構中NFS Server承擔着存放網頁數據的功用,要能夠被前端的Web1 Server和Web2 Server正常讀寫!

3.1 創建目錄,解壓DZ BBS

mkdir /wwwroot && cd /wwwroot
wget 
unzip Discuz_X3.2_SC_UTF8.zip

3.2 創建用戶

這個用戶要與前端Web Server上的apache用戶的UID、GID一樣,這是爲了保證前端的web服務器掛載NFS後讀寫權限的有效且安全

groupadd -r -g 48 apache
useradd -r -u 48 -g 48 apache
setfacl -R -m u:apache:rwx /wwwroot/

3.3 編輯NFS配置文件

vi /etc/exports
/wwwroot 10.134.140.63(rw,async,all_squash,anonuid=48,anongid=48) 10.134.140.64(rw,async,all_squash,anonuid=48,anongid=48)
service nfs start

至此,NFS服務器搭建完畢,所有網頁內容均存放於/wwwroot/bbs下,只允許10.134.140.63/64掛載該目錄,且對該目錄的使用身份映射爲NFS Server上的apache用戶,而apache用戶對/wwwroot/權限爲rwx


實驗步驟4.掛載NFS,配置主站點


4.1 在Web Server上掛載遠程的wwwroot

mkdir /wwwroot/
setfacl -R -m u:apache:rwx /wwwroot/
mount -t nfs 10.134.140.66:/wwwroot/ /wwwroot/

4.2 編輯主站點配置文件

vi /etc/httpd/httpd.conf

DocumentRoot "/wwwroot/bbs"
<Directory "/wwwroot/bbs">
....
</Directory>

4.3 在Web Server2上同樣進行掛載操作!修改主站點配置文件。

至此,所有配置已準備完畢,確保所有服務正常啓動後,進行測試!


實驗步驟5.測試架構


5.1 訪問Web Server1進行DZ論壇的初始化安裝

檢查環境中,可以看到各組件支持情況,很幸運,全部滿足!

wKiom1YzIziiOIBlABIq-PRJsJg603.bmp



5.2 設置運行環境

[略過,無影響,是設置DZ論壇羣集的]


5.3 創建數據庫

wKiom1YzJK6glOh0ABK8WNm-VGI952.bmp

下一步後,靜待安裝完成!即可成功訪問DZ論壇了!


5.4 通過Web1 Server發帖子

wKiom1YzJZLAS4kuABDjiE-3QOw242.bmp


5.5 通過Web2 Server驗證

wKioL1YzJevBeK9dABTH7ENfU6Y595.bmp


架構實驗基本完成!


幾點小結


  1. 前端的DNS服務器限於篇幅我沒做,直接使用63/64地址訪問效果一致~偷懶了;

  2. 試驗中安裝DZ論壇發現提示"數據庫連接錯誤" ,最後發現是iptables規則導致,清空OK;

  3. 絕大多數情況下,編譯安裝提示某個包xx未裝,而自己的確裝了,這一般都是由於xx-devel附包未裝,指定好EPEL源,安裝即可;

  4. 在PHP編譯時已經預先編譯了常見的組件,如果某些CMS需要特別組件,無需重新編譯,phpize可動態編譯新組建,然後修改php.ini調用該so即可;

  5. 絕大多數服務器啓動失敗,無外乎3個原因:

    1. 特定目錄的權限不夠!

    2. 安裝或啓動腳本使用了相對路徑,而未寫入環境變量!

    3. 配置文件有問題!

希望這幾點能幫助到你,當然以上架構還可以將PHP與Apache拆分,前端Apache響應靜態內容,通過FastCGI將php動態請求交給PHP Server!

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