
可能你沒有看過我的上一篇文章,那我就在這裡簡單回顧一下上次的内容。我有兩個樹莓派:pi1 和 pi2。pi1 的 ip 位址為 192.168.0.121,pi2 的 ip 位址為 192.168.0.122。我把它們組合成為 glusterfs 叢集系統,共享一個存儲卷,卷名為 gv0。并且這個 gv0 被挂載在兩個樹莓派上,挂載點都是 /mnt/gluster1,這樣一來,兩個樹莓派能同時通路到這個共享卷。最後我測試了下系統的容錯性,将共享卷挂載到第三個實體機上,并執行共享卷上的一個簡單的腳本:列印系統時間并輸出到 gv0 上的一個檔案内,然後輪着關掉兩台樹莓派,檢測這個備援系統是否還能用。
現在我手上有這個經過檢驗的存儲系統,我要做的是把這個系統做成有容錯功能的 web 伺服器叢集。樹莓派的 cpu 處理速度和記憶體資源都不是很高,好在對付一個靜态 web 伺服器已經是綽綽有餘了。我故意把這個例子做得非常簡單,因為我覺得如果你能擺平這個簡單的例子,你也能處理複雜一點的問題了。
<a target="_blank"></a>
雖然我也比較喜歡 apache,但在資源有限的情況下,像 nginx 這樣功能全、性能高、資源占用少的 web 伺服器是比較理想的選擇。在 raspbian 的預設源中存在 nginx,是以我隻要登入一台樹莓派并且輸入以下指令:
$ sudo apt-get update
$ sudo apt-get install nginx
nginx 安裝好後,建立配置檔案 /mnt/gluster1/cluster ,内容如下:
server {
root /mnt/gluster1/www;
index index.html index.htm;
server_name twopir twopir.example.com;
location / {
try_files $uri $uri/ /index.html;
}
注意:我這裡把伺服器命名為“twopir”,你可以根據自己愛好命名你的網站。另外我把 web 伺服器的根目錄設定為 /mng/gluster1/www。這樣,我就能把我的靜态檔案放在這個共享存儲系統内,進而讓兩個樹莓派主機都通路到它們。
現在删除預設的 nginx 配置檔案,将上面配好的配置檔案作為 nginx 的配置檔案。在 debian 系統中,nginx 将它的配置檔案像 apache 一樣放在 sites-available 和 site-enabled 兩個目錄下面。虛拟主機配置文檔放在 sites-available 中,而 sites-enabled 目錄包含了你想生效的配置檔案的軟連結。
$ cd /etc/nginx/sites-available
$ sudo ln -s /mnt/gluster1/cluster .
$ cd /etc/nginx/sites-enabled
$ sudo rm default
$ sudo ln -s /etc/nginx/sites-available/cluster .
現在我已經放好了配置檔案,但系統還不存在上面所說的 web 伺服器根目錄。下一步就是建立目錄 /mnt/gluster1/www,并複制 index.html 檔案進去。當然你也可以建立自己定義的 index.html 檔案,但先複制一個已有的檔案是個不錯的選擇:
$ sudo mkdir /mnt/gluster1/www
$ cp /usr/share/nginx/www/index.html /mnt/gluster1/www
重新開機 nginx 服務:
$ sudo /etc/init.d/nginx restart
現在去 dns 伺服器為192.168.0.121的樹莓派配置記錄。你可以根據自己的情況配置你自己的域名和 ip 位址。現在在浏覽器上輸入 http://twopir/ 然後出現預設的 nginx 首頁。如果你檢視下 /var/log/nginx/access.log 檔案,你可以看到點選網頁留下的記錄。
nginx 能正常工作後,配置第二個樹莓派。因為我們已經将配置檔案都放在 glusterfs 共享目錄下,我們現在要做的隻是安裝 nginx,建立相關的軟連結,重新開機 nginx:
現在兩個主機共享同一份檔案,下一步是設定備援系統的關鍵步驟。雖然你完全可以設定一個類似心跳的服務用于輪詢檢測哪個樹莓派的 web 服務是開啟的,但這裡有個更好的方法:給同一個主機名指定兩個 dns 的 a 記錄,分别指向你的兩個樹莓派(譯注:a 記錄就是将域名轉化為 ip 位址的記錄,dns 包含很多記錄方式,如 a 記錄、ptr 記錄、mx 記錄等等),這就是傳說中的 dns 負載均衡,dns 通路主機時,如果主機名對應多個 ip 位址,dns 會随機傳回這些 ip 位址的順序:
$ dig twopir.example.com a +short
192.168.0.121
192.168.0.122
因為傳回随機的順序,使用者可以均勻地往兩台伺服器發送請求,這個負載均衡的機制就是由 dns 伺服器的多條 a 記錄來提供。相對于 dns 的負載均衡技術,我更感興趣的是 web 浏覽器如何處理請求失敗的情況。當浏覽器通過網頁主機獲得兩條 a 記錄,并且第一條記錄所在的主機當機了,浏覽器幾乎立刻就切到另一條記錄上。切換效率快到使用者根本察覺不出來,這可比傳統的心跳線輪循請求主機快多了。
是以在你正在使用的 dns 伺服器上添加你的樹莓派叢集的兩個 ip 位址,然後試試 dig 指令,就像我在上面使用過的一樣,你也應該能得到兩個 ip 位址。
當你為同一個域名設定好了兩個 a 記錄,這套叢集就可以提供容錯服務了。打開兩個終端并分别登入到兩個樹莓派,運作 tail -f /var/log/ngnix/access.log 指令,你可以監視 web 伺服器的通路情況。當你通過浏覽器通路網頁時,你可以看到在一台樹莓派上産生了通路日志,而在另外一台的日志裡什麼也沒有出現。現在你可以重新整理幾次頁面,當你覺得你對能成功通路到 web 伺服器感到滿意了,你可以重新開機響應你請求的那台樹莓派,然後再重新整理幾次頁面。也許浏覽器上會出現一個短暫的不可通路信号,但會馬上重定向到第二台樹莓派上,你會看到一樣的頁面,并且你能通過終端通路日志了解具體情況。當第一台樹莓派啟動後,你在浏覽器上根本不會察覺到。
随機重新開機一台樹莓派,隻要有一台線上,web 伺服器就能提供服務。這是一個非常簡單的案例,你可以把你其它的靜态檔案放到 /mnt/gluster1/www 上,為你提供真正有價值的服務,現在好好享受你的低成本容錯叢集 web 伺服器吧。
原文釋出時間為:2014-03-09
本文來自雲栖社群合作夥伴“linux中國”