實驗要求php
兩臺WEB服務器,Apache-2.4[編譯] + PHP-5.6.14[編譯];html
數據庫服務器, MariaDB-5.4.46[通用二進制];前端
NFS服務器,存放網頁文件;mysql
DNS中作輪循,分別指向這兩臺WEB服務器,起到負載均衡的做用,固然也能夠作單點故障切換;web
搭建的是DZ論壇,要求實現負載均衡,要保證數據一致,即經過web1訪問的論壇數據和web2一致;sql
拓撲以下:數據庫
實驗步驟1.部署WEB1apache
1.1 安裝編譯開發環境vim
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!