前言
随着通路量的逐漸增大,一台web伺服器可能已經無法滿足需求,這就需要增加web伺服器的數量了,于是問題就來了:如何保證兩台伺服器資料同步呢?本文将講解如何基于NFS實作web伺服器的負載均衡及資料同步。
NFS服務介紹
NFS(Network File System)網絡檔案系統,允許一個系統通過網絡共享目錄和檔案,通過使用NFS,使用者和程式可以像通路本地檔案一樣通路遠端系統上的檔案。NFS本身沒有提供資料傳輸的功能,必須借助于遠端過程調用(RPC)協定來實作資料的傳輸。
配置檔案
NFS在CentOS6上的配置檔案及服務提供程式
1
2
3
4
5
6
7
8
<code>程式包:nfs-utils</code>
<code>腳本:</code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/nfs</code>
<code> </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/nfslock</code>
<code> </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/rpcgssd</code>
<code> </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/rpcidmapd</code>
<code> </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/rpcsvcgssd</code>
<code>配置檔案:</code><code>/etc/exports</code>
<code> </code><code>/etc/sysconfig/nfs</code> <code>#提供額外功能</code>
配置檔案詳解
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<code>/etc/exports</code><code>檔案格式及選項</code>
<code>檔案系統 用戶端(選項) 用戶端(選項)</code>
<code>用戶端:IP、FQDN或DOMAIN、NETWORK</code>
<code>選項:</code>
<code>secure:預設選項,它使用了1024以下的TCP</code><code>/IP</code><code>端口實作NFS的連接配接。指定insecure可以禁用這個選項</code>
<code>rw:這個選項允許 NFS 客戶機進行讀/寫通路。預設選項是隻讀(ro)。</code>
<code>async:可改進性能,但是如果沒有完全關閉NFS守護程序就重新啟動了NFS伺服器,也可能會造成數</code>
<code>據丢失,預設為為</code><code>sync</code>
<code>no_wdelay:關閉寫延時,如果設定了async,那麼NFS就會忽略這個選項</code>
<code>nohide:如果将一個目錄挂載到另外一個目錄之上,那麼原來的目錄通常就被隐藏起來或看起來像</code>
<code>空的一樣,要禁用這種行為,需啟用 hide 選項</code>
<code>no_subtree_check:關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查,預設選項是啟用</code>
<code>子樹檢查</code>
<code>no_auth_nlm:可作為insecure_locks指定,它告訴 NFS 守護程序不要對加鎖請求進行認證。如果</code>
<code>關心安全性問題,就要避免使用這個選項,預設選項是 auth_nlm 或 secure_locks</code>
<code>mp (mountpoint=path): 通過顯式地聲明這個選項,NFS 要求挂載所導出的目錄</code>
<code>fsid=num:通常都在 NFS 故障恢複的情況中使用。如果希望實作 NFS 的故障恢複,請參考 NFS 文檔。</code>
<code>使用者映射的選項:</code>
<code>root_squash:不允許root使用者通路挂載上來的 NFS 卷</code>
<code>no_root_squash:允許 root 使用者通路挂載上來的 NFS 卷</code>
<code>all_squash:限制所有的 UID 和 GID,隻使用匿名使用者,預設設定是 no_all_squash</code>
<code>anonuid 和 anongid:将匿名 UID 和 GID 修改成特定使用者群組帳号</code>
相關指令
<code>檢視NFS伺服器端共享的檔案系統:</code>
<code>showmount -e NFSSERVER_IP</code>
<code>挂載NFS檔案系統:</code>
<code>mount</code> <code>-t nfs SERVER:</code><code>/path/to/sharedfs</code> <code>/path/to/mount_point</code>
<code>exportfs:維護exports檔案導出的檔案系統表的專用工具</code>
<code>export</code> <code>-ar: 重新導出所有的檔案系統</code>
<code>export</code> <code>-au: 關閉導出的所有檔案系統</code>
<code>export</code> <code>-u FS: 關閉指定的導出的檔案系統</code>
<code>開機自動挂載nfs</code>
<code>vim </code><code>/etc/fstab</code>
<code>SERVER:</code><code>/PATH/TO/EXPORTED_FS</code> <code>/mount_point</code> <code>nfs defaults,_netdev 0 0</code>
NFS實作web伺服器負載均衡
工作原理
<a href="http://s3.51cto.com/wyfs02/M02/6B/C0/wKiom1U18TaCuxmVAAJzmgP0_Tc375.jpg" target="_blank"></a>
配置過程
案例要求:
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伺服器配置
修改正反向區域檔案
正向解析
<a href="http://s3.51cto.com/wyfs02/M02/6B/C0/wKiom1U19S3BuH7kAACuy_9EQp8374.jpg" target="_blank"></a>
反向解析
<a href="http://s3.51cto.com/wyfs02/M02/6B/C0/wKiom1U19ejAtIY5AACl_TmlIpE078.jpg" target="_blank"></a>
檢查文法,啟動服務
<a href="http://s3.51cto.com/wyfs02/M00/6B/C0/wKiom1U19gyTs30eAAG1ed50P90734.jpg" target="_blank"></a>
NFS伺服器配置
建立共享目錄,并設定權限
<a href="http://s3.51cto.com/wyfs02/M01/6B/BD/wKioL1U2A87zJwUtAAB6-dMIE9k905.jpg" target="_blank"></a>
編輯配置檔案,設定共享目錄及用戶端
<code>[root@scholar ~]</code><code># vim /etc/exports </code>
<code>/web/blog</code> <code>172.16.10.100(rw,</code><code>sync</code><code>) 172.16.10.212(rw,async)</code>
站點檔案準備
<code>[root@scholar ~]</code><code># unzip wordpress-3.2.1-zh_CN.zip</code>
<code>[root@scholar ~]</code><code># cd wordpress</code>
<code>[root@scholar wordpress]</code><code># mv * /web/blog</code>
<code>[root@scholar wordpress]</code><code># cd /web/blog</code>
<code>[root@scholar blog]</code><code># cp wp-config-sample.php wp-config.php </code>
<code>[root@scholar blog]</code><code># vim wp-config.php </code>
<code> </code>
<code>/** WordPress 資料庫的名稱 */</code>
<code>define(</code><code>'DB_NAME'</code><code>, </code><code>'wpdb'</code><code>);</code>
<code>/** MySQL 資料庫使用者名 */</code>
<code>define(</code><code>'DB_USER'</code><code>, </code><code>'wpuser'</code><code>);</code>
<code>/** MySQL 資料庫密碼 */</code>
<code>define(</code><code>'DB_PASSWORD'</code><code>, </code><code>'wppass'</code><code>);</code>
<code>/** MySQL 主機 */</code>
<code>define(</code><code>'DB_HOST'</code><code>, </code><code>'172.16.10.211'</code><code>);</code>
啟動服務,檢視監聽端口
<a href="http://s3.51cto.com/wyfs02/M01/6B/C1/wKiom1U2BofRd_E6AAD4AalWP0E784.jpg" target="_blank"></a>
資料庫伺服器配置
為wordpress程式提供資料庫
<a href="http://s3.51cto.com/wyfs02/M02/6B/BD/wKioL1U2CFXTz9v3AAHz4kgA7MQ036.jpg" target="_blank"></a>
web伺服器配置
啟用相關子產品
<code>[root@scholar ~]</code><code># vim /etc/httpd24/httpd.conf</code>
<code>LoadModule proxy_module modules</code><code>/mod_proxy</code><code>.so</code>
<code>LoadModule proxy_fcgi_module modules</code><code>/mod_proxy_fcgi</code><code>.so</code>
啟用虛拟主機
<code>#DocumentRoot "/usr/local/apache/htdocs" #關閉中心主機</code>
<code>Include </code><code>/etc/httpd24/extra/httpd-vhosts</code><code>.conf </code><code>#啟用虛拟主機</code>
使之支援php
<code><IfModule dir_module></code>
<code> </code><code>DirectoryIndex index.html index.php</code>
<code><</code><code>/IfModule</code><code>></code>
<code>AddType application</code><code>/x-httpd-php</code> <code>.php</code>
<code>AddType application</code><code>/x-httpd-php-source</code> <code>.phps</code>
配置虛拟主機
<code>[root@scholar ~]</code><code># vim /etc/httpd24/extra/httpd-vhosts.conf </code>
<code><VirtualHost *:80></code>
<code> </code><code>DocumentRoot </code><code>"/web/blog"</code>
<code> </code><code>ServerName blog.scholar.com</code>
<code> </code><code>ProxyRequests Off </code><code>#關閉正向代理</code>
<code> </code><code>ProxyPassMatch ^/(.*\.php)$ fcgi:</code><code>//172</code><code>.16.10.110:9000</code><code>/web/blog/</code><code>$1 </code><code>#代理至php伺服器</code>
<code><Directory </code><code>"/web/blog"</code><code>></code>
<code> </code><code>Options none</code>
<code> </code><code>AllowOverride none</code>
<code> </code><code>Require all granted</code>
<code><</code><code>/Directory</code><code>></code>
<code><</code><code>/VirtualHost</code><code>></code>
挂載共享目錄
<a href="http://s3.51cto.com/wyfs02/M01/6B/BE/wKioL1U2CxuwTz8sAAHIqwRhOfw245.jpg" target="_blank"></a>
<code>#可設定開機自動挂載</code>
<code>[root@scholar ~]</code><code># vim /etc/fstab </code>
<code>172.16.10.110:</code><code>/web/blog</code> <code>/web/blog</code> <code>nfs defaults,_netdev 0 0</code>
<a href="http://s3.51cto.com/wyfs02/M01/6B/BE/wKioL1U2DAvTYlcoAABULjWMB9Q278.jpg" target="_blank"></a>
測試站點是否通路正常
<a href="http://s3.51cto.com/wyfs02/M00/6B/BE/wKioL1U2EHeyRGurAAKSWgZC4-I461.jpg" target="_blank"></a>
可以通路的,接下來我們看一下,資料是否可以同步
指定某一台伺服器IP通路
<a href="http://s3.51cto.com/wyfs02/M00/6B/BE/wKioL1U2EO2DeTy0AAKFCYnW8iw159.jpg" target="_blank"></a>
我們在這台伺服器登陸,發表一篇博文
<a href="http://s3.51cto.com/wyfs02/M01/6B/C2/wKiom1U2D-awufj-AAKXtItNL9s754.jpg" target="_blank"></a>
現在我們通過另外一台伺服器看一下,是否可以看到剛剛發表的博文
<a href="http://s3.51cto.com/wyfs02/M01/6B/BE/wKioL1U2EYmCjgZIAAOxBYCXG14582.jpg" target="_blank"></a>
OK,可以看到,資料同步的目的也實作了
The end
“世界那麼大,我想去看看...”希望有朝一日我也可以如此灑脫...好了,基于NFS實作web伺服器的負載均衡就說到這裡了,遇到什麼問題可留言,我要去感悟人生去了。以上僅為個人學習整理,如有錯漏,大神勿噴~~
本文轉自 北城書生 51CTO部落格,原文連結:http://blog.51cto.com/scholar/1636605