分布式存儲(chǔ)glusterfs

一.分布式存儲(chǔ)介紹

分布式存儲(chǔ)已經(jīng)研究很多年仙逻,但直到近年來(lái)驰吓,伴隨著谷歌、亞馬遜和阿里等互聯(lián)網(wǎng)公司云計(jì)算和大數(shù)據(jù)應(yīng)用的興起系奉,它才大規(guī)模應(yīng)用到工程實(shí)踐中檬贰。如谷歌的分布式文件系統(tǒng)GFS、分布式表格系統(tǒng)google Bigtable缺亮,亞馬遜的對(duì)象存儲(chǔ)AWS翁涤,阿里的TFS等都是很好的代表,同時(shí)也催生了一大批優(yōu)秀的開(kāi)源分布式存儲(chǔ)系統(tǒng),包括ceph葵礼、swift号阿、Lustre和glusterfs等。

分布式存儲(chǔ)系統(tǒng)分類(lèi)

分布式存儲(chǔ)按其存儲(chǔ)接口分為三種:文件存儲(chǔ)鸳粉、塊存儲(chǔ)和對(duì)象存儲(chǔ)扔涧。

文件存儲(chǔ)

通常支持POSIX接口(如glusterfs,但GFS届谈、HDFS是非POSIX接口的)枯夜,可以像普通文件系統(tǒng)(如ext4)那樣訪問(wèn),但又比普通文件系統(tǒng)多了并行化訪問(wèn)的能力和冗余機(jī)制艰山。主要的分布式文件存儲(chǔ)系統(tǒng)有TFS卤档、cephfs、glusterfs和HDFS等程剥。主要存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù),如普通文件汤踏、圖片织鲸、音視頻等∠海可以采用NFS和CIFS等協(xié)議訪問(wèn)搂擦,共享方便。NAS是文件存儲(chǔ)類(lèi)型哗脖。

塊存儲(chǔ)

這種接口通常以QEMU Driver或者Kernel Module的方式存在瀑踢,主要通過(guò)qemu或iscsi協(xié)議訪問(wèn)。主要的塊存儲(chǔ)系統(tǒng)有ceph塊存儲(chǔ)才避、sheepdog等橱夭。主要用來(lái)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)數(shù)據(jù)桑逝。數(shù)據(jù)共享不方便棘劣。DAS和SAN都是塊存儲(chǔ)類(lèi)型。

對(duì)象存儲(chǔ)

對(duì)象存儲(chǔ)系統(tǒng)綜合了NAS和SAN的優(yōu)點(diǎn)楞遏,同時(shí)具有SAN的高速直接訪問(wèn)和NAS的數(shù)據(jù)共享等優(yōu)勢(shì)茬暇。以對(duì)象作為基本的存儲(chǔ)單元,向外提供RESTful數(shù)據(jù)讀寫(xiě)接口寡喝,常以網(wǎng)絡(luò)服務(wù)的形式提供數(shù)據(jù)訪問(wèn)糙俗。主要的對(duì)象存儲(chǔ)系統(tǒng)有AWS、swift和ceph對(duì)象存儲(chǔ)预鬓。主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)

二.Gluster介紹

Glusterfs是一個(gè)開(kāi)源分布式文件系統(tǒng)巧骚,具有強(qiáng)大的橫向擴(kuò)展能力,可支持?jǐn)?shù)PB存儲(chǔ)容量和數(shù)千客戶端,通過(guò)Infiniband RDMA 或Tcp/Ip 方式將許多廉價(jià)的x86 主機(jī)网缝,通過(guò)網(wǎng)絡(luò)互聯(lián)成一個(gè)并行的網(wǎng)絡(luò)文件系統(tǒng)巨税。具有可擴(kuò)展性、高性能粉臊、高可用性等特點(diǎn)

1.為什么使用gluster

nfs對(duì)比Glusterfs

nfs:?jiǎn)吸c(diǎn)故障草添,擴(kuò)容難

Glusterfs:有多個(gè)節(jié)點(diǎn),無(wú)單點(diǎn)故障扼仲,擴(kuò)容簡(jiǎn)單远寸,加存儲(chǔ)節(jié)點(diǎn)即可,3個(gè)節(jié)點(diǎn)起步

2.Glusterfs概述

GlusterFS系統(tǒng)是一個(gè)可擴(kuò)展的網(wǎng)絡(luò)文件系統(tǒng)屠凶,相比其他分布式文件系統(tǒng)驰后,GlusterFS具有高擴(kuò)展性、高可用性矗愧、高性能灶芝、可橫向擴(kuò)展等特點(diǎn),并且其沒(méi)有元數(shù)據(jù)服務(wù)器的設(shè)計(jì)唉韭,讓整個(gè)服務(wù)沒(méi)有單點(diǎn)故障的隱患夜涕。
術(shù)語(yǔ):
-Brick:GFS中的存儲(chǔ)單元,通過(guò)是一個(gè)受信存儲(chǔ)池中的服務(wù)器的一個(gè)導(dǎo)出目錄属愤∨鳎可以通過(guò)主機(jī)名和目錄名來(lái)標(biāo)識(shí),如‘SERVER:EXPORT‘

  • Client:掛載了GFS卷的設(shè)備
  • Extended Attributes:xattr是一個(gè)文件系統(tǒng)的特性住诸,其支持用戶或程序關(guān)聯(lián)文件/目錄和元數(shù)據(jù)驾胆。
  • FUSE:Filesystem Userspace是一個(gè)可加載的內(nèi)核模塊,其支持非特權(quán)用戶創(chuàng)建自己的文件系統(tǒng)而不需要修改內(nèi)核代碼贱呐。通過(guò)在用戶空間運(yùn)行文件系統(tǒng)的代碼通過(guò)FUSE代碼與內(nèi)核進(jìn)行橋接丧诺。
  • Geo-Replication
  • GFID:GFS卷中的每個(gè)文件或目錄都有一個(gè)唯一的128位的數(shù)據(jù)相關(guān)聯(lián),其用于模擬inode
  • Namespace:每個(gè)Gluster卷都導(dǎo)出單個(gè)ns作為POSIX的掛載點(diǎn)
  • Node:一個(gè)擁有若干brick的設(shè)備
  • RDMA:遠(yuǎn)程直接內(nèi)存訪問(wèn)吼句,支持不通過(guò)雙方的OS進(jìn)行直接內(nèi)存訪問(wèn)锅必。
  • RRDNS:round robin DNS是一種通過(guò)DNS輪轉(zhuǎn)返回不同的設(shè)備以進(jìn)行負(fù)載均衡的方法
  • Self-heal:用于后臺(tái)運(yùn)行檢測(cè)復(fù)本卷中文件和目錄的不一致性并解決這些不一致。
  • Split-brain:腦裂
  • Translator:
  • Volfile:glusterfs進(jìn)程的配置文件惕艳,通常位于/var/lib/glusterd/vols/volname
  • Volume:一組bricks的邏輯集合

1搞隐、無(wú)元數(shù)據(jù)設(shè)計(jì)
元數(shù)據(jù)是用來(lái)描述一個(gè)文件或給定區(qū)塊在分布式文件系統(tǒng)中所在的位置,簡(jiǎn)而言之就是某個(gè)文件或某個(gè)區(qū)塊存儲(chǔ)的位置远搪。傳統(tǒng)分布式文件系統(tǒng)大都會(huì)設(shè)置元數(shù)據(jù)服務(wù)器或者功能相近的管理服務(wù)器劣纲,主要作用就是用來(lái)管理文件與數(shù)據(jù)區(qū)塊之間的存儲(chǔ)位置關(guān)系。相較其他分布式文件系統(tǒng)而言谁鳍,GlusterFS并沒(méi)有集中或者分布式的元數(shù)據(jù)的概念癞季,取而代之的是彈性哈希算法劫瞳。集群中的任何服務(wù)器和客戶端都可以利用哈希算法、路徑及文件名進(jìn)行計(jì)算绷柒,就可以對(duì)數(shù)據(jù)進(jìn)行定位志于,并執(zhí)行讀寫(xiě)訪問(wèn)操作。
這種設(shè)計(jì)帶來(lái)的好處是極大的提高了擴(kuò)展性废睦,同時(shí)也提高了系統(tǒng)的性能和可靠性伺绽;另一顯著的特點(diǎn)是如果給定確定的文件名,查找文件位置會(huì)非呈扰龋快奈应。但是如果要列出文件或者目錄,性能會(huì)大幅下降购披,因?yàn)榱谐鑫募蛘吣夸洉r(shí)杖挣,需要查詢(xún)所在節(jié)點(diǎn)并對(duì)各節(jié)點(diǎn)中的信息進(jìn)行聚合。此時(shí)有元數(shù)據(jù)服務(wù)的分布式文件系統(tǒng)的查詢(xún)效率反而會(huì)提高許多刚陡。

2惩妇、服務(wù)器間的部署
在之前的版本中服務(wù)器間的關(guān)系是對(duì)等的,也就是說(shuō)每個(gè)節(jié)點(diǎn)服務(wù)器都掌握了集群的配置信息筐乳,這樣做的好處是每個(gè)節(jié)點(diǎn)度擁有節(jié)點(diǎn)的配置信息屿附,高度自治,所有信息都可以在本地查詢(xún)哥童。每個(gè)節(jié)點(diǎn)的信息更新都會(huì)向其他節(jié)點(diǎn)通告,保證節(jié)點(diǎn)間信息的一致性褒翰。但如果集群規(guī)模較大贮懈,節(jié)點(diǎn)眾多時(shí),信息同步的效率就會(huì)下降优训,節(jié)點(diǎn)信息的非一致性概率就會(huì)大大提高朵你。因此GlusterFS未來(lái)的版本有向集中式管理變化的趨勢(shì)。
3揣非、客戶端訪問(wèn)流程
當(dāng)客戶端訪問(wèn)GlusterFS存儲(chǔ)時(shí)抡医,首先程序通過(guò)訪問(wèn)掛載點(diǎn)的形式讀寫(xiě)數(shù)據(jù),對(duì)于用戶和程序而言早敬,集群文件系統(tǒng)是透明的忌傻,用戶和程序根本感覺(jué)不到文件系統(tǒng)是本地還是在遠(yuǎn)程服務(wù)器上。讀寫(xiě)操作將會(huì)被交給VFS(Virtual File System)來(lái)處理搞监,VFS會(huì)將請(qǐng)求交給FUSE內(nèi)核模塊水孩,而FUSE又會(huì)通過(guò)設(shè)備/dev/fuse將數(shù)據(jù)交給GlusterFS Client。最后經(jīng)過(guò)GlusterFS Client的計(jì)算琐驴,并最終經(jīng)過(guò)網(wǎng)絡(luò)將請(qǐng)求或數(shù)據(jù)發(fā)送到GlusterFS Server上俘种。

三.GlusterFS集群卷的幾種模式

GlusterFS 集群的卷模式是指數(shù)據(jù)在集群中的存放結(jié)構(gòu)秤标,類(lèi)似于磁盤(pán)陣列中的級(jí)別。
1宙刘、分布式卷(Distributed Volume)
又稱(chēng)哈希卷苍姜,近似于RAID0,文件沒(méi)有分片悬包,文件根據(jù)hash算法寫(xiě)入各個(gè)節(jié)點(diǎn)的硬盤(pán)上衙猪,優(yōu)點(diǎn)是容量大,缺點(diǎn)是沒(méi)冗余玉罐。



2屈嗤、復(fù)制卷(Replicated Volume)
相當(dāng)于raid1,復(fù)制的份數(shù)吊输,決定集群的大小饶号,通常與分布式卷或者條帶卷組合使用,解決前兩種存儲(chǔ)卷的冗余缺陷季蚂。缺點(diǎn)是磁盤(pán)利用率低茫船。
復(fù)本卷在創(chuàng)建時(shí)可指定復(fù)本的數(shù)量,通常為2或者3扭屁,復(fù)本在存儲(chǔ)時(shí)會(huì)在卷的不同brick上算谈,因此有幾個(gè)復(fù)本就必須提供至少多個(gè)brick,當(dāng)其中一臺(tái)服務(wù)器失效后料滥,可以從另一臺(tái)服務(wù)器讀取數(shù)據(jù)然眼,因此復(fù)制GlusterFS卷提高了數(shù)據(jù)可靠性的同事,還提供了數(shù)據(jù)冗余的功能葵腹。



3高每、分布式復(fù)制卷(Distributed Replicated Volume)
分布式復(fù)制GlusterFS卷結(jié)合了分布式和復(fù)制Gluster卷的特點(diǎn),看起來(lái)類(lèi)似RAID10践宴,但其實(shí)不同鲸匿,RAID10其實(shí)質(zhì)是條帶化,但分布式復(fù)制GlusterFS卷則沒(méi)有阻肩。

4带欢、條帶卷(Striped Volume)

相當(dāng)于raid0,文件是分片均勻?qū)懺诟鱾€(gè)節(jié)點(diǎn)的硬盤(pán)上的烤惊,優(yōu)點(diǎn)是分布式讀寫(xiě)乔煞,性能整體較好。缺點(diǎn)是沒(méi)冗余柒室,分片隨機(jī)讀寫(xiě)可能會(huì)導(dǎo)致硬盤(pán)IOPS飽和瘤缩。



5、分布式條帶卷(Distributed Striped Volume)
當(dāng)單個(gè)文件的體型十分巨大伦泥,客戶端數(shù)量更多時(shí)剥啤,條帶卷已經(jīng)無(wú)法滿足需求锦溪,此時(shí)將分布式與條帶化結(jié)合起來(lái)是一個(gè)比較好的選擇。其性能與服務(wù)器數(shù)量有關(guān)府怯。

分布式復(fù)制卷的brick順序決定了文件分布的位置刻诊,一般來(lái)說(shuō),先是兩個(gè)brick形成一個(gè)復(fù)制關(guān)系牺丙,然后兩個(gè)復(fù)制關(guān)系形成分布则涯。

企業(yè)一般用3或5這兩種模式,大部分會(huì)用分布式復(fù)制(可用容量為 總?cè)萘?復(fù)制份數(shù))冲簿,通過(guò)網(wǎng)絡(luò)傳輸?shù)脑捵詈糜萌f(wàn)兆交換機(jī)粟判,萬(wàn)兆網(wǎng)卡來(lái)做。這樣就會(huì)優(yōu)化一部分性能峦剔。它們的數(shù)據(jù)都是通過(guò)網(wǎng)絡(luò)來(lái)傳輸?shù)?/p>

四.配置分布式復(fù)制卷

用三個(gè)節(jié)點(diǎn)搭建一個(gè)glusterfs集群档礁,再用一個(gè)作為客戶端使用,之后再擴(kuò)容卷。

環(huán)境優(yōu)化以及實(shí)驗(yàn)場(chǎng)景

環(huán)境規(guī)劃

環(huán)境優(yōu)化

每臺(tái)機(jī)子都要做
關(guān)閉防火墻及SElinux
systemctl   stop   firewalld
setenforce   0
配置yum源為阿里源(在每個(gè)節(jié)點(diǎn)中都執(zhí)行)
配置主機(jī)名host解析
[root@node1 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.11 node1
10.0.0.12 node2
10.0.0.13 node3
10.0.0.7  client

1.安裝glusterfs

所有節(jié)點(diǎn):
yum -y install centos-release-gluster
yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl start glusterfsd.service
systemctl enable glusterfsd.service

2.添加進(jìn)存儲(chǔ)資源池

1.gluster pool list #查看資源池
2.gluster peer probe +ip/主機(jī)名 #將存儲(chǔ)節(jié)點(diǎn)添加進(jìn)存儲(chǔ)資源池吝沫,每個(gè)節(jié)點(diǎn)的存儲(chǔ)資源池一致呻澜。
[root@node1 ~]# gluster pool list
UUID                    Hostname    State
f08f63ba-53d6-494b-b939-1afa5d6e8096    localhost   Connected 
[root@node1 ~]# gluster peer probe node2
peer probe: success. 
[root@node1 ~]# gluster peer probe 10.0.0.13
peer probe: success. 
[root@node1 ~]# gluster pool list
UUID                    Hostname    State
b9da9cd6-8776-4bae-9a3c-1cc65691dc02    node2       Connected 
80758955-647d-40cf-94f1-77a9695a9556    10.0.0.13   Connected 
f08f63ba-53d6-494b-b939-1afa5d6e8096    localhost   Connected
3.gluster peer detach #移除資源池中節(jié)點(diǎn)
[root@node1 ~]# gluster peer detach node2
All clients mounted through the peer which is getting detached need to be remounted using one of the other active peers in the trusted storage pool to ensure client gets notification on any changes done on the gluster configuration and if the same has been done do you want to proceed? (y/n) y
peer detach: success
[root@node1 ~]# gluster pool list
UUID                    Hostname    State
80758955-647d-40cf-94f1-77a9695a9556    10.0.0.13   Connected 
f08f63ba-53d6-494b-b939-1afa5d6e8096    localhost   Connected 

3. 分布式復(fù)制卷

1.創(chuàng)建分布式復(fù)制卷(可以隨意創(chuàng)建n個(gè)卷)

1.目錄進(jìn)行分布式存儲(chǔ)
gluster volume create 卷名 replica 3[復(fù)制的份數(shù),此處復(fù)制3份] 存儲(chǔ)節(jié)點(diǎn) force

2.磁盤(pán)進(jìn)行分布式存儲(chǔ)(此處用到磁盤(pán)分區(qū)使用fdisk或者gdisk對(duì)新添加的磁盤(pán)進(jìn)行分區(qū)掛載,生產(chǎn)中使用的全是新盤(pán)惨险,且副本數(shù)使用為3)
gluster volume create test replica 3 node1:/data1 node2:/data1 node3:/data1 force

2.啟動(dòng)卷

gluster volume start 卷名
EXAMPLE:
    gluster volume start test
[root@node1 ~]# gluster volume start test
volume start: test: success

3.查看卷

gluster volume info 卷名   #查看卷的詳細(xì)信息
EXAMPLE:
    gluster volume info test
[root@node1 ~]# gluster volume info test
 
Volume Name: test
Type: Replicate
Volume ID: 5c94db58-2dfa-4b31-965e-fc082011c1b5
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node1:/data1
Brick2: node2:/data1
Brick3: node3:/data1
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
performance.client-io-threads: off

gluster volume status 卷名 #查看卷的狀態(tài)
EXAMPLE:
    gluster volume status test
[root@node1 ~]# gluster volume status test
Status of volume: test
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick node1:/data1                          49152     0          Y       125373
Brick node2:/data1                          49152     0          Y       63195
Brick node3:/data1                          49152     0          Y       52099
Self-heal Daemon on localhost               N/A       N/A        Y       125406
Self-heal Daemon on 10.0.0.12               N/A       N/A        Y       63242
Self-heal Daemon on 10.0.0.13               N/A       N/A        Y       52150
 
Task Status of Volume test
------------------------------------------------------------------------------
There are no active volume tasks

4.刪除卷:一般會(huì)用再命名不規(guī)范的時(shí)候才會(huì)刪除

gluster volume stop test     #停止卷
gluster volume delete test   #刪除卷

5.掛載卷:系統(tǒng)默認(rèn)不支持glusterfs文件系統(tǒng)羹幸,客戶端需要安裝glusterfs,也需要host解析辫愉。

mount -t glustefs IP:/卷名 掛載目錄
EXAMPLE:
    mount -t glusterfs 10.0.0.11:/test /mnt
[root@client ~]#  mount -t glusterfs 10.0.0.11:/test /mnt
[root@client ~]# df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/sda3         20G  2.9G   17G  16% /
devtmpfs         476M     0  476M   0% /dev
tmpfs            487M     0  487M   0% /dev/shm
tmpfs            487M  8.0M  479M   2% /run
tmpfs            487M     0  487M   0% /sys/fs/cgroup
/dev/sda1        197M  105M   93M  54% /boot
tmpfs             98M     0   98M   0% /run/user/0
10.0.0.11:/test   10G  135M  9.9G   2% /mnt

5.寫(xiě)入文件進(jìn)行測(cè)試

[root@client ~]# cp -ap /etc/* /mnt/
[root@node1 /data1]# ls -1|wc -l
210
[root@node2 /data1]# ls -1|wc -l
210
[root@node3 /data1]# ls -1|wc -l
210

6.分布式復(fù)制卷擴(kuò)容

1.擴(kuò)容前查看容量:df -h
2.擴(kuò)容前需要先添加節(jié)點(diǎn):添加命令:gluster peer probe 節(jié)點(diǎn)名/ip
3.擴(kuò)容命令:gluster volume add-brick 卷名 節(jié)點(diǎn)名 force
4.擴(kuò)容之后查看容量: df -h

7.分布式復(fù)制卷的最佳實(shí)踐:

 1)搭建條件 
 - 塊服務(wù)器的數(shù)量必須是復(fù)制的倍數(shù)   
 - 將按塊服務(wù)器的排列順序指定相鄰的塊服務(wù)器成為彼此的復(fù)制例如栅受,8臺(tái)服務(wù)器: 
 - 當(dāng)復(fù)制副本為2時(shí),按照服務(wù)器列表的順序恭朗,服務(wù)器1和2作為一個(gè)復(fù)制,3和4作為一個(gè)復(fù)制,5和6作為一個(gè)復(fù)制,7和8作為一個(gè)復(fù)制 
 - 當(dāng)復(fù)制副本為4時(shí)窘疮,按照服務(wù)器列表的順序,服務(wù)器1/2/3/4作為一個(gè)復(fù)制,5/6/7/8作為一個(gè)復(fù)制 
 2)創(chuàng)建分布式復(fù)制卷
磁盤(pán)存儲(chǔ)的平衡布局是很有必要的冀墨,因?yàn)椴季纸Y(jié)構(gòu)是靜態(tài)的,當(dāng)新的 bricks 加入現(xiàn)有卷涛贯,新創(chuàng)建的文件會(huì)分布到舊的 bricks 中诽嘉,所以需要平衡布局結(jié)構(gòu),使新加入的 bricks 生效弟翘。布局平衡只是使新布局生效虫腋,并不會(huì)在新的布局中移動(dòng)老的數(shù)據(jù),如果你想在新布局生效后稀余,重新平衡卷中的數(shù)據(jù)悦冀,還需要對(duì)卷中的數(shù)據(jù)進(jìn)行平衡。

8.GlusterFS 幾種volume 模式指令:

 
一睛琳、 默認(rèn)模式盒蟆,既DHT, 也叫 分布卷: 將文件已hash算法隨機(jī)分布到 一臺(tái)服務(wù)器節(jié)點(diǎn)中存儲(chǔ)踏烙。
 
命令:gluster volume create test-volume server1:/exp1 server2:/exp2
 
二、 復(fù)制模式历等,既AFR, 創(chuàng)建volume 時(shí)帶 replica x 數(shù)量: 將文件復(fù)制到 replica x 個(gè)節(jié)點(diǎn)中讨惩。
 
命令:gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
 
三、 條帶模式寒屯,既Striped, 創(chuàng)建volume 時(shí)帶 stripe x 數(shù)量: 將文件切割成數(shù)據(jù)塊荐捻,分別存儲(chǔ)到 stripe x 個(gè)節(jié)點(diǎn)中 ( 類(lèi)似raid 0 )。
 
命令:gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2
 
四寡夹、 分布式條帶模式(組合型)处面,最少需要4臺(tái)服務(wù)器才能創(chuàng)建。 創(chuàng)建volume 時(shí) stripe 2 server = 4 個(gè)節(jié)點(diǎn): 是DHT 與 Striped 的組合型菩掏。
 
命令:gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
 
五魂角、 分布式復(fù)制模式(組合型), 最少需要4臺(tái)服務(wù)器才能創(chuàng)建。 創(chuàng)建volume 時(shí) replica 2 server = 4 個(gè)節(jié)點(diǎn):是DHT 與 AFR 的組合型患蹂。
 
命令:gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
 
六或颊、 條帶復(fù)制卷模式(組合型), 最少需要4臺(tái)服務(wù)器才能創(chuàng)建。 創(chuàng)建volume 時(shí) stripe 2 replica 2 server = 4 個(gè)節(jié)點(diǎn): 是 Striped 與 AFR 的組合型传于。
 
命令:gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
 
七囱挑、 三種模式混合, 至少需要8臺(tái) 服務(wù)器才能創(chuàng)建。 stripe 2 replica 2 , 每4個(gè)節(jié)點(diǎn) 組成一個(gè) 組沼溜。
 
命令:gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8

9.磁盤(pán)存儲(chǔ)平衡

gluster volume rebalance test start
gluster volume rebalance test status  #查看平衡狀態(tài)
## 檢查磁盤(pán)存儲(chǔ)平衡后文件在bricks中的分布情況
#從上面可以看出部分文件已經(jīng)平衡到新加入的brick中了
每做一次擴(kuò)容后都需要做一次磁盤(pán)平衡平挑。 磁盤(pán)平衡是在萬(wàn)不得已的情況下再做的,一般再創(chuàng)建一個(gè)卷就可以了系草。

第四節(jié): GlusterFS分布式存儲(chǔ)優(yōu)化

1.存儲(chǔ)優(yōu)化代碼

Auth_allow  #IP訪問(wèn)授權(quán)通熄;缺省值(*.allow all);合法值:Ip地址
Cluster.min-free-disk  #剩余磁盤(pán)空間閥值找都;缺省值(10%)唇辨;合法值:百分比
Cluster.stripe-block-size  #條帶大小能耻;缺省值(128KB)赏枚;合法值:字節(jié)
Network.frame-timeout  #請(qǐng)求等待時(shí)間;缺省值(1800s)晓猛;合法值:1-1800
Network.ping-timeout  #客戶端等待時(shí)間饿幅;缺省值(42s);合法值:0-42
Nfs.disabled  #關(guān)閉NFS服務(wù)戒职;缺省值(Off)栗恩;合法值:Off|on
Performance.io-thread-count  #IO線程數(shù);缺省值(16)洪燥;合法值:0-65
Performance.cache-refresh-timeout  #緩存校驗(yàn)時(shí)間磕秤;缺省值(1s)乳乌;合法值:0-61
Performance.cache-size  #讀緩存大小亲澡;缺省值(32MB)钦扭;合法值:字節(jié)

Performance.quick-read: #優(yōu)化讀取小文件的性能
Performance.read-ahead: #用預(yù)讀的方式提高讀取的性能,有利于應(yīng)用頻繁持續(xù)性的訪問(wèn)文件床绪,當(dāng)應(yīng)用完成當(dāng)前數(shù)據(jù)塊讀取的時(shí)候客情,下一個(gè)數(shù)據(jù)塊就已經(jīng)準(zhǔn)備好了。
Performance.write-behind:先寫(xiě)入緩存內(nèi)癞己,在寫(xiě)入硬盤(pán)膀斋,以提高寫(xiě)入的性能。
Performance.io-cache:緩存已經(jīng)被讀過(guò)的

調(diào)優(yōu)示例

#開(kāi)啟 指定 volume 的配額:
[root@node1 ~]# gluster volume quota test enable
volume quota : success
#限制 models 中 / (既總目錄) 最大使用 10M 空間
[root@node1 ~]# gluster volume quota test limit-usage / 10MB
volume quota : success
#設(shè)置 cache 大小(此處要根據(jù)實(shí)際情況痹雅,如果設(shè)置太大可能導(dǎo)致后面客戶端掛載失敗)
[root@node1 ~]# gluster volume set test performance.cache-size 512MB
volume set: success
#開(kāi)啟 異步仰担,后臺(tái)操作
[root@node1 ~]# gluster volume set test performance.flush-behind on
volume set: success
#設(shè)置 io 線程 32
[root@node1 ~]# gluster volume set test performance.io-thread-count 32
volume set: success
#設(shè)置 回寫(xiě) (寫(xiě)數(shù)據(jù)時(shí)間,先寫(xiě)入緩存內(nèi)绩社,再寫(xiě)入硬盤(pán))
[root@node1 ~]# gluster volume set test performance.write-behind on
volume set: success
#調(diào)優(yōu)之后的volume信息
[root@node1 ~]# gluster volume info
Volume Name: test
Type: Replicate
Volume ID: 5c94db58-2dfa-4b31-965e-fc082011c1b5
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node1:/data1
Brick2: node2:/data1
Brick3: node3:/data1
Options Reconfigured:
performance.io-thread-count: 32
performance.write-behind: on
performance.flush-behind: on
performance.cache-size: 512MB
features.quota-deem-statfs: on
features.inode-quota: on
features.quota: on
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
performance.client-io-threads: off

2.優(yōu)化參數(shù)調(diào)整方式

命令格式:
gluster.volume set <卷><參數(shù)>

例如:
#打開(kāi)預(yù)讀方式訪問(wèn)存儲(chǔ)
[root@node01 ~]# gluster volume set gv2 performance.read-ahead on

#調(diào)整讀取緩存的大小
[root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M

3.監(jiān)控及日常維護(hù)

使用zabbix自帶的模板即可摔蓝,CPU、內(nèi)存愉耙、磁盤(pán)空間贮尉、主機(jī)運(yùn)行時(shí)間、系統(tǒng)load朴沿。日常情況要查看服務(wù)器監(jiān)控值猜谚,遇到報(bào)警要及時(shí)處理。
#看下節(jié)點(diǎn)有沒(méi)有在線
gluster volume status nfsp

#啟動(dòng)完全修復(fù)
gluster volume heal gv2 full

#查看需要修復(fù)的文件
gluster volume heal gv2 info

#查看修復(fù)成功的文件
gluster volume heal gv2 info healed

#查看修復(fù)失敗的文件
gluster volume heal gv2 heal-failed

#查看主機(jī)的狀態(tài)
gluster peer status

#查看腦裂的文件
gluster volume heal gv2 info split-brain

#激活quota功能
gluster volume quota gv2 enable

#關(guān)閉quota功能
gulster volume quota gv2 disable

#目錄限制(卷中文件夾的大卸脑)
gluster volume quota limit-usage /data/30MB --/gv2/data

#quota信息列表
gluster volume quota gv2 list

#限制目錄的quota信息
gluster volume quota gv2 list /data

#設(shè)置信息的超時(shí)時(shí)間
gluster volume set gv2 features.quota-timeout 5

#刪除某個(gè)目錄的quota設(shè)置
gluster volume quota gv2 remove /data

備注:quota功能魏铅,主要是對(duì)掛載點(diǎn)下的某個(gè)目錄進(jìn)行空間限額。如:/mnt/gulster/data目錄坚芜,而不是對(duì)組成卷組的空間進(jìn)行限制览芳。

4.GlusterFS日常維護(hù)及故障處理

1.硬盤(pán)故障

如果底層做了raid配置,有硬件故障鸿竖,直接更換硬盤(pán)沧竟,會(huì)自動(dòng)同步數(shù)據(jù)。
  如果沒(méi)有做raid處理方法:參見(jiàn)博客:http://blog.51cto.com/cmdschool/1908647

2.一臺(tái)主機(jī)故障

一臺(tái)節(jié)點(diǎn)故障的情況包含以下情況:

物理故障 同時(shí)有多塊硬盤(pán)故障千贯,造成數(shù)據(jù)丟失 系統(tǒng)損壞不可修復(fù) 解決方法:

找一臺(tái)完全一樣的機(jī)器,至少要保證硬盤(pán)數(shù)量和大小一致搞坝,安裝系統(tǒng)搔谴,配置和故障機(jī)同樣的 IP,安裝 gluster 軟件桩撮, 保證配置一樣敦第,在其他健康節(jié)點(diǎn)上執(zhí)行命令 gluster peer status峰弹,查看故障服務(wù)器的 uuid

[root@mystorage2 ~]# gluster peer status
Number of Peers: 3

Hostname: mystorage3
Uuid: 36e4c45c-466f-47b0-b829-dcd4a69ca2e7
State: Peer in Cluster (Connected)

Hostname: mystorage4
Uuid: c607f6c2-bdcb-4768-bc82-4bc2243b1b7a
State: Peer in Cluster (Connected)

Hostname: mystorage1
Uuid: 6e6a84af-ac7a-44eb-85c9-50f1f46acef1
State: Peer in Cluster (Disconnected)
復(fù)制代碼
修改新加機(jī)器的 /var/lib/glusterd/glusterd.info 和 故障機(jī)器一樣

[root@mystorage1 ~]# cat /var/lib/glusterd/glusterd.info
UUID=6e6a84af-ac7a-44eb-85c9-50f1f46acef1
operating-version=30712
在信任存儲(chǔ)池中任意節(jié)點(diǎn)執(zhí)行

# gluster volume heal gv2 full
就會(huì)自動(dòng)開(kāi)始同步,但在同步的時(shí)候會(huì)影響整個(gè)系統(tǒng)的性能芜果。

可以查看狀態(tài)

# gluster volume heal gv2 info

故障參見(jiàn):https://www.cnblogs.com/xiexiaohua007/p/6602315.html

第五節(jié):GlusterFS在企業(yè)中應(yīng)用場(chǎng)景

理論和實(shí)踐分析鞠呈,GlusterFS目前主要使用大文件存儲(chǔ)場(chǎng)景,對(duì)于小文件尤其是海量小文件右钾,存儲(chǔ)效率和訪問(wèn)性能都表現(xiàn)不佳蚁吝,海量小文件LOSF問(wèn)題是工業(yè)界和學(xué)術(shù)界的人工難題,GlusterFS作為通用的分布式文件系統(tǒng)舀射,并沒(méi)有對(duì)小文件額外的優(yōu)化措施窘茁,性能不好也是可以理解的。

Media
  -文檔脆烟、圖片山林、音頻、視頻
Shared storage  
  -云存儲(chǔ)邢羔、虛擬化存儲(chǔ)驼抹、HPC(高性能計(jì)算)
Big data
  -日志文件、RFID(射頻識(shí)別)數(shù)據(jù)

缺點(diǎn)

擴(kuò)容拜鹤、縮容時(shí)影響的服務(wù)器較多
Glusterfs對(duì)邏輯卷中的存儲(chǔ)單元brick劃分hash分布空間(會(huì)以brick所在磁盤(pán)大小作為權(quán)重框冀,空間總范圍為0至232-1),一個(gè)brick占一份空間署惯,當(dāng)訪問(wèn)某文件時(shí)恩掷,使用Davies-Meyer算法根據(jù)文件名計(jì)算出hash值鳍刷,比較hash值落在哪個(gè)范圍內(nèi),即可確定文件所在的brick,這樣定位文件會(huì)很快百侧。但是在向邏輯卷中添加或移除brick時(shí),hash分布空間會(huì)重新計(jì)算鲜结,每個(gè)brick的hash范圍都會(huì)變化普泡,文件定位就會(huì)失敗,因此需要遍歷文件咙边,把文件移動(dòng)到正確的hash分布范圍對(duì)應(yīng)的brick上猜煮,移動(dòng)的文件可能會(huì)很多,加重系統(tǒng)負(fù)載败许,影響到正常的文件訪問(wèn)操作王带。
遍歷目錄下文件耗時(shí)
1.Glusterfs沒(méi)有元數(shù)據(jù)節(jié)點(diǎn),而是根據(jù)hash算法來(lái)確定文件的分布市殷,目錄利用擴(kuò)展屬性記錄子卷的中brick的hash分布范圍愕撰,每個(gè)brick的范圍均不重疊。遍歷目錄時(shí),需要readdir子卷中每個(gè)brick中的目錄搞挣,獲取每個(gè)文件的屬性和擴(kuò)展屬性带迟,然后進(jìn)行聚合,相對(duì)于有專(zhuān)門(mén)元數(shù)據(jù)節(jié)點(diǎn)的分布式存儲(chǔ)囱桨,遍歷效率會(huì)差很多仓犬,當(dāng)目錄下有大量文件時(shí),遍歷會(huì)非常緩慢舍肠。
2.刪除目錄也會(huì)遇到同樣的問(wèn)題搀继。
3.目前提供的解決方法是合理組織目錄結(jié)構(gòu),目錄層級(jí)不要太深貌夕,目錄下文件數(shù)量不要太多律歼,增大glusterfs目錄緩存。另外啡专,還可以設(shè)計(jì)把元數(shù)據(jù)和數(shù)據(jù)分離险毁,把元數(shù)據(jù)放到內(nèi)存數(shù)據(jù)庫(kù)中(如redis、memcache),并在ssd上持久保存们童。
小文件性能較差
1.Glusterfs主要是為大文件設(shè)計(jì)畔况,如io-cache、read-ahead慧库、write-behind和條帶等都是為優(yōu)化大文件訪問(wèn)跷跪,對(duì)小文件的優(yōu)化很少。
2.Glusterfs采用無(wú)元數(shù)據(jù)節(jié)點(diǎn)的設(shè)計(jì)齐板,文件的元數(shù)據(jù)和數(shù)據(jù)一起保存在文件中吵瞻,訪問(wèn)元數(shù)據(jù)和數(shù)據(jù)的速率相同,訪問(wèn)元數(shù)據(jù)的時(shí)間與訪問(wèn)數(shù)據(jù)的時(shí)間比例會(huì)較大甘磨,而有元數(shù)據(jù)中心的分布式存儲(chǔ)系統(tǒng)橡羞,對(duì)元數(shù)據(jù)服務(wù)器可以采用更快速的ssd盤(pán),可以采用更大的元數(shù)據(jù)緩存等優(yōu)化措施來(lái)減小訪問(wèn)元數(shù)據(jù)時(shí)間與訪問(wèn)數(shù)據(jù)時(shí)間的比值济舆,來(lái)提高小文件性能卿泽。
3.Glusterfs在客戶端采用了元數(shù)據(jù)緩存md-cache來(lái)提高小文件性能,但是md-cache大小有限滋觉,但在海量小文件場(chǎng)景下签夭,緩存命中率會(huì)嚴(yán)重下降,優(yōu)化效果會(huì)減小椎侠,這就需要增大元數(shù)據(jù)緩存第租。
4.針對(duì)小文件性能差的問(wèn)題,也可以參考TFS的做法我纪, TFS會(huì)將大量的小文件合并成一個(gè)大文件慎宾,這個(gè)大文件稱(chēng)為Block儡羔,每個(gè)Block擁有在集群內(nèi)唯一的編號(hào)(Block Id),Block Id在NameServer創(chuàng)建Block時(shí)分配璧诵,NameServer維護(hù)block與DataServer(存儲(chǔ)Block的實(shí)際數(shù)據(jù))的關(guān)系。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載仇冯,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者之宿。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苛坚,隨后出現(xiàn)的幾起案子比被,更是在濱河造成了極大的恐慌,老刑警劉巖泼舱,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件等缀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娇昙,警方通過(guò)查閱死者的電腦和手機(jī)尺迂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冒掌,“玉大人噪裕,你說(shuō)我怎么就攤上這事」珊粒” “怎么了膳音?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)铃诬。 經(jīng)常有香客問(wèn)我祭陷,道長(zhǎng),這世上最難降的妖魔是什么趣席? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任兵志,我火速辦了婚禮,結(jié)果婚禮上吩坝,老公的妹妹穿的比我還像新娘毒姨。我一直安慰自己,他們只是感情好钉寝,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布弧呐。 她就那樣靜靜地躺著,像睡著了一般嵌纲。 火紅的嫁衣襯著肌膚如雪俘枫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天逮走,我揣著相機(jī)與錄音鸠蚪,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茅信,可吹牛的內(nèi)容都是我干的盾舌。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蘸鲸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妖谴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起酌摇,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤膝舅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窑多,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仍稀,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年埂息,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了技潘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡千康,死狀恐怖崭篡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吧秕,我是刑警寧澤琉闪,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站砸彬,受9級(jí)特大地震影響颠毙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砂碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一蛀蜜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧增蹭,春花似錦滴某、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至饼灿,卻和暖如春幕侠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碍彭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工晤硕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悼潭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓舞箍,卻偏偏與公主長(zhǎng)得像舰褪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疏橄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361