實驗要求
兩臺WEB服務器,Apache-2.4[編譯] + PHP-5.6.14[編譯];
數據庫服務器, MariaDB-5.4.46[通用二進制];
NFS服務器,存放網頁文件;
DNS中做輪循,分別指向這兩臺WEB服務器,起到負載均衡的作用,當然也可以做單點故障切換;
搭建的是DZ論壇,要求實現負載均衡,要保證數據一致,即通過web1訪問的論壇數據和web2一致;
拓撲如下:
實驗步驟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 編輯一個測試頁面,測試是否成功!
至此,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 查看數據庫授權信息
至此,數據庫服務器搭建完畢!
實驗步驟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論壇的初始化安裝
檢查環境中,可以看到各組件支持情況,很幸運,全部滿足!
5.2 設置運行環境
[略過,無影響,是設置DZ論壇羣集的]
5.3 創建數據庫
下一步後,靜待安裝完成!即可成功訪問DZ論壇了!
5.4 通過Web1 Server發帖子
5.5 通過Web2 Server驗證
架構實驗基本完成!
幾點小結
前端的DNS服務器限於篇幅我沒做,直接使用63/64地址訪問效果一致~偷懶了;
試驗中安裝DZ論壇發現提示"數據庫連接錯誤" ,最後發現是iptables規則導致,清空OK;
絕大多數情況下,編譯安裝提示某個包xx未裝,而自己的確裝了,這一般都是由於xx-devel附包未裝,指定好EPEL源,安裝即可;
在PHP編譯時已經預先編譯了常見的組件,如果某些CMS需要特別組件,無需重新編譯,phpize可動態編譯新組建,然後修改php.ini調用該so即可;
絕大多數服務器啓動失敗,無外乎3個原因:
特定目錄的權限不夠!
安裝或啓動腳本使用了相對路徑,而未寫入環境變量!
配置文件有問題!
希望這幾點能幫助到你,當然以上架構還可以將PHP與Apache拆分,前端Apache響應靜態內容,通過FastCGI將php動態請求交給PHP Server!