如何借助GlusterFS構(gòu)建存儲池
譯文【51CTO.com快譯】GlusterFS可存儲網(wǎng)絡(luò)上的數(shù)據(jù),還可以用作云環(huán)境下的存儲后端。
不久之前,軟件定義存儲還是各大存儲解決方案廠商獨(dú)占的領(lǐng)域,如今卻可以用開源免費(fèi)軟件來加以實(shí)施。另一個(gè)好處是,你有望獲得基于硬件的解決方案所沒有的額外功能。GlusterFS讓你得以構(gòu)建一個(gè)可擴(kuò)展、虛擬化的存儲池,它由常規(guī)存儲系統(tǒng)組成(這些存儲系統(tǒng)組成網(wǎng)絡(luò)RAID),并使用不同的方法來定義卷,描述數(shù)據(jù)如何分布在每個(gè)存儲系統(tǒng)上。
不管你選擇了哪一種類型的卷,GlusterFS都可以利用單個(gè)的存儲資源構(gòu)建一個(gè)通用的存儲陣列,并通過單一命名空間提供給客戶(見圖1)??蛻暨€可以是使用GlusterFS服務(wù)器存儲后端用于虛擬系統(tǒng)的應(yīng)用程序,比如云軟件。相比這種類型的其他解決方案,GlusterFS無需專用的元數(shù)據(jù)服務(wù)器在存儲池中查找文件。相反使用了一種哈希算法,讓任何存儲節(jié)點(diǎn)得以識別存儲池中的文件。這與其他存儲解決方案相比是一大優(yōu)點(diǎn),因?yàn)樵獢?shù)據(jù)服務(wù)器常常是瓶頸和單一故障點(diǎn)。
圖1:客戶系統(tǒng)通過單一命名空間,訪問所需的GlusterFS卷
如果你看一下GlusterFS的內(nèi)部結(jié)構(gòu),就會驚訝地發(fā)現(xiàn):文件系統(tǒng)實(shí)施在用戶空間里面,訪問通過用戶空間中的文件系統(tǒng)(FUSE)接口來進(jìn)行。這樣一來,處理文件系統(tǒng)非常容易、非常靈活,不過代價(jià)是性能受到影響。然而,libgfapi庫能夠直接訪問文件系統(tǒng)。比如說,Qemu用它來存儲GlusterFS上虛擬系統(tǒng)的映像,沒必要經(jīng)由FUSE掛載來繞行。
如前所述,文件系統(tǒng)是在可分布于多個(gè)系統(tǒng)上的卷上創(chuàng)建的。單個(gè)系統(tǒng)通過TCP/IP或InfiniBand遠(yuǎn)程直接內(nèi)存訪問(RDMA)加以連接。然后,通過原生的GlusterFS客戶軟件、通過網(wǎng)絡(luò)文件系統(tǒng)(NFS)或服務(wù)器消息塊(SMB)協(xié)議,就可以使用存儲卷。除了鏡像數(shù)據(jù)外,GlusterFS還可以使用轉(zhuǎn)換工具,將數(shù)據(jù)分布到單個(gè)存儲系統(tǒng)上。
對分布式數(shù)據(jù)和鏡像數(shù)據(jù)而言,最小的單位是文件本身;以條帶化(striping)為列,一個(gè)文件的每個(gè)部分分布在系統(tǒng)上。這種系統(tǒng)的擴(kuò)展性良好,如果你需要管理大文件更是如此。這種模式下的性能幾乎隨著系統(tǒng)的數(shù)量呈線性增長。鏡像數(shù)據(jù)時(shí),GlusterFS創(chuàng)建一個(gè)文件的多個(gè)副本。多種模式的數(shù)據(jù)還可以結(jié)合起來。比如說,結(jié)合分布式數(shù)據(jù)和鏡像數(shù)據(jù)讓你可以兼顧性能和數(shù)據(jù)安全性。
分散模式就好比是一種RAID 5配置,它是比較新的模式。為了獲得容錯(cuò)和高可用性,你還可以通過異地復(fù)制,將存儲卷鏡像到遠(yuǎn)程站點(diǎn)。如果災(zāi)難發(fā)生,服務(wù)器在分布式存儲卷方面出現(xiàn)故障,就很容易恢復(fù)數(shù)據(jù)。
Gluster卷還可以加以擴(kuò)展,可能立即擴(kuò)展:為此,你只要為卷添加一個(gè)額外的brick。用Gluster專業(yè)術(shù)語來講,brick是存儲系統(tǒng)的目錄,卷是由這些目錄組成的。單一卷的brick通常但未必駐留在不同的系統(tǒng)上。為了擴(kuò)大可信賴存儲池,你只要為現(xiàn)有的聯(lián)合體添加額外的服務(wù)器。
這里的例子基于Fedora 22,旨在為基于Qemu/KVM和libvirt虛擬化框架的虛擬系統(tǒng)提供后端存儲。Glusterfs軟件包包含在常規(guī)的Fedora軟件庫中,只要使用dnf軟件包管理器就可以安裝:
dnf install glusterfs glusterfs-cli glusterfs-server
除了安裝GlusterFS社區(qū)版外還有一個(gè)辦法:還可以向Linux發(fā)行版經(jīng)銷商紅帽公司購買商用Gluster Storage產(chǎn)品。它隨帶典型的企業(yè)功能(比如,你可以訪問Linux發(fā)行版經(jīng)銷商的支持服務(wù))。
安裝GlusterFS
為了避免讓例子過于復(fù)雜,我的環(huán)境包括兩個(gè)系統(tǒng)。每個(gè)系統(tǒng)提供一個(gè)brick,它將在兩個(gè)系統(tǒng)之間復(fù)制。在這兩個(gè)系統(tǒng)上,glusterfs服務(wù)都由systemd來啟動(代碼片段1)。
代碼片段1
GlusterFS服務(wù)
- # systemctl start glusterd.service
- # systemctl status glusterd.service
- glusterd.service - GlusterFS, a clustered file-system server
- Loaded: loaded (/usr/lib/systemd/system/glusterd.service; disabled; vendor preset: disabled)
- Active: active (running) since Thu 2015-08-27 21:26:45 CEST; 2min 53s ago
- Process: 1424 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid (code=exited, status=0/SUCCESS)
- Main PID: 1425 (glusterd)
- CGroup: /system.slice/glusterd.service ??1425 /usr/sbin/glusterd -p /var/run/glusterd.pid
- Aug 27 21:26:45 gluster2.example.com systemd[1]: Starting GlusterFS, a clustered file-system server...
- Aug 27 21:26:45 gluster2.example.com systemd[1]: Started GlusterFS, a clustered file-system server.
在這兩臺計(jì)算機(jī)上,專用的塊設(shè)備掛載在/storage/下面。之后將用來創(chuàng)建GlusterFS卷的brick在該設(shè)備上設(shè)置。在這個(gè)例子中,每個(gè)系統(tǒng)只使用一個(gè)brick。然而,如果你之前將所有存儲系統(tǒng)添加到前面所述的可信賴存儲池,這才有可能實(shí)現(xiàn)。登錄到哪個(gè)存儲系統(tǒng)來創(chuàng)建可信賴存儲池沒有關(guān)系。在這個(gè)例子中,***個(gè)系統(tǒng)(gluster1)用于這個(gè)用途:
- # gluster peer probe gluster2
- Probe successful
本地系統(tǒng)自動屬于可信賴存儲池,它不需要添加上去。來自gluster peer status的輸出現(xiàn)在應(yīng)該會將另一個(gè)系統(tǒng)標(biāo)為兩個(gè)系統(tǒng)上的peer。下面這個(gè)命令在兩個(gè)存儲系統(tǒng)之間生成一個(gè)復(fù)制卷。在此之后需要啟用該卷:
- # gluster volume create gv0 replica gluster1:/storage/brick1/gv0/ gluster2:/storage/brick1/gv0/
- volume create: gv0: success: please start the volume to access data
- # gluster volume start gv0
- volume start: gv0: success
由于傳輸模式在默認(rèn)情況下被設(shè)成TCP/IP,不需要指定它。如果你偏愛InfiniBand而非TCP/IP,只要在創(chuàng)建卷時(shí)指定rdma transport作為進(jìn)一步的變量。這種方式創(chuàng)建的卷為你提供了額外的功能特性。比如說,你可以允許只從某個(gè)特定的網(wǎng)絡(luò)來訪問:
- # gluster volume set gv0 auth.allow 192.168.122.*
- volume set: success
此處(http://www.admin-magazine.com/Articles/Build-storage-pools-with-GlusterFS/(offset)/3#article_i2)大致介紹了所有可用的Gluster選項(xiàng)。安裝卷后,你可以輸入volume info命令,獲得詳細(xì)信息(見代碼片段2)。
代碼片段2
獲得卷的詳細(xì)信息
- # gluster volume info gv0
- Volume Name: gv0
- Type: Replicate
- Volume ID: 4f8d25a9-bbee-4e8c-a922-15a7f5a7673d
- Status: Started
- Number of Bricks: 1 x 2 = 2
- Transport-type: tcp
- Bricks:
- Brick1: gluster1:/storage/brick1/gv0
- Brick2: gluster2:/storage/brick1/gv0
- Options Reconfigured:
- auth.allow: 192.168.122.*
使用FUSE實(shí)現(xiàn)最快的客戶訪問
可以使用各種方法,以便最終訪問以這種方式創(chuàng)建的卷。經(jīng)由FUSE的原生訪問提供了***性能,你也可以為卷創(chuàng)建一個(gè)NFS或SMB共享區(qū),以便通過網(wǎng)絡(luò)來訪問。然而,我建議使用原生客戶軟件,不僅僅為了獲得更好的性能,還因?yàn)榇_??梢酝该鞯卦L問單個(gè)brick,不管用來掛載卷的存儲服務(wù)器是哪一臺。如果你想創(chuàng)建GlusterFS卷,通過NFS-Ganesha或CTDB,配置一臺具有高可用性的數(shù)據(jù)服務(wù)器,那么使用NFS或SMB值得關(guān)注。如果你按如下方式運(yùn)行mount命令,就要用到原生客戶軟件:
- mount -t glusterfs gluster1:/gv0 /mnt/glusterfs/
為了提供***訪問卷的服務(wù),往你的etc/fstab文件添加一個(gè)相應(yīng)的行。眼下值得一提的是,使用哪種存儲系統(tǒng)來訪問無關(guān)重要,因?yàn)樗皇怯脕碜x取元數(shù)據(jù),元數(shù)據(jù)表明了你的卷到底是如何組成的。你可以在這里找到為卷提供brick的所有系統(tǒng)。
擴(kuò)展存儲池
GlusterFS讓用戶很容易調(diào)整現(xiàn)有的存儲池。比如說,如果你想為存儲池添加一個(gè)新的存儲系統(tǒng),可以使用下列命令:
- gluster peer probe gluster3
- gluster volume add-brick replica 3 gv0 gluster3:/storage/brick1/gv0/
這里,gluster3系統(tǒng)被添加到存儲池,將現(xiàn)有的卷擴(kuò)大一個(gè)brick。調(diào)用gluster卷信息應(yīng)該會證實(shí)這一點(diǎn):現(xiàn)在這個(gè)卷已有三個(gè)brick。視選擇的模式而定,你可能需要為卷添加額外的brick。比如說,分布式復(fù)制卷需要四個(gè)brick。
你可以從卷刪除brick,這個(gè)過程就跟添加brick來得一樣容易。如果不再需要某個(gè)存儲系統(tǒng),可以從可信賴存儲池刪除它:
- gluster volume remove-brick gv0 gluster3:/storage/brick1/gv0/
- gluster peer detach gluster3
你為分布式卷添加brick或從分布式卷刪除brick后,需要重新排序數(shù)據(jù),以體現(xiàn)brick數(shù)量發(fā)生變化的事實(shí)。為了啟動這個(gè)過程,使用這個(gè)命令:
- gluster volume rebalance gv0 start
使用參數(shù)status而不是start調(diào)用這個(gè)參數(shù),為你提供了重組進(jìn)度方面的詳細(xì)信息。
GlusterFS作為云存儲
由于良好性能和易于擴(kuò)展,GlusterFS經(jīng)常用作云環(huán)境的存儲解決方案。既可以部署在純粹基于libvirt的Qemu/KVM環(huán)境,也可以部署在多個(gè)KVM實(shí)例并行運(yùn)行的環(huán)境。oVirt框架和紅帽的商用變種(Enterprise Virtualization)是兩個(gè)例子。它們提供了這一功能:將Gluster卷用作一段時(shí)間的存儲池或存儲域。Qemu可以直接訪問磁盤,沒必要經(jīng)由FUSE掛載繞行,這歸功于GlusterFS版本3.4中集成了libgfapi庫。性能測試表明,直接訪問GlusterFS卷獲得了與直接訪問brick幾乎一樣的性能。
下面這個(gè)例子表明了如何為基于libvirt的KVM實(shí)例提供一個(gè)簡單的存儲池。至此,我假設(shè)虛擬機(jī)管理程序已安裝,只有之前創(chuàng)建的Gluster卷需要連接到該虛擬機(jī)管理程序。原則上來說,除了借助命令行工具可以實(shí)現(xiàn)外,這還可以借助圖形化virt-manager(虛擬機(jī)管理器)工具來實(shí)現(xiàn)(見圖2)。
圖2:使用virt-manager圖形化工具,你可以創(chuàng)建GlusterFS存儲池,但眼下,你仍無法創(chuàng)建卷
代碼片段3顯示了一個(gè)XML文件,該文件描述了一個(gè)Gluster卷,然后把它添加到libvirt框架。你只要指定單一的存儲系統(tǒng),同時(shí)指定配置卷時(shí)使用的卷名。下一步,創(chuàng)建一個(gè)新的libvirt存儲池,并啟用它:
- # virsh pool-define /tmp/gluster-storage.xml
- Pool glusterfs-pool defined from /tmp/gluster-storage.xml
- # virsh pool-start glusterfs-pool
- Pool glusterfs-pool started
代碼片段3
池定義
- <pool type='gluster'>
- <name>glusterfs-pool</name>
- <source>
- <host name='192.168.122.191'/>
- <dir path='/'/>
- <name>gv0</name>
- </source>
- </pool>
如果這一步行,可以輸入virsh pool-list,即可顯示本地虛擬機(jī)管理程序上的現(xiàn)有存儲池的概況信息:
- # virsh pool-list --all
Name State Autostart
------------------------------------------------
default active yes
glusterfs-pool active no
卷可以分配給這個(gè)存儲池里面的虛擬機(jī)。遺憾的是,截至本文截稿時(shí),libvirt并不允許你在GlusterFS池里面創(chuàng)建卷,所以需要手動創(chuàng)建卷(見圖2)。下面這個(gè)命令在虛擬機(jī)管理程序上創(chuàng)建一個(gè)4GB大小的卷,用于安裝紅帽企業(yè)級Linux系統(tǒng):
qemu-img create gluster://192.168.122.191/gv0/rhel7.img 4G
IP地址對應(yīng)于可信賴存儲池里面的***個(gè)存儲系統(tǒng),GlusterFS卷之前在該存儲池里面創(chuàng)建。virsh vol-list命令顯示卷已正確創(chuàng)建:
- # virsh vol-list glusterfs-pool
Name Path
---------------------------------------------------
rhel7.img gluster://192.168.122.191/gv0/rhel7.img
***,你可以使用virt-manager或virt-install命令行工具,創(chuàng)建所需的虛擬系統(tǒng),并定義剛設(shè)置為存儲后端的那個(gè)卷。在GlusterFS卷上安裝虛擬系統(tǒng)的一個(gè)很簡單的例子看起來就像這樣:
- # virt-install --name rhel7 --memory 4096 --disk vol=glusterfs-pool/rhel7.img,bus=virtio --location ftp://192.168.122.1/pub/products/rhel7/
當(dāng)然,你需要相應(yīng)修改針對virt-install的調(diào)用。這里目的只是顯示如何可以把GlusterFS卷用作安裝系統(tǒng)的后端。
***,還要注意GlusterFS版本3.3帶來了另一個(gè)創(chuàng)新,那就是統(tǒng)一文件和對象(UFO)轉(zhuǎn)換工具,它讓文件系統(tǒng)能夠?qū)OSIX文件處理成對象,反之亦然。在OpenStack環(huán)境下,文件系統(tǒng)是內(nèi)置的OpenStack存儲組件Swift的名副其實(shí)的替代者,因?yàn)樗С炙械腛penStack存儲協(xié)議(文件、塊和對象)。
結(jié)束語
GlusterFS可以基于免費(fèi)軟件和商用硬件,構(gòu)建可橫向擴(kuò)展的存儲系統(tǒng)。管理員可以在數(shù)據(jù)安全和性能之間作一選擇,也可以兩者兼顧。
原文標(biāo)題:Build storage pools with GlusterFS,作者:Thorsten Scherf
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】