天天看點

LAMP平台基于NFS實作web伺服器負載均衡

前言

随着通路量的逐漸增大,一台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>&lt;IfModule dir_module&gt;</code>

<code>    </code><code>DirectoryIndex index.html index.php</code>

<code>&lt;</code><code>/IfModule</code><code>&gt;</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>&lt;VirtualHost *:80&gt;</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>&lt;Directory </code><code>"/web/blog"</code><code>&gt;</code>

<code>        </code><code>Options none</code>

<code>        </code><code>AllowOverride none</code>

<code>        </code><code>Require all granted</code>

<code>&lt;</code><code>/Directory</code><code>&gt;</code>

<code>&lt;</code><code>/VirtualHost</code><code>&gt;</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