2013年1月17日 星期四

建立一個高可用性(HA, High-Availability)的網路儲存系統


本案例將介紹如何利用GlusterFS建立一個高可用性(HA, High-Availability)的網路儲存系統。目標是希望能夠將二台網路伺服器的儲存空間透過網路執行鏡像(Mirror)的功能,當使用者對網路儲存系統寫入檔案時,二台伺服器會自動複製(replicate),即使有一台伺服器故障也不會造成資料的損失。

本案例將利用三台安裝Ubuntu 12.04作業系統的電腦來完成:
Server1.eagle.com.tw  ----  IP: 192.168.0.100 (server)
Server2.eagle.com.tw  ----  IP: 192.168.0.101 (server)
Client1.eagle.com.tw  ----  IP: 192.168.0.102 (client)

所有的步驟均需以root權限執行,因此建議先執行 sudo su 或者在底下步驟的每個指令之前自行加入 sudo 指令。

1. 修改 /etc/hosts 內容 (非必須) 為了能夠快速而正確的解析電腦名稱,請先將此三台電腦的 /etc/hosts 內容修改如下:

127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.eagle.com.tw     server1
192.168.0.101   server2.eagle.com.tw     server2
192.168.0.102   client1.eagle.com.tw     client1

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

註:網域名稱請依照實際網路環境輸入,如果不欲使用電腦名稱而打算全部使用IP來完成,則此步驟可以省略,無須更動 /etc/hosts內容。

2. 在server1和server2安裝GlusterFS Server:

apt-get install glusterfs-server
glusterfsd --version

此時應該可以看到類似底下的內容代表安裝正確完成: glusterfs 3.2.5 built on Jan 31 2012 07:39:58 Repository revision: git://git.gluster.com/glusterfs.git Copyright (c) 2006-2011 Gluster Inc.http://www.gluster.com GlusterFS comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of GlusterFS under the terms of the GNU General Public License.

此案例擬將資料同時寫入server1和server2的 /data 目錄,因此請分別在此 二台電腦新增一個 /data 目錄:
mkdir /data

3. 在server1將server2加入叢集,並檢視叢集成員狀態:

gluster peer probe server2.eagle.com.tw
gluster peer status

如果一切正常,應該可以看到類似底下的內容: Number of Peers: 1 Hostname: server2.eagle.com.tw Uuid: 7cd93007-fccb-4fcb-8063-133e6ba81cd9 State: Peer in Cluster (Connected)

4. 在server1建立卷冊(testvol)將二台server的 /data目錄連接起來:

# gluster volume create testvol replica 2 transport tcp server1.eagle.com.tw:/data server2.eagle.com.tw:/data

執行之後會看到:Creation of volume testvol has been successful. Please start the volume to access data.代表卷冊建立成功。

5. 在server1啟動卷冊:
# gluster volume start testvol

6. 在server1檢視卷冊資訊,並設定允許使用卷冊的網路位址或網段:
# gluster volume info

此時會出現底下的資訊,代表卷冊在二台servere間正常運作 Volume Name: testvo Type: Replicate Status: Started Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: server1.eagle.com.tw:/data Brick2: server2.eagle.com.tw:/data

接著設定允許使用卷冊的範圍,在此案例中設定僅client1可以使用,在實際運作中也可以設定整個網段:
# gluster volume set testvol auth.allow 192.168.0.102

7. 在client1安裝 GlusterFS Client,並建立一個目錄來掛載卷冊:

# apt-get install glusterfs-client
# mkdir /mnt/glusterfs
# mount.glusterfs server1.eagle.com.tw:/testvol /mnt/glusterf

接著修改client1的 /etc/fstab 設定開機之後即自動掛載,請編輯 /etc/fstab 並在檔案內容尾端加入一列: server1.eagle.com.tw:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0

8. 測試:

首先在client1建立二個檔案,並使用ls –l 指令察看目錄:
# touch /mnt/glusterfs/test1
# touch /mnt/glusterfs/test2
# ls –l /mnt/glusterfs/

此時應該可以看到 /mnt/glusterfs 目錄下有 test1 和 test2二個檔案。

接著server1或 server2關機,然後在client1繼續建立二個檔案:
# touch /mnt/glusterfs/test3
# touch /mnt/glusterfs/test4
# ls –l /mnt/glusterfs/

此時應該可以看到 /mnt/glusterfs 目錄下有 test1、test2 、test3和 test4四個檔案。這表示當任何一台server發生故障時,並不會影響卷冊中所儲存的資料,用戶端可以繼續正常使用網路儲存系統中的檔案。

接著將剛剛關機的server1或 server2重新啟動,然後在client1再執行一次ls –l /mnt/glusterfs/ 指令察看目錄,感覺上似乎沒有什麼變化,實際上server1和server2已經自動複製(replicate)剛剛離線時產生的檔案。

請在server1和servre2執行 ls –l /data 就可以發現二台server的檔案內容是一樣的。至此,整個高可用性的網路儲存系統就已經建立並測試完成。如果網路速度夠快,將server1和server2置放在不同的位置,也可以形成另一種異地備援;如果再配合筆者先前分享的『使用KVM建立虛擬機器』一文,將虛擬機器映像檔(Virtual Machine Image file)存放在此案例的卷冊中,就可以完成一朵簡單的私有雲(Private Cloud)。


註:
GlusterFS是一種分散式的檔案系統,透過網路將不同的儲存系統結合成一個儲存池,最大容量可達72 brontobytes。

沒有留言:

張貼留言