前言
隨著訪問量的逐漸增大,一臺web服務器可能已經無法滿足需求,這就需要增加web服務器的數量了,于是問題就來了:如何保證兩臺服務器數據同步呢?本文將講解如何基于NFS實現web服務器的負載均衡及數據同步。
NFS服務介紹
NFS(Network File System)網絡文件系統,允許一個系統通過網絡共享目錄和文件,通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件。NFS本身沒有提供數據傳輸的功能,必須借助于遠程過程調用(RPC)協議來實現數據的傳輸。
配置文件
NFS在CentOS6上的配置文件及服務提供程序
程序包:nfs-utils 腳本:/etc/rc.d/init.d/nfs /etc/rc.d/init.d/nfslock /etc/rc.d/init.d/rpcgssd /etc/rc.d/init.d/rpcidmapd /etc/rc.d/init.d/rpcsvcgssd 配置文件:/etc/exports /etc/sysconfig/nfs #提供額外功能
配置文件詳解
/etc/exports文件格式及選項 文件系統 客戶端(選項) 客戶端(選項) 客戶端:IP、FQDN或DOMAIN、NETWORK 選項: secure:缺省選項,它使用了1024以下的TCP/IP端口實現NFS的連接。指定insecure可以禁用這個選項 rw:這個選項允許 NFS 客戶機進行讀/寫訪問。缺省選項是只讀(ro)。 async:可改進性能,但是如果沒有完全關閉NFS守護進程就重新啟動了NFS服務器,也可能會造成數 據丟失,缺省為為sync no_wdelay:關閉寫延時,如果設置了async,那么NFS就會忽略這個選項 nohide:如果將一個目錄掛載到另外一個目錄之上,那么原來的目錄通常就被隱藏起來或看起來像 空的一樣,要禁用這種行為,需啟用 hide 選項 no_subtree_check:關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查,缺省選項是啟用 子樹檢查 no_auth_nlm:可作為insecure_locks指定,它告訴 NFS 守護進程不要對加鎖請求進行認證。如果 關心安全性問題,就要避免使用這個選項,缺省選項是 auth_nlm 或 secure_locks mp (mountpoint=path): 通過顯式地聲明這個選項,NFS 要求掛載所導出的目錄 fsid=num:通常都在 NFS 故障恢復的情況中使用。如果希望實現 NFS 的故障恢復,請參考 NFS 文檔。 用戶映射的選項: root_squash:不允許root用戶訪問掛載上來的 NFS 卷 no_root_squash:允許 root 用戶訪問掛載上來的 NFS 卷 all_squash:限制所有的 UID 和 GID,只使用匿名用戶,缺省設置是 no_all_squash anonuid 和 anongid:將匿名 UID 和 GID 修改成特定用戶和組帳號
相關命令
查看NFS服務器端共享的文件系統: showmount -e NFSSERVER_IP 掛載NFS文件系統: mount -t nfs SERVER:/path/to/sharedfs /path/to/mount_point exportfs:維護exports文件導出的文件系統表的專用工具 export -ar: 重新導出所有的文件系統 export -au: 關閉導出的所有文件系統 export -u FS: 關閉指定的導出的文件系統 開機自動掛載nfs vim /etc/fstab SERVER:/PATH/TO/EXPORTED_FS /mount_point nfs defaults,_netdev 0 0
NFS實現web服務器負載均衡
工作原理
配置過程
案例要求:
DNS服務器:172.168.10.10(CentOS6.6)
web服務器1:172.16.10.100(CentOS6.6 )
web服務器2:172.16.10.212(CentOS6.6 )
php服務器:172.16.10.110(CentOS6.6)
NFS服務器:172.16.10.110(CentOS6.6)
數據庫服務器:172.16.10.211(CentOS6.6) MariaDB
要求兩臺web服務器上提供同一個站點(blog.scholar.com wordpress站點),站點目錄位于NFS服務器為/web/blog,兩臺web服務器數據需保持統一
請確保各服務器,服務軟件已安裝,我這里已經安裝好了(其實是借用以前的),編譯安裝的神馬的詳見博客
DNS服務器配置
修改正反向區域文件
正向解析
反向解析
檢查語法,啟動服務
NFS服務器配置
創建共享目錄,并設置權限
編輯配置文件,設置共享目錄及客戶端
[root@scholar ~]# vim /etc/exports /web/blog 172.16.10.100(rw,sync) 172.16.10.212(rw,async)
站點文件準備
[root@scholar ~]# unzip wordpress-3.2.1-zh_CN.zip [root@scholar ~]# cd wordpress [root@scholar wordpress]# mv * /web/blog [root@scholar wordpress]# cd /web/blog [root@scholar blog]# cp wp-config-sample.php wp-config.php [root@scholar blog]# vim wp-config.php /** WordPress 數據庫的名稱 */ define('DB_NAME', 'wpdb'); /** MySQL 數據庫用戶名 */ define('DB_USER', 'wpuser'); /** MySQL 數據庫密碼 */ define('DB_PASSWORD', 'wppass'); /** MySQL 主機 */ define('DB_HOST', '172.16.10.211');
啟動服務,查看監聽端口
數據庫服務器配置
為wordpress程序提供數據庫
web服務器配置
啟用相關模塊
[root@scholar ~]# vim /etc/httpd24/httpd.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
啟用虛擬主機
#DocumentRoot "/usr/local/apache/htdocs" #關閉中心主機 Include /etc/httpd24/extra/httpd-vhosts.conf #啟用虛擬主機
使之支持php
<IfModule dir_module> DirectoryIndex index.html index.php </IfModule> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
配置虛擬主機
[root@scholar ~]# vim /etc/httpd24/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/web/blog" ServerName blog.scholar.com ProxyRequests Off #關閉正向代理 ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.10.110:9000/web/blog/$1 #代理至php服務器 <Directory "/web/blog"> Options none AllowOverride none Require all granted </Directory> </VirtualHost>
掛載共享目錄
#可設置開機自動掛載 [root@scholar ~]# vim /etc/fstab 172.16.10.110:/web/blog /web/blog nfs defaults,_netdev 0 0
檢查語法,啟動服務
測試站點是否訪問正常
可以訪問的,接下來我們看一下,數據是否可以同步
指定某一臺服務器IP訪問
我們在這臺服務器登陸,發表一篇博文
現在我們通過另外一臺服務器看一下,是否可以看到剛剛發表的博文
OK,可以看到,數據同步的目的也實現了
The end
“世界那么大,我想去看看…”希望有朝一日我也可以如此灑脫…好了,基于NFS實現web服務器的負載均衡就說到這里了,遇到什么問題可留言,我要去感悟人生去了。以上僅為個人學習整理,如有錯漏,大神勿噴~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/3513
以前有linux工作經歷?初學者知道wp的不多
@stanley:木有啊 以前開過php課 見過wp 不過沒玩過
@書生:cool
don’t forget session status.
@venus:what?
@書生:session可以用redis來保持,redis可用keepalived來進行高可用.