Gluster Storage System

Gluster 架構

使用 Gluster 之前,要先瞭解它的架構以方便在設定時能更加的順利,並且減少除錯的時間。

Gluster 從無到有可以分為 3 個層面,分別為硬體與系統層面、Gluster 層面、最後是 Client / Server 的整體層。

硬體與系統層面

硬體

Hardware_View

所有的服務一定要有硬體設備是沒有異議的,Gluster 設備的挑選通常是一節點可以帶有多顆硬碟的伺服器,但是因為 Gluster 非常的有彈性,在第一次選購時可以使用小型伺服器(可以為沒有 RAID 功能的 4 Bay 伺服器或是普通 PC)。

使用小型伺服器時,至少準備有 8GB 的記憶體與 1GB 的網路環境,在現行的情況下 8GB 記憶體與 1GB 的網路環境已經不難準備,甚至是標準配備了。

如果購買設的資金較為充足的話,依照 Gluster 所建議的方式是使用 16GB 的記憶體、 RAID 6 的磁碟陣列來當作資料儲存的空間與 10GB 的網路連線速度,使用 RAID 6 的原因是陣列成員可以同時損壞兩顆且仍可保持運作,比起 RAID 5 有更佳的容錯機制。16GB 的記憶體可以應付更大量的請求服務。而 10GB 的網路連線速度在於提升 Client / Server 之間的後端傳輸效率,如果無法準備 10GB 網路速度環境的條件下,也請至少確認有 2 或多個 1GB 的網路環境。

會選用 Gluster 儲存系統就是因為它的分散式特性,所以在準備伺服器的時候最少也請以 2 個以上節點為基準,這樣才能 Gluster 發揮分散式的特點,在必要時刻也能夠減少資訊全部損失的風險。

作業系統與檔案系統

System_View.png

Gluster 目前是由 Red Hat 所維護,其所對應的商業產品為 Red Hat Gluster Storage。所以在作業系統的選擇上可以是 Red Hat Gluster Storage、Red Hat Enterprise Linux 加上 Gluster Storage 套件,或是直接使用 Red Hat Enterprise Linux 的重新包裝版本(如 CentOS)加上 Gluster 群社版本。

作業系統以 x86_64 架構較能得到更多的效能與記憶體使用量,因為作業系統單純用來開機與執行 Gluster 與其相關的服務,所以開機磁碟可以用從 SD 等外接設備啟動,而將主要的硬碟儲存空間留給 Gluster 儲存檔案使用。

LVM

Gluster 服務需要設定在一個已格式化過的分割區,建議的做法是將硬碟或 RAID 完成 LVM 2 的 Volume Group 設定,再從 Volume Group 切出需要的 Logical Volume,最後再將 Logical Volume 格式化為 xfs 格式。使用 LVM 的好處是您可以借由 LVM 的 Thin 功能規畫出比實際空間還要大的分割區,待磁碟空間真的不足再額外增加足夠的本機硬碟就可以了,而 Gluster 的快照功能也是依賴 LVM 自身的快照。雖然您可以將 Gluster 直接設定在沒有 LVM 設定的分割區上,但是這樣會失去節點空間延伸與快照的功能。

Gluster 層面

Gluster 的設計是 Server / Client 架構,基本上大多數的設定都是在 Server 中完成。而分散式檔案系統構架所的述求是將多個節點分割區整合為一個大檔的可用空間,比方每個節點提供 2GB 的可用空間,那麼 10 個節點就可以提供 2 * 10 = 20GB 的可用空間。

完成 Gluster 系統是由 Peer(節點)、 Brick(儲存區)、Volume(空間卷)組成,並且需要由 glusterd 的系統服務加上 gluster 指令完成設定。

Peer

簡單來說就是節點的意思,在 Gluster 設定的一開始要先設定儲存系統是由哪幾個節點所組成一個 Pool(儲存池),每個節點可以是不同的硬體架構所組成,所以您可以混合不同的硬體架構(如實體伺服器、PC 或是虛擬主機)加入儲存系統中。

如果您使用了多個虛擬主機(比如 Linode)又不想浪費其空間,或是使用 AWS 但不是使用 S3 服務,則 Gluster 是很好的考量。

Brick

GlusterFS_View

在意思上為儲存區,也就是設定好 LVM 並完成格式化之後的可用邏輯磁碟區。

所有 Client 的檔案都會被放在 Brick 上,Brick 所提供的容量大小是由 LVM 設定而來,所以當單一個 Brick 損毀或空間滿的時候,只會照成部份的檔案不見或無法寫入,而不是所有檔案都會遺失。

Volume

Gluster_Volume_View

Volume 也就是最終 Client 可以使用的項目,設定好 Volume 之後只要在 Client 端使用 mount 指令就可以使用 Gluster 檔案系統,而在 Client 所看到的可用容量自動計算其 Brick 成員加總而成的總空間大小。

一個 Volume 是由多個 Brick 所組成的,依據其 Volume 的分散式狀態所得的可用空間也不一樣,比如設定 Volume A 是由 brick1(10GB) 與 brick2(10GB) 使用分散式設定,那麼會得到 10GB + 10GB = 20GB 的總容量;若是使用複寫式,則會因為資料同時保留兩份在不同 Bricks 中,所以其容量也只會有 10GB。

glusterd

所有同屬一個儲存系統的節點都要執行 glusterd 的服務,並開於開機時就啟動,glusterd 是負責完成各個節點之間的通訊,也處理 Client 的請求。

gluster

glusterglusterd 不同,gluster 是用來設定 volumebricksnapshotquota 的管理工具,也就是有關於 Gluster 的所有設定都是使用 gluster 指令完成。

位於同一個 Pool 的節點在設定各種項目時,只要選擇其中一台完成指令操作就可以了,而不用在每一個節點處理。

Client / Server 整體面

Service_View

完成 Volume 設定之後,Client 可以使用 glusterfsNFSCIFS 協定完成存取作業。

  • glusterfs:

    顧名思義這就是直接使用 Gluster File System,glusterfs 是一個 Native Client,它整合了 Linux POSIX 的協定,也完整支援 ACL 的功能,所以您可以直接在檔案或目錄中設定各種常用的權限,glusterfs 也是存取 Gluster 檔案最快的方式。

    glusterfs 在寫入檔案時使用 sync 模式而不使用非同步寫入,所以對於小檔案多、請求量很大的情況下使用 glusterfs 其效能可能會不如預期。若是您的檔案較大且請求又多的情況下,glusterfs 能夠發揮網路與分散功能有較好的效能表現。

  • NFS:

    NFS 在 Unix 與 Linux 中是最通用的網路儲存協定了,在 Gluster 中內建了啟用 NFS Server 的功能(當然也可以關閉它),所以在即有的 Client 中您可以直接使用 NFS 將 Volume 掛載起來而不用安裝其它任何套件。

    NFS 使用的是 NFSv3,預設使用非同步(async)的方式存取檔案,所以在大量存取小檔案的情況之下是比較好的選擇。

  • CIFS:

    Gluster 使用了 Samba 作為提供 CIFS 協定的方式,若是有 Windows Client 要使用 Gluster 儲存空間,那麼就可以使用網路磁碟機掛載使用。