建立巨量儲存 -- 使用Gluster




Cluster(叢集)的應用主要有四種,叢集儲存(Storage Cluster)、HA(High Available高可用)、Load Balance與High Performance等,每一種都可以適用於不同的需求。


這篇文章筆者想測試並介紹關於Storage Cluster的應用。目前這個Gluster很熱門的使用再雲端架構的底層,而雲端這個爭議的名詞不在筆者此文章的討論範圍,講了雲端的應用會有不同的派別支持者提出不同的堅持,這並非筆者想要得到的結果。所以底下筆者就一般企業可以用來做最基本的應用而撰寫,這也是筆者在業界所見,提出很基礎卻能大幅提昇企業效能的應用。


一般企業常用到File Server,通常都隨便買了一部Server,就用其本機磁碟做出分享,然後在一段時間過了之後,發現空間不夠了、硬碟老舊了,然後就找SI估價,用疊床架屋的方式把Storage的空間再加大(比如串Nas或其他Box,)......,最後整個硬體架構亂七八糟,不僅效能差且機房也亂。


在企業應用裡,File Server扮演了部門存放資料的儲存池,提供同部門的員工共同維護與使用所需要的資料,這樣的主機在十年前,或許一個部門給個50G就很足夠。隨著時代的演進,不僅資料量越來越多,單一檔案也相對越來越大,若仍以五年前、十年前的配備與規格來提供服務(或許三年好了),絕對不敷所需。堅持購買單一儲存體的情況只是讓IT隨時都要想辦法在空間不足的情況下,再採購新設備、資料搬移。


管理學中,企業資源的浪費,不僅是與公司財務帳面有關的浪費才是浪費,人員重複做相同的事情更是一項影響產能的重要因素。今天我們買了10TB的NAS,我們期望它可以撐多久呢?若產線相關部門的空間需求,瞬間將10TB的NAS使用殆盡,且需要更大的磁碟空間,迫在眉梢,IT來得及評估或來得及找廠商來做產品簡報嗎(廠商光要推新產品給你就花了多少時間了)?

當確定之後,又怎麼有辦法知道何時這些空間將在何時發生短缺的情況?買了新的設備,路徑又要重新設定,或是層層的掛載(如NFS或CIFS),Server與Server彼此間關係複雜,牽一髪動全身,如此效能又怎麼會好呢?


這時高度的「可擴充性」就是如此情況的選擇。我們建構一套可隨時擴充的儲存體,資料可以進行同步,且在硬體故障時可將獨立的Storage Server停機進行維修,更重要的是,這樣的Storage Server便宜又容量大,且共同運作、效能高,這不是很適合企業使用嗎?

建置SAN的環境是有錢的公司在做的事情,當然也有低階的SAN,但是儲存體的效能在硬碟數量太少的情況下是非常低落的。除了SAN以外不代表就沒有其他選擇。這篇文章筆者要建構四個Storage Node,彼此擁有共同的FileSystem,並且測試資料存放時,將其中一部Storage Node關閉測試是否資料有遺失的情況;並且測試增加新Storage Node之後,整體FileSystem的空間增長。這邊無法進行效能測試,因為筆者的環境是虛擬主機,硬碟數目不夠的話無法測試效能。(單一硬碟,同時多session讀寫會讓效能很差。)


這邊筆者要使用CentOS 6.3來進行實測。
下方表格是筆者這次的環境配置:





Gluster可以將多部主機串起,共同運作,然後實現上述的四種應用。我們的環境,要將所有的Node(節點,視為電腦即可,先不管特例)置於同一個網路環境中,所以歸納此次實測的重點,總共有三大部份:


1. 環境設定,要符合Gluster特性與基本要求

a. 所有Node的連結

b. 網路設定(先關閉iptables, 並disable SELinux,最後再將iptables加入規則)

c. 儲存體


2. 套件安裝

Glusterfs套件安裝


3. 測試


一、 安裝


從第一個Node, Gluster1開始。
筆者是參考官方網站的設定法,所以這邊也直接使用官方文件使用的xfs格式來做FileSystem.

[[email protected] ~]# yum search mkfs.xfs # 先找找看有什麼套件是XFS Filesystem相關的。

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: centos.mirror.cdnetworks.com

* extras: centos.mirror.cdnetworks.com

* updates: centos.mirror.cdnetworks.com

============================== Matched: mkfs.xfs ===============================

xfsprogs.i686 : Utilities for managing the XFS filesystem

xfsprogs.x86_64 : Utilities for managing the XFS filesystem # 我們要的就是這個套件

[[email protected] ~]# yum install xfsprogs #將套件安裝起來

Gluster官方建議使用這個FileSystem,應該是取其對於大檔案的處理流暢與訊息傳遞快速的特性,細節還要在研究才明白。


二、格式化磁碟並掛載


[[email protected] ~]# mkfs.xfs -i size=512 /dev/vdb #筆者所附加的10G硬碟,代號為/dev/vdb,將其格式化為XFS格式


[[email protected] ~]# mkdir -p /GlusterFS/brick1 # 建立即將要用來掛載/dev/vdb的路徑


[[email protected] ~]# vi /etc/fstab #編輯/etc/fstab然後將下面這行加在檔案最後。
/dev/vdb /GlusterFS/brick1 xfs defaults 1 2


[[email protected] ~]# mount -a && mount
/dev/mapper/vg_gluster1-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/vda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/vdb on /GlusterFS/brick1 type xfs (rw)
[[email protected] ~]#


/dev/vdb on /GlusterFS/brick1 type xfs (rw) #已經掛載上了


[[email protected] ~]# yum search gluster* #尋找gluster相關套件
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.mirror.cdnetworks.com
* extras: centos.mirror.cdnetworks.com
* updates: centos.mirror.cdnetworks.com
Warning: No matches found for: gluster*

No Matches found#系統說找沒有,所以我們照官方的做法將gluster的source加入repository之中。

[[email protected] ~]# wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo

[[email protected] ~]# ls /etc/yum.repos.d/

CentOS-Base.repo CentOS-Media.repo glusterfs-epel.repo

CentOS-Debuginfo.repo CentOS-Vault.repo

[[email protected] ~]#

#多了一個glusterfs專用的repo檔了。


[[email protected]er1 ~]# yum install glusterfs-{,fuse,server} #官方文件少加了一個"-"符號,照做會無法下載哦!

#上面這個指令,讓系統安裝了如下三個套件,這是用於組成Gluster Storage的每個Node都必需要安裝的套件。做完Gluster1之後,我們其餘的Node都要照著做一次。

glusterfs-fuse x86_64 3.3.1-1.el6 glusterfs-epel 64 k

glusterfs-server x86_64 3.3.1-1.el6 glusterfs-epel 540 k

glusterfs x86_64 3.3.1-1.el6 glusterfs-epel 1.8 M

[[email protected] ~]# service glusterd start
Starting glusterd: [ OK ]
[[email protected] ~]# service glusterd status
glusterd (pid 1368) is running...
[[email protected] ~]#


這邊我們需要做個動作,因為CentOS是Enterprise導向的作業系統,預設的設定比較嚴謹要一一手動調整。

a. 關閉防火牆

[[email protected] ~]# /etc/init.d/iptables stop
iptables:正在清除防火牆規則: [ 確定 ]
iptables:正在設定 chains 為 ACCEPT 政策:filter [ 確定 ]
iptables:正在卸載模組: [ 確定 ]
[[email protected] ~]#


b. disable SELinux

[[email protected] ~]# vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=disabled #從enforcing更改為disabled

# SELINUXTYPE= can take one of these two values:

# targeted - Targeted processes are protected,

# mls - Multi Level Security protection.

SELINUXTYPE=targeted


[[email protected] ~]# setenforce 0 # 手動設定SELinux為Permissive,下次重開機會因為已經更改過設定檔而disabled.
[[email protected] ~]# getenforce
Permissive
[[email protected] ~]#


c. 將gluster相關的服務設定開機啟動
若沒有設定,萬一主機壞了維修,關機再開機的時候,會發現node一直都沒回到cluster的成員中,會有confused的狀況。

[[email protected] ~]# chkconfig
glusterd 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
glusterfsd 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
[[email protected] ~]# chkconfig glusterd on
[[email protected] ~]# chkconfig glusterfsd on


到這邊為止,我們已經將第一個Node(Gluster1)設定完畢
接著將Gluster1的所有設定,一一的在Gluster2, Gluster3以及Gluster4設定完畢。
這時,四部主機都掛載10G的XFS File System /etc/vdb在/GlusterFS/brick1。
注意:若偷懶使用VM Clone的方式,記得不要先安裝Gluster套件,因為Gluster會產出一個UUID代表每一個Node。若在安裝Gluster之後才做Clone,Gluster就會發現每個Node都具有同一個UUID而導致錯誤的產生。

接著我們要將四部主機的XFS串連起來。

三、串連FileSystem




先在每部主機的/etc/hosts加入IP對應,對應如下:

[[email protected] ~]# vi /etc/hosts


192.168.1.101 Gluster1
192.168.1.102 Gluster2
192.168.1.103 Gluster3
192.168.1.104 Gluster4

#上面的對應加在檔案最後就可以了。

[[email protected] ~]# gluster peer probe Gluster2
Probe successful
[[email protected] ~]# gluster peer probe Gluster3
Probe successful
[[email protected] ~]# gluster peer probe Gluster4
Probe successful
[[email protected] ~]# 現在Gluster2, Gluster3, Gluster4都已經被納入整個Cluster的成員了。

將4個Nodes的File System 串起。



[[email protected] ~]# gluster volume create GlusterFS replica 2 Gluster1:/GlusterFS/brick1/ Gluster2:/GlusterFS/brick1/ Gluster3:/GlusterFS/brick1/ Gluster4:/GlusterFS/brick1/
Creation of volume GlusterFS has been successful. Please start the volume to access data.
[[email protected] ~]# 成功了!
上方有一個參數"replica",是可以讓我們決定這個Storage Cluster是以鏡像(一模一樣複製另一份)來做,如此可確保資料的可靠度。也有stripe的方式可以供我們設定成類似Raid 0一樣的串法。

[[email protected] ~]# gluster volume start GlusterFS

Starting volume GlusterFS has been successful

[[email protected] ~]# 啟動Volume就可以開始使用這個大空間了!


[[email protected] ~]# gluster volume info #show一下File system的資訊

Volume Name: GlusterFS
Type: Distributed-Replicate
Volume ID: 23e71c1c-1cfa-4729-b2b6-d9c27df03e52
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: Gluster1:/GlusterFS/brick1
Brick2: Gluster2:/GlusterFS/brick1
Brick3: Gluster3:/GlusterFS/brick1
Brick4: Gluster4:/GlusterFS/brick1
[[email protected] ~]# 現在我們切換到Client Node,來試試mount global file system。

Client端並未安裝GlusterFs的Client端套件,所以必須要先事先安裝才能使用。

[[email protected] ~]# wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo #一樣,把Gluster的source加到自己的主機上。

[[email protected] ~]# yum install glusterfs #安裝gluster file system套件

[[email protected] ~]# yum install glusterfs-fuse #安裝Gluster User Space套件才能讓系統辨識glusterfs這種type的 File System.


[[email protected] ~]# mount -t glusterfs Gluster1:/GlusterFS /GlusterFS/#此處掛載的對象,是我們在Storage Node上Create的Volume Name,筆者這次取名取得不好,若有混淆或不懂的地方,在麻煩留言跟筆者說下,我會協助您找出問題。

[[email protected] ~]# df -h
檔案系統 Size Used Avail Use% 掛載點
/dev/mapper/vg_glusterclient-lv_root
5.5G 830M 4.4G 16% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/vda1 485M 52M 408M 12% /boot
Gluster1:/GlusterFS 20G 65M 20G 1% /GlusterFS
[[email protected] ~]#

#這邊可以看到在/GlusterFS這個路徑已經將我們的Gluster FileSystem 掛載上去了。

那為什麼只有20G呢?不是已經建立了4個Node,並且都各有10G的空間?
那是因為我們做的是"replica 2",也就是將4個Node做成2個鏡像File System。

照官方文件的作法,Create 100個檔案測試看看

[[email protected] GlusterFS]# for i in `seq -w 0 99`; do cp -rp /var/log/messages* /GlusterFS/copy-test-$i; done


下圖可以看出,所有Storage Node都有一模一樣的資料了。




我們再來測試,將Gluster2直接關閉



關閉之後,再查一次資料是否正常運作。



資料還在!所以證明這個Cluster在一個Node毀損的時候,還是可以繼續進行的。

光測試這樣還不足以證明他的功能性,筆者想再開一個主題來摧殘這個file system。


有了這套系統之後,可以自由的新增Storage,還能在系統故障時進行停機維修,而且買Storage就可以將成本降到很低。

各家Global File System都有其缺陷,如果我們真想要用在Production的Server上,一定要確保備份有做到,再怎麼可靠的系統都有Crash的風險,防護措施做得越完善,風險則降得越低。

如果大家對於備份的系統也有興趣的話,小弟還有實作一套Open Source的Enterprise Level Backup system可以分享給大家。



沙發!讚一個!
樓主認為 VM 用在現實世界中是否可行?
若果不行,建議硬件會是怎樣的呢?

a00ylc00 wrote:
使用再...(恕刪)

應該是 「使用在」
這篇還滿豐富的,其實它官網有說Ext3/4都可以用,建議100GB以上負載需求以上用XFS,但btrfs甚至ReiserFS應該都是可行只是它沒廣泛測試過。


tungchan2012 wrote:
沙發!讚一個!
樓主...(恕刪)

軟硬體建議在此,最少也要有兩台機器(或VM),個人認為兩台實體比較有意義,如果是自己架著玩就算了,要是主機故障那這個Virtual Cluster也Crash了,如果只用一台機器VM跑想必I/O會很吃重,IOMMU / VT-d應該是滿適合的。
http://www.gluster.org/community/documentation/index.php/Gluster_3.2:_Checking_Minimum_Requirements
一香(箱)、兩香(箱)、三香(箱)、四香(箱)、五香(箱) (老闆聽了很爽一直搬) 老闆,我要張君雅五香海苔一包
其實這種架構「一定」要用實體的主機與多硬碟來建置。

文中小弟也有寫到,虛擬環境只是實驗用,在單顆硬碟的情況下,效能會變得很差,因為磁頭讀寫手臂只有一個,在存取的時候來來回回應付multi-session會沒有效能可言。


一般在建置這種環境,都是用非常多的Storage Server,如下圖:
現在很多廠商在製造這樣的設備,而且不會很貴。



為了要完整利用所有硬碟,還會用一種裝置叫dom的,我們在公司環境是使用SATA界面的Dom,像這種:
用這樣的裝置就可以將OS與DATA Store分開,充分使用這些硬碟而不必犧牲任何一部分的空間在OS上。






用數十個Node或上百個、上千個Node來兜這樣的環境。
這種Global File System當然最好所有硬體規格都一樣,但是Gluster很驕傲的表示自己可以使用異質環境來串,不過在不同規格的硬碟或其他的差異,一定還有其他需要另外去調整就是了。

虛擬主機,應該是使用這樣的底層File System,然後運行於其上。這樣就可以視為Shared Storage,要做Live Migration或HA都可以比較方便達成。當然要使用Global File System來作為VM的底層storage還有很多選擇,效能平測與建議,也有很多文章再討論這樣的架構可以參考。

目前小弟都是以自己的虛擬主機來作這些測試,因為公司的設備不能用來當玩具玩,所以分享出來的尺度比較沒有那個壯觀,不好意思啦!
這個分享值得用力給個讚! 在虛擬化的過程當中,若不用此文的建議的方法建構一個底層的shared storage,那就稱不上虛擬化了,不是嗎? 期待大大的下一個實測!
不知這跟ZFS和LVM有哪些差異? 有何優勢呢?
這個問題問得很好,也很有深度。
看來小弟要測試的東西多很多了,花點時間安裝比較一下。

LVM小弟的程度僅止於再Local Host上做File System的resize等等變化,如果要跨node還沒有實作,但在RedHat的GFS上有搭配CLVM的作法,如果有大大熟悉的再麻煩分享一下,小弟這邊也會逐步一個一個做實測再分享給大家。感謝!

今日熱門文章 網友點擊推薦!

文章分享
評分
複製連結