淺談網頁服務器群的設計 (A group of web server)

前陣子, 在師兄那邊聽了一個他的經驗, 一間寄存公司其中一個網頁服務器壞了的經驗.

話說一個裝有 800 客戶的網頁服務器只用 raid 5 作備份, 沒有備份服務器 (HA / heartbeat)的低成本制作,
某天一下子死掉兩個硬碟. 之後的 18 小時, 客戶服務部就 ...

在 HSBC 中學得的服務器管理知識, 告訴我任何作實戰 production 的服務器必需有備份,
而且是能夠在 15 分鐘內回復的備份. 不過, 現實情況是一些中小型機構, 沒有兩倍的成本去做備份.
所以回復時間在 18-24小時內都可以接受.

現時中小企的 IT 成本, 軟件比硬件高得多. 所以如果選用開源軟件,
再買一個 HKD $3000 的小服務器就安全得多了.

本文是以一個案例作介紹以虛擬技術把服務器模組化, 令備份 / 資源調動時方便得多.
那我師兄的故事, 如果是我的話怎樣處理 ? 先發現問題所在

問題 1: 裝有 800 客戶的服務器沒有虛擬化, 在救援 / 備份時造成不便
問題 2: 沒有備用服務器, 服務器停止的 18 小時中客戶服務部的開支比買一個小型服務器更高
問題 3: 除 raid 5 以外, 沒有資料備份. 原因可能是沒有虛擬化令備份程序複雜

所以根本問題是服務器的設計, 與技術人員的能耐無關 !

解決方法: 沒有人說備份服務器的比例一定是 1:1 的, 以一部備份多部 production 亦可.
因成本與客戶要求而定, 備份服務器不一定要有 raid, 不一定要有足夠的計算能力 (cpu power / cpw).
因此, 一部 HKD $3000 的服務器, 只要能夠作備份就足夠有餘了. 

但出現的問題是, 

1) 如果我把所有客戶的資料都備份, 資源需求很大. 這時可考慮 rsync, rsync 是增加式資料備份,
只備份已更改 / 新增檔案

以下是 rysnc 的示範, 在linux備份服務器輸入:
sudo rsync -avl --delete --exclude=/不包括的資料夾1 --exclude=/不包括的資料夾2 
來源地址:/要備份的資料夾 /本地儲存資料的位置

2) CPU 已經用來服務客人了, 怎樣做備份
這時需要 at 指令 / crontab, 可以設定只在特定時間作備份. 以前在 HSBC 時, 備份會在股市收市後進行.
以 at command 作示範

at 1900     ← 意思是當天下午 7:00
> 備份指令 (如以上的 rsync)
> 完成後 CTRL + D

除此之外, 把服務器虛擬化, 有些選擇是把服務器放到一個 img 檔案中.
這樣, 備份時把整個 img 檔案備份就能佔用較小資源.

3) 出事了, 怎樣啟動備用服務器 ?

你可以選用 HA (high availability) 設計, 並以 heartbeat 啟動, 這樣就可以作即時回復. 但成本較高.
在這文中不作詳談. 一般來說, 可以手動. 但先要為服務器作一個好的設計.

以下是一個網頁服務器群的設計

所謂服務器模組化就是一個服務器只作一種服務. 以前的日子, 成本會很高. 但在虛擬化之下就不算問題. 參考虛擬化制作: http://www.yubis.net/blog/keith/summary-virtualbox-vmware-xen-351?page=2

在服務器模組化出名的有 MICROSOFT VIRTUAL SERVER, 但使用 xen 的話更好. 在使用服務器群時會出現一個重大問題. 就是同一種服務不能有兩個服務器, 因為同一個 ip 地址 不能用同一個 port. 例如 port 80, 路由器只能指向一個服務器. 這時, 模組化就會不攻自破.

以下是一個解決方法

web_server_group1

上圖中有兩個網頁服務器. External 是給客人用的. 但如果想把公司的網頁都用同一個 ip 地址放出去, 那就要 proxy 服務器的幫助. 先在 External 中開動 apache 的 proxy modules

# a2enmod proxy*

#/etc/init.d/apache2 restart

例如公司的網頁是 abc.xyz.org, 那分別在 dns 服務器, External & Internal 中加上圖中的設定, abc.xyz.org 就可以提供服務了.

以上說的與師兄的案例有什麼關連 ?

試把圖中 internal web server 當成師兄故事中所死掉的服務器, 那不就把 External 中的設定改一下, 由 死掉的服務器指向備份中的服務器就成了嗎 ? 同樣方法可以加上更多的網頁服務器  !

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s