分布式存儲之GlusterFS

1.glusterfs概述
GlusterFS系統(tǒng)是一個可擴展的網(wǎng)絡文件系統(tǒng),相比其他分布式文件系統(tǒng),GlusterFS具有高擴展性、高可用性、高性能、可橫向擴展等特點,并且其沒有元數(shù)據(jù)服務器的設計,讓整個服務沒有單點故障的隱患。

當客戶端訪問GlusterFS存儲時,首先程序通過訪問掛載點的形式讀寫數(shù)據(jù),對于用戶和程序而言,集群文件系統(tǒng)是透明的,用戶和程序根本感覺不到文件系統(tǒng)是本地還是在遠程服務器上。讀寫操作將會被交給VFS(Virtual File System)來處理,VFS會將請求交給FUSE內(nèi)核模塊,而FUSE又會通過設備/dev/fuse將數(shù)據(jù)交給GlusterFS Client。最后經(jīng)過GlusterFS Client的計算,并最終經(jīng)過網(wǎng)絡將請求或數(shù)據(jù)發(fā)送到GlusterFS Server上。
2.glusterfs常用分布式簡介

分布式卷也成為哈希卷,多個文件以文件為單位在多個brick上,使用哈希算法隨機存儲。
應用場景:大量小文件
優(yōu)點:讀/寫性能好
缺點:如果存儲或服務器故障,該brick上的數(shù)據(jù)將丟失
不指定卷類型,默認是分布式卷
brick數(shù)量沒有限制
創(chuàng)建分布式卷命令:
gluster volume create volume_name node1:/data/br1 node2:/data/br1

復制卷是將多個文件在多個brick上復制多份,brick的數(shù)目要與需要復制的份數(shù)相等,建議brick分布在不同的服務器上。
應用場景:對可靠性高和讀寫性能要求高的場景
優(yōu)點:讀寫性能好
缺點:寫性能差
replica = brick
創(chuàng)建復制卷:
gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1
replica:文件保存的份數(shù)

條帶卷是將文件分成條帶,存放在多個brick上,默認條帶大小128k
應用場景:大文件
優(yōu)點:適用于大文件存儲
缺點:可靠性低,brick故障會導致數(shù)據(jù)全部丟失
stripe = birck
創(chuàng)建條帶卷:
gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1
stripe:條帶個數(shù)
分布式條帶卷是將多個文件在多個節(jié)點哈希存儲,每個文件再多分條帶在多個brick上存儲
應用場景:讀/寫性能高的大量大文件場景
優(yōu)點:高并發(fā)支持
缺點:沒有冗余,可靠性差
brick數(shù)是stripe的倍數(shù)
創(chuàng)建分布式條帶卷:
gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

分布式復制卷是將多個文件在多個節(jié)點上哈希存儲,在多個brick復制多份存儲。
應用場景:大量文件讀和可靠性要求高的場景
優(yōu)點:高可靠,讀性能高
缺點:犧牲存儲空間,寫性能差
brick數(shù)量是replica的倍數(shù)
gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

條帶式復制卷是將一個大文件存儲的時候劃分條帶,并且保存多份
應用場景:超大文件,并且對可靠性要求高
優(yōu)點:大文件存儲,可靠性高
缺點:犧牲空間寫性能差
brick數(shù)量是stripe、replica的乘積
gluster volume create volume_name stripe 2 replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1
3.glusterfs環(huán)境

日志存儲集群采用的是分布式復制卷,將多個文件在多個節(jié)點上哈希存儲,在多個brick復制多份存儲。共有五臺服務器,磁盤空間共有90T,那么采用這種分布式復制卷的方式,只有45T磁盤空間可用。并且需要采用分布式復制卷方式需要要有雙數(shù)的brick,所以現(xiàn)采用一臺服務器上創(chuàng)建兩個brick,如上圖所示,10.102.23.4:/data_01/node和10.102.23.44:/data_01/node是備份關系,其他節(jié)點均是如此,10.102.23.44作為日志存儲集群的管理節(jié)點,nfs-ganesha服務只需要安裝在控制節(jié)點,客戶端則可以通過nfs方式掛載。
#?sed?-i?'s#SELINUX=enforcing#SELINUX=disabled#'?/etc/sysconfig/selinux?#關閉selinux
#?iptables?-F?#清除防火墻規(guī)則
安裝glusterfs(01-05)

#?yum?install?userspace-rcu-*
#?yum?install?python2-gluster-3.13.2-2.el7.x86_64.rpm
#?yum?install?tcmu-runner-*?libtcmu-*
#?yum?install?gluster*
#?yum?install?nfs-ganesha-*
#這個nfs只要需要對外掛載的哪臺服務器需要安裝(10.102.23.44)
#?systemctl?start?glusterd.service?#所有服務器啟動glusterd
#?systemctl?start?rpcbind
#?systemctl?enable?glusterd.service
#?systemctl?enable?rpcbind
#?ss?-lnt?#查詢端口是否有為24007,如果有則服務正常運行
創(chuàng)建集群(在10.102.23.44節(jié)點上執(zhí)行一下操作,向集群中添加節(jié)點):
[root@admin-node?~]#?gluster?peer?probe?10.102.23.44
peer?probe:?success.?[root@admin-node?~]#?gluster?peer?probe?10.102.23.45
peer?probe:?success.
[root@admin-node?~]#?gluster?peer?probe?10.102.23.46
peer?probe:?success.
[root@admin-node?~]#?gluster?peer?probe?10.102.23.47
peer?probe:?success.
[root@admin-node?~]#?gluster?peer?probe?10.102.23.4
peer?probe:?success.
查看虛擬機信任狀態(tài)添加結(jié)果
[root@admin-node?~]#?gluster?peer?status
Number?of?Peers:?4
Hostname:?10.102.23.46
Uuid:?31b5ecd4-c49c-4fa7-8757-c01604ffcc7e
State:?Peer?in?Cluster?(Connected)
??
Hostname:?10.102.23.47
Uuid:?38a7fda9-ad4a-441a-b28f-a396b09606af
State:?Peer?in?Cluster?(Connected)
??
Hostname:?10.102.23.45
Uuid:?9e3cfb56-1ed4-4daf-9d20-ad4bf2cefb37
State:?Peer?in?Cluster?(Connected)
??
Hostname:?10.102.23.4
Uuid:?1836ae9a-eca5-444f-bb9c-20f032247bcb
State:?Peer?in?Cluster?(Connected)
在所有節(jié)點進行以下磁盤操作:
[root@admin-node?~]#?fdisk?/dev/sdb
創(chuàng)建卷組:
[root@admin-node?~]#?vgcreate?vg_data01?/dev/sdb1?/dev/sdc1?/dev/sdd1?/dev/sde1?/dev/sdf1
[root@admin-node?~]#?vgcreate?vg_data02?/dev/sdg1?/dev/sdh1?/dev/sdi1?/dev/sdj1?/dev/sdk1
查看卷組:
[root@admin-node?~]#?vgdisplay
創(chuàng)建邏輯卷:
[root@admin-node?~]#?lvcreate?-n?lv_data01?-L?9TB?vg_data01
[root@admin-node?~]#?lvcreate?-n?lv_data02?-L?9TB?vg_data02
查看邏輯卷:
[root@admin-node?~]#?lvdisplay
格式化邏輯卷:
[root@admin-node?~]#?mkfs.xfs?/dev/vg_data01/lv_data01
[root@admin-node?~]#?mkfs.xfs?/dev/vg_data02/lv_data02
掛載邏輯卷:
[root@admin-node?~]#?mkdir?-p?/data_01/node?/data_02/node
[root@admin-node?~]#?vim?/etc/fstab
/dev/vg_data01/lv_data01?/data_01?xfs?defaults?0?0
/dev/vg_data02/lv_data02?/data_02?xfs?defaults?0?0
[root@admin-node?~]#?mount?/data_01
[root@admin-node?~]#?mount?/data_02
分布式復制模式(組合型), 最少需要4臺服務器才能創(chuàng)建。
創(chuàng)建卷:
[root@admin-node?~]#?gluster?volume?create?data-volume?replica?2???10.102.23.4:/data_01/node??10.102.23.44:/data_01/node??10.102.23.44:/data_02/node?10.102.23.45:/data_02/node??10.102.23.45:/data_01/node??10.102.23.4:/data_02/node?10.102.23.46:/data_01/node??10.102.23.47:/data_01/node??10.102.23.46:/data_02/node??10.102.23.47:/data_02/node?force
啟動創(chuàng)建的卷:
[root@admin-node?~]#?gluster?volume?start?data-volume
volume start: data-volume: success所有機器都可以查看:
[root@admin-node?~]#?gluster?volume?info

查看分布式卷的狀態(tài):
[root@admin-node?~]#?gluster?volume?status

基于以上glusterfs部署,glusterfs分布式復制卷已經(jīng)完成
4.nfs-ganesha環(huán)境搭建
glusterfs服務本身也是支持nfs掛載,由于現(xiàn)有生產(chǎn)環(huán)境存在多個網(wǎng)段,并且有些網(wǎng)段與glusterfs存儲服務器網(wǎng)段是不通,所以需要通過nginx代理nfs來實現(xiàn)nfs掛載。Glusterfs服務只是支持nfs3版本的掛載,在通過nginx代理方面也不是那么方便,端口繁多,所以glusterfs與NFSs-Ganesha是完美組合。NFSs-Ganesha 通過FSAL(文件系統(tǒng)抽象層)將一個后端存儲抽象成一個統(tǒng)一的API,提供給Ganesha服務端,然后通過NFS協(xié)議將其掛載到客戶端。在客戶端上對掛出來的空間進行操作。并且NFSs-Ganesha 可以指定nfs的版本。
在管理節(jié)點10.102.23.44上安裝nfs-ganesha,在一開始部署glusterfs已在管理節(jié)點上安裝,這里就不重復說明了,直接簡要說明配置文件
[root@admin-node?~]#?vim?/etc/ganesha/ganesha.conf
.....................................
EXPORT
{
##?Export?Id?(mandatory,?each?EXPORT?must?have?a?unique?Export_Id)
#Export_Id?=?12345;
Export_Id?=?10;
??
##?Exported?path?(mandatory)
#Path?=?/nonexistant;
Path?=?/data01;
??
##?Pseudo?Path?(required?for?NFSv4?or?if?mount_path_pseudo?=?true)
#Pseudo?=?/nonexistant;
Pseudo?=?/data01;?#客戶端通過nfs掛載的根目錄
??
##?Restrict?the?protocols?that?may?use?this?export.?This?cannot?allow
##?access?that?is?denied?in?NFS_CORE_PARAM.
#Protocols?=?3,4;
Protocols?=?4;?#客戶端nfs掛載的版本
??
##?Access?type?for?clients.?Default?is?None,?so?some?access?must?be
##?given.?It?can?be?here,?in?the?EXPORT_DEFAULTS,?or?in?a?CLIENT?block
#Access_Type?=?RW;
Access_Type?=?RW;?#權限問題
??
##?Whether?to?squash?various?users.
#Squash?=?root_squash;
Squash?=?No_root_squash;?#root降級
??
##?Allowed?security?types?for?this?export
#Sectype?=?sys,krb5,krb5i,krb5p;
Sectype?=?sys;?#類型
??
##?Exporting?FSAL
#FSAL?{
#Name?=?VFS;
#}
FSAL?{
Name?=?GLUSTER;
hostname?=?"10.102.23.44";?#glusterfs管理節(jié)點IP
volume?=?"data-volume";?#glusterfs卷名
}
}
...................
[root@admin-node?~]#?systemctl?restart?nfs-ganesha
[root@admin-node?~]#?systemctl?enable?nfs-ganesha
[root@admin-node?~]#?showmount?-e?10.102.23.44
Export?list?for?10.102.23.44:?#nfs-ganesha搭建成功
5.客戶端掛載
以glusterfs方式掛載:
[root@admin-node?~]#?mkdir?/logs
[root@admin-node?~]#?mount?-t?glusterfs?10.102.23.44:data-volume?/logs/

以NFS方式進行掛載:
在客戶端(10.1.99段):
[root@moban-00?~]#yum?-y?install?nfs-utils?rpcbind
[root@moban-00?~]#?systemctl?start?rpcbind
[root@moban-00?~]#?systemctl?enable?rpcbind
[root@moban-00?~]#?mkdir?/home/dwweiyinwen/logs/
[root@moban-00?~]#?mount?-t?nfs?-o?vers=4,proto=tcp,port=2049?10.102.23.44:/data01?/home/dwweiyinwen/logs/

原文鏈接:https://www.jianshu.com/p/4b7d7a262980
關注「開源Linux」加星標,提升IT技能

