GlusterFS 學習筆記

自行整理, 學習用途, 侵知刪歉

一.術語介紹

來源http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Terminologies/

Access Control Lists(ACL)

ACL負責給不同組, 不同用戶權限.

Access Control Lists (ACLs) allows you to assign different permissions for different users or groups even though they do not correspond to the original owner or the owning group.

Brick

存儲的最基本單元, 表示為儲存池(Storage pool)中某臺服務器上的一個目錄

Brick is the basic unit of storage, represented by an export directory on a server in the trusted storage pool.

Cluster

一組電腦

A cluster is a group of linked computers, working together closely thus in many respects forming a single computer.

Distributed FIle System

一種使多部電腦通過網絡并行獲取數據的文件系統

A file system that allows multiple clients to concurrently access data over a computer network

FUSE(Filesystem in Userspace)

一種幫助非權限用戶不必修改內核就可以創造文件系統的核心模塊, 應用在Unix操作系統中;
該模塊的實現是通過在用戶空間運行文件系統代碼, FUSE提供一種"橋"將這部分運行的代碼與實際的核心接口連接起來.

Filesystem in Userspace (FUSE) is a loadable kernel module for Unix-like computer operating systems that lets non-privileged users create their own file systems without editing kernel code. This is achieved by running file system code in user space while the FUSE module provides only a "bridge" to the actual kernel interfaces.

glusterd

需要在儲存池(storage pool)的所有服務器上運行的gluster管理守護進程

Gluster management daemon that needs to run on all servers in the trusted storage pool.

Geo-Replication

Geo-Replication提供了一種通過網絡(LAN,WAN,Internet)持續地,異步地,增加的復制備份服務.

Geo-replication provides a continuous, asynchronous, and incremental replication service from site to another over Local Area Networks (LANs), Wide Area Network (WANs), and across the Internet.

Metadata

Metadata是關于一個或者多個數據的信息文件. GlusterFS中沒有Metadata, 在文件數據中有各自的Metadata

Metadata is defined as data providing information about one or more other pieces of data. There is no special metadata storage concept in GlusterFS. The metadata is stored with the file data itself.

Namespace

Namespace是一種包含了標識,符號組的一種抽象包含概念.每一個Gluster volume有一個單獨的namespace作為一個POSIX掛載指針(包含了每一個集群內的文件)

Namespace is an abstract container or environment created to hold a logical grouping of unique identifiers or symbols. Each Gluster volume exposes a single namespace as a POSIX mount point that contains every file in the cluster.

POSIX(portable operating system interface[for unix])

由IEEE定義的一種Unix接口規范

Portable Operating System Interface [for Unix] is the name of a family of related standards specified by the IEEE to define the application programming interface (API), along with shell and utilities interfaces for software compatible with variants of the Unix operating system. Gluster exports a fully POSIX compliant file system.

RAID

將復數個硬盤組合為一個虛擬單元的方式, 使得數據可靠性提高,硬盤之間也互相依存.

Redundant Array of Inexpensive Disks (RAID) is a technology that provides increased storage reliability through redundancy, combining multiple low-cost, less-reliable disk drives components into a logical unit where all drives in the array are interdependent.

RRDNS(round robin domain name service)

一種在服務器間分發數據的方式

Round Robin Domain Name Service (RRDNS) is a method to distribute load across application servers. It is implemented by creating multiple A records with the same name and different IP addresses in the zone file of a DNS server.

Trusted storage pool

存儲服務器的網絡;

A storage pool is a trusted network of storage servers. When you start the first server, the storage pool consists of that server alone.

Userspace

用戶空間內的應用并不會直接和硬件交互, 核心對應用的權限進行了限制.但是用戶空間內的應用比在核心中運行的程序更輕便. Gluster是一個用戶空間的應用.

Applications running in user space don’t directly interact with hardware, instead using the kernel to moderate access. Userspace applications are generally more portable than applications in kernel space. Gluster is a user space application.

Volume

一個volume卷, 是bricks的邏輯集合. 幾乎所有的gluster管理操作都是在volume上進行的

A volume is a logical collection of bricks. Most of the gluster management operations happen on the volume.

Vol file

gluster進程使用到的配置文件. Volfile一般位于/var/lib/glusterd/vols/volume-name/. Eg:vol-name-fuse.vol,export-brick-name.vol;

.vol files are configuration files used by glusterfs process. Volfiles will be usually located at /var/lib/glusterd/vols/volume-name/. Eg:vol-name-fuse.vol,export-brick-name.vol,etc..
Sub-volumes in the .vol files are present in the bottom-up approach and then after tracing forms a tree structure, where in the hierarchy last comes the client volumes.

Server

控制數據存儲文件系統的機器

The machine which hosts the actual file system in which the data will be stored.

Client

掛載卷(volume)的機器

The machine which mounts the volume (this may also be a server).

Replicate

為了提高數據可用性的數據備份(冗余)

Replicate is generally done to make a redundancy of the storage for data availability.

二.GlusterFS原理

1. 原始數據格式存儲(Data Stored in Native Formats)

GlusterFS以原始數據格式(如EXT3、EXT4、XFS、ZFS)儲存數據,并實現多種數據自動修復機制。因此,系統極具彈性,即使離線情形下文件也可以通過其他標準工具進行訪問。如果用戶需要從GlusterFS中遷移數據,不需要作任何修改仍然可以完全使用這些數據。

2. 無元數據服務設計(No Metadata with the Elastic Hash Algorithm)

對Scale-Out存 儲系統而言,最大的挑戰之一就是記錄數據邏輯與物理位置的映像關系,即數據元數據,可能還包括諸如屬性和訪問權限等信息。傳統分布式存儲系統使用集中式或分布式元數據服務來維護元數據,集中式元數據服務會導致單點故障和性能瓶頸問題,而分布式元數據服務存在性能負載和元數據同步一致性問題。特別是對于海量小文件的應用,元數據問題是個非常大的挑戰。
GlusterFS獨 特地采用無元數據服務的設計,取而代之使用算法來定位文件,元數據和數據沒有分離而是一起存儲。集群中的所有存儲系統服務器都可以智能地對文件數據分片進行定位,僅僅根據文件名路徑并運用算法即可,而不需要查詢索引或者其他服務器。這使得數據訪問完全并行化,從而實現真正的線性性能擴展。無元數據服務器 極大提高了GlusterFS的性能、可靠性和穩定性。

總體架構和設計

GlusterFS總體架構與組成部分如上圖所示,它主要由

存儲服務器(Brick Server)、
客戶端
NFS/Samba存儲網關???組成。

??GlusterFS架構中沒有元數據服務器組件,這是其最大的設計這點,對于提升整個系統的性能、可靠性和穩定性都有著決定性的意義。GlusterFS支持TCP/IPInfiniBand RDMA高速網絡互聯,客戶端可通過原生Glusterfs協議訪問數據,其他沒有運行GlusterFS客戶端的終端可通過NFS/CIFS標準協議通過存儲網關訪問數據。
??存儲服務器主要提供基本的數據存儲功能,最終的文件數據通過統一的調度策略分布在不同的存儲服務器上。它們上面運行著Glusterfsd進行,負責處理來自其他組件的數據服務請求。如前所述,數據以原始格式直接存儲在服務器的本地文件系統上,如EXT3、EXT4、XFS、ZFS等,運行服務時指定數據存儲路徑。多個存儲服務器可以通過客戶端或存儲網關上的卷管理器組成集群,如Stripe(RAID0)、Replicate(RAID1)和DHT(分布式Hash)存儲集群,也可利用嵌套組合構成更加復雜的集群,如RAID10。
??由于沒有了元數據服務器,客戶端承擔了更多的功能,包括數據卷管理、I/O調度、文件定位、數據緩存等功能。客戶端上運行Glusterfs進程,它實際是Glusterfsd的符號鏈接,利用FUSE(File system in User Space)模塊將GlusterFS掛載到本地文件系統之上,實現POSIX兼容的方式來訪問系統數據。在最新的3.1.X版本中,客戶端不再需要獨立維護卷配置信息,改成自動從運行在網關上的glusterd彈性卷管理服務進行獲取和更新,極大簡化了卷管理。GlusterFS客戶端負載相對傳統分布式文件系統要高,包括CPU占用率和內存占用。
??GlusterFS存儲網關提供彈性卷管理NFS/CIFS訪問代理功能,其上運行Glusterd和Glusterfs進程,兩者都是Glusterfsd符號鏈接。卷管理器負責邏輯卷的創建、刪除、容量擴展與縮減、容量平滑等功能,并負責向客戶端提供邏輯卷信息及主動更新通知功能等。GlusterFS 3.1.X實現了邏輯卷的彈性和自動化管理,不需要中斷數據服務或上層應用業務。對于Windows客戶端或沒有安裝GlusterFS的客戶端,需要通過NFS/CIFS代理網關來訪問,這時網關被配置成NFS或Samba服務器。相對原生客戶端,網關在性能上要受到NFS/Samba的制約。

GlusterFS

GlusterFS是模塊化堆棧式的架構設計,如圖3所示。模塊稱為Translator,是GlusterFS提供的一種強大機制,借助這種良好定義的接口可以高效簡便地擴展文件系統的功能。服務端與客戶端模塊接口是兼容的,同一個translator可同時在兩邊加載。每個translator都是SO動態庫,運行時根據配置動態加載。每個模塊實現特定基本功能,GlusterFS中所有的功能都是通過translator實現,比如Cluster, Storage, Performance, Protocol, Features等,基本簡單的模塊可以通過堆棧式的組合來實現復雜的功能。這一設計思想借鑒了GNU/Hurd微內核的虛擬文件系統設計,可以把對外部系統的訪問轉換成目標系統的適當調用。大部分模塊都運行在客戶端,比如合成器、I/O調度器和性能優化等,服務端相對簡單許多。客戶端和存儲服務器均有自己的存儲棧,構成了一棵Translator功能樹,應用了若干模塊。模塊化和堆棧式的架構設計,極大降低了系統設計復雜性,簡化了系統的實現、升級以及系統維護。

3. 彈性哈希算法

對于分布式系統而言,元數據處理是決定系統擴展性、性能以及穩定性的關鍵。GlusterFS另辟蹊徑,徹底摒棄了元數據服務,使用彈性哈希算法代替傳統分布式文件系統中的集中或分布式元數據服務。這根本性解決了元數據這一難題,從而獲得了接近線性的高擴展性,同時也提高了系統性能和可靠性。GlusterFS使用算法進行數據定位,集群中的任何服務器和客戶端只需根據路徑和文件名就可以對數據進行定位和讀寫訪問。換句話說,GlusterFS不需要將元數據與數據進行分離,因為文件定位可獨立并行化進行。GlusterFS中數據訪問流程如下:

計算hash值,輸入參數為文件路徑和文件名;
根據hash值在集群中選擇子卷(存儲服務器),進行文件定位;
對所選擇的子卷進行數據訪問。

GlusterFS目前使用Davies-Meyer算法計算文件名hash值,獲得一個32位整數。Davies-Meyer算法具有非常好的hash分布性,計算效率很高。假設邏輯卷中的存儲服務器有N個,則32位整數空間被平均劃分為N個連續子空間,每個空間分別映射到一個存儲服務器。這樣,計算得到的32位hash值就會被投射到一個存儲服務器,即我們要選擇的子卷。難道真是如此簡單?現在讓我們來考慮一下存儲節點加入和刪除、文件改名等情況,GlusterFS如何解決這些問題而具備彈性的呢?

邏輯卷中加入一個新存儲節點,如果不作其他任何處理,hash值 映射空間將會發生變化,現有的文件目錄可能會被重新定位到其他的存儲服務器上,從而導致定位失敗。解決問題的方法是對文件目錄進行重新分布,把文件移動到 正確的存儲服務器上去,但這大大加重了系統負載,尤其是對于已經存儲大量的數據的海量存儲系統來說顯然是不可行的。
另一種方法是使用一致性哈希算法,修改新增節點及相鄰節點的hash映射空間,僅需要移動相鄰節點上的部分數據至新增節點,影響相對小了很多。然而,這又帶來另外一個問題,即系統整體負載不均衡。

GlusterFS沒有采用上述兩種方法,而是設計了更為彈性的算法。

GlusterFS的 哈希分布是以目錄為基本單位的,文件的父目錄利用擴展屬性記錄了子卷映射信息,其下面子文件目錄在父目錄所屬存儲服務器中進行分布。
說的形象一點: 每一塊brick有一個32位的hash值,然后每一塊brick的hash值覆蓋了所有存儲空間, 沒有漏和覆蓋, 然后每一個文件有一個hash值, 這個值是在brick32位以內的, 就代表這個文件是在這個brick里.
由于文件目錄事先保存 了分布信息,因此新增節點不會影響現有文件存儲分布,它將從此后的新創建目錄開始參與存儲分布調度。這種設計,新增節點不需要移動任何文件,但是負載均衡 沒有平滑處理,老節點負載較重。GlusterFS在設計中考慮了這一問題,在新建文件時會優先考慮容量負載最輕的節點,在目標存儲節點上創建文件鏈接直向真正存儲文件的節點。另外,GlusterFS彈性卷管理工具可以在后臺以人工方式來執行負載平滑,將進行文件移動和重新分布,此后所有存儲服務器都會均會被調度。
GlusterFS目前對存儲節點刪除支持有限,還無法做到完全無人干預的程度:

  • 如果直接刪除節點,那么所在存儲服務器上的文件將無法瀏覽和訪問,創建文件目錄也會失敗。當前人工解決方法有兩個,一是將節點上的數據重新復制到GlusterFS中,二是使用新的節點來替換刪除節點并保持原有數據。
  • 如果一個文件被改名,顯然hash算法將產生不同的值,非常可能會發生文件被定位到不同的存儲服務器上,從而導致文件訪問失敗。采用數據移動的方法,對于大文件是很難在實時完成的。為了不影響性能和服務中斷,GlusterFS采 用了文件鏈接來解決文件重命名問題,在目標存儲服務器上創建一個鏈接指向實際的存儲服務器,訪問時由系統解析并進行重定向。另外,后臺同時進行文件遷移, 成功后文件鏈接將被自動刪除。對于文件移動也作類似處理,好處是前臺操作可實時處理,物理數據遷移置于后臺選擇適當時機執行。

彈性哈希算法為文件分配邏輯卷,那么GlusterFS如何為邏輯卷分配物理卷呢?GlusterFS3.1.X實現了真正的彈性卷管理,如圖4所 示。存儲卷是對底層硬件的抽象,可以根據需要進行擴容和縮減,以及在不同物理系統之間進行遷移。存儲服務器可以在線增加和移除,并能在集群之間自動進行數 據負載平衡,數據總是在線可用,沒有應用中斷。文件系統配置更新也可以在線執行,所作配置變動能夠快速動態地在集群中傳播,從而自動適應負載波動和性能調 優。
? 彈性哈希算法本身并沒有提供數據容錯功能,GlusterFS使用鏡像或復制來保證數據可用性,推薦使用鏡像或3路復制。復制模式下,存儲服務器使用同步寫復制到其他的存儲服務器,單個服務器故障完全對客戶端透明。此外,GlusterFS沒有對復制數量進行限制,讀被分散到所有的鏡像存儲節點,可以提高讀性能。彈性哈希算法分配文件到唯一的邏輯卷,而復制可以保證數據至少保存在兩個不同存儲節點,兩者結合使得GlusterFS具備更高的彈性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容