分佈式存儲之 GlusterFS

1.glusterfs 概述

GlusterFS 系統是一個可擴展的網絡文件系統,相比其他分佈式文件系統,GlusterFS 具有高擴展性、高可用性、高性能、可橫向擴展等特點,並且其沒有元數據服務器的設計,讓整個服務沒有單點故障的隱患。

當客戶端訪問 GlusterFS 存儲時,首先程序通過訪問掛載點的形式讀寫數據,對於用戶和程序而言,集羣文件系統是透明的,用戶和程序根本感覺不到文件系統是本地還是在遠程服務器上。讀寫操作將會被交給 VFS(Virtual File System) 來處理,VFS 會將請求交給 FUSE 內核模塊,而 FUSE 又會通過設備 / dev/fuse 將數據交給 GlusterFS Client。最後經過 GlusterFS Client 的計算,並最終經過網絡將請求或數據發送到 GlusterFS Server 上。

2.glusterfs 常用分佈式簡介

分佈式卷也成爲哈希卷,多個文件以文件爲單位在多個 brick 上,使用哈希算法隨機存儲。

應用場景:大量小文件

優點:讀 / 寫性能好

缺點:如果存儲或服務器故障,該 brick 上的數據將丟失

不指定卷類型,默認是分佈式卷

brick 數量沒有限制

創建分佈式卷命令:

gluster volume create volume_name node1:/data/br1 node2:/data/br1

複製卷是將多個文件在多個 brick 上覆制多份,brick 的數目要與需要複製的份數相等,建議 brick 分佈在不同的服務器上。

應用場景:對可靠性高和讀寫性能要求高的場景

優點:讀寫性能好

缺點:寫性能差

replica = brick

創建複製卷:

gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1

replica:文件保存的份數

條帶卷是將文件分成條帶,存放在多個 brick 上,默認條帶大小 128k

應用場景:大文件

優點:適用於大文件存儲

缺點:可靠性低,brick 故障會導致數據全部丟失

stripe = birck

創建條帶卷:

gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1

stripe:條帶個數

分佈式條帶卷是將多個文件在多個節點哈希存儲,每個文件再多分條帶在多個 brick 上存儲

應用場景:讀 / 寫性能高的大量大文件場景

優點:高併發支持

缺點:沒有冗餘,可靠性差

brick 數是 stripe 的倍數

創建分佈式條帶卷:

gluster volume create volume_name stripe 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

分佈式複製卷是將多個文件在多個節點上哈希存儲,在多個 brick 複製多份存儲。

應用場景:大量文件讀和可靠性要求高的場景

優點:高可靠,讀性能高

缺點:犧牲存儲空間,寫性能差

brick 數量是 replica 的倍數

gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1 node3:/data/br1 node4:/data/br1

條帶式複製卷是將一個大文件存儲的時候劃分條帶,並且保存多份

應用場景:超大文件,並且對可靠性要求高

優點:大文件存儲,可靠性高

缺點:犧牲空間寫性能差

brick 數量是 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 環境

日誌存儲集羣採用的是分佈式複製卷,將多個文件在多個節點上哈希存儲,在多個 brick 複製多份存儲。共有五臺服務器,磁盤空間共有 90T,那麼採用這種分佈式複製卷的方式,只有 45T 磁盤空間可用。並且需要採用分佈式複製卷方式需要要有雙數的 brick,所以現採用一臺服務器上創建兩個 brick,如上圖所示,10.102.23.4:/data_01/node 和 10.102.23.44:/data_01/node 是備份關係,其他節點均是如此,10.102.23.44 作爲日誌存儲集羣的管理節點,nfs-ganesha 服務只需要安裝在控制節點,客戶端則可以通過 nfs 方式掛載。

1# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/sysconfig/selinux #關閉selinux
2
3# iptables -F #清除防火牆規則
4
5

安裝 glusterfs(01-05)

 1# yum install userspace-rcu-*
 2
 3# yum install python2-gluster-3.13.2-2.el7.x86_64.rpm
 4
 5# yum install tcmu-runner-* libtcmu-*
 6
 7# yum install gluster*
 8
 9# yum install nfs-ganesha-*
10
11#這個nfs只要需要對外掛載的哪臺服務器需要安裝(10.102.23.44)
12
13# systemctl start glusterd.service #所有服務器啓動glusterd
14
15# systemctl start rpcbind
16
17# systemctl enable glusterd.service
18
19# systemctl enable rpcbind
20
21# ss -lnt #查詢端口是否有爲24007,如果有則服務正常運行
22
23

創建集羣 (在 10.102.23.44 節點上執行一下操作,向集羣中添加節點):

 1[root@admin-node ~]# gluster peer probe 10.102.23.44
 2
 3peer probe: success. [root@admin-node ~]# gluster peer probe 10.102.23.45
 4
 5peer probe: success.
 6
 7[root@admin-node ~]# gluster peer probe 10.102.23.46
 8
 9peer probe: success.
10
11[root@admin-node ~]# gluster peer probe 10.102.23.47
12
13peer probe: success.
14
15[root@admin-node ~]# gluster peer probe 10.102.23.4
16
17peer probe: success.
18
19

查看虛擬機信任狀態添加結果

 1[root@admin-node ~]# gluster peer status
 2
 3Number of Peers: 4
 4
 5Hostname: 10.102.23.46
 6
 7Uuid: 31b5ecd4-c49c-4fa7-8757-c01604ffcc7e
 8
 9State: Peer in Cluster (Connected)
10
11  
12
13Hostname: 10.102.23.47
14
15Uuid: 38a7fda9-ad4a-441a-b28f-a396b09606af
16
17State: Peer in Cluster (Connected)
18
19  
20
21Hostname: 10.102.23.45
22
23Uuid: 9e3cfb56-1ed4-4daf-9d20-ad4bf2cefb37
24
25State: Peer in Cluster (Connected)
26
27  
28
29Hostname: 10.102.23.4
30
31Uuid: 1836ae9a-eca5-444f-bb9c-20f032247bcb
32
33State: Peer in Cluster (Connected)
34
35

在所有節點進行以下磁盤操作:

1[root@admin-node ~]# fdisk /dev/sdb
2
3

創建卷組:

1[root@admin-node ~]# vgcreate vg_data01 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
2
3[root@admin-node ~]# vgcreate vg_data02 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1
4
5

查看卷組:

1[root@admin-node ~]# vgdisplay
2
3

創建邏輯卷:

1[root@admin-node ~]# lvcreate -n lv_data01 -L 9TB vg_data01
2
3[root@admin-node ~]# lvcreate -n lv_data02 -L 9TB vg_data02
4
5

查看邏輯卷:

1[root@admin-node ~]# lvdisplay
2
3

格式化邏輯卷:

1[root@admin-node ~]# mkfs.xfs /dev/vg_data01/lv_data01
2
3[root@admin-node ~]# mkfs.xfs /dev/vg_data02/lv_data02
4
5

掛載邏輯卷:

 1[root@admin-node ~]# mkdir -p /data_01/node /data_02/node
 2
 3[root@admin-node ~]# vim /etc/fstab
 4
 5/dev/vg_data01/lv_data01 /data_01 xfs defaults 0 0
 6
 7/dev/vg_data02/lv_data02 /data_02 xfs defaults 0 0
 8
 9[root@admin-node ~]# mount /data_01
10
11[root@admin-node ~]# mount /data_02
12
13

分佈式複製模式(組合型), 最少需要 4 臺服務器才能創建。

創建卷:

1[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
2
3

啓動創建的卷:

1[root@admin-node ~]# gluster volume start data-volume
2
3

volume start: data-volume: success 所有機器都可以查看:

1[root@admin-node ~]# gluster volume info
2
3

查看分佈式卷的狀態:

1[root@admin-node ~]# gluster volume status
2
3

基於以上 glusterfs 部署,glusterfs 分佈式複製卷已經完成

4.nfs-ganesha 環境搭建

glusterfs 服務本身也是支持 nfs 掛載,由於現有生產環境存在多個網段,並且有些網段與 glusterfs 存儲服務器網段是不通,所以需要通過 nginx 代理 nfs 來實現 nfs 掛載。Glusterfs 服務只是支持 nfs3 版本的掛載,在通過 nginx 代理方面也不是那麼方便,端口繁多,所以 glusterfs 與 NFSs-Ganesha 是完美組合。NFSs-Ganesha 通過 FSAL(文件系統抽象層) 將一個後端存儲抽象成一個統一的 API,提供給 Ganesha 服務端,然後通過 NFS 協議將其掛載到客戶端。在客戶端上對掛出來的空間進行操作。並且 NFSs-Ganesha 可以指定 nfs 的版本。

在管理節點 10.102.23.44 上安裝 nfs-ganesha,在一開始部署 glusterfs 已在管理節點上安裝,這裏就不重複說明了,直接簡要說明配置文件

  1[root@admin-node ~]# vim /etc/ganesha/ganesha.conf
  2
  3.....................................
  4
  5EXPORT
  6
  7{
  8
  9## Export Id (mandatory, each EXPORT must have a unique Export_Id)
 10
 11#Export_Id = 12345;
 12
 13Export_Id = 10;
 14
 15  
 16
 17## Exported path (mandatory)
 18
 19#Path = /nonexistant;
 20
 21Path = /data01;
 22
 23  
 24
 25## Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
 26
 27#Pseudo = /nonexistant;
 28
 29Pseudo = /data01; #客戶端通過nfs掛載的根目錄
 30
 31  
 32
 33## Restrict the protocols that may use this export. This cannot allow
 34
 35## access that is denied in NFS_CORE_PARAM.
 36
 37#Protocols = 3,4;
 38
 39Protocols = 4; #客戶端nfs掛載的版本
 40
 41  
 42
 43## Access type for clients. Default is None, so some access must be
 44
 45## given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block
 46
 47#Access_Type = RW;
 48
 49Access_Type = RW; #權限問題
 50
 51  
 52
 53## Whether to squash various users.
 54
 55#Squash = root_squash;
 56
 57Squash = No_root_squash; #root降級
 58
 59  
 60
 61## Allowed security types for this export
 62
 63#Sectype = sys,krb5,krb5i,krb5p;
 64
 65Sectype = sys; #類型
 66
 67  
 68
 69## Exporting FSAL
 70
 71#FSAL {
 72
 73#Name = VFS;
 74
 75#}
 76
 77FSAL {
 78
 79Name = GLUSTER;
 80
 81hostname = "10.102.23.44"; #glusterfs管理節點IP
 82
 83volume = "data-volume"; #glusterfs卷名
 84
 85}
 86
 87}
 88
 89...................
 90
 91[root@admin-node ~]# systemctl restart nfs-ganesha
 92
 93[root@admin-node ~]# systemctl enable nfs-ganesha
 94
 95[root@admin-node ~]# showmount -e 10.102.23.44
 96
 97Export list for 10.102.23.44: #nfs-ganesha搭建成功
 98
 99
100

5. 客戶端掛載

以 glusterfs 方式掛載:

1[root@admin-node ~]# mkdir /logs
2
3[root@admin-node ~]# mount -t glusterfs 10.102.23.44:data-volume /logs/
4
5

以 NFS 方式進行掛載:

在客戶端 (10.1.99 段):

 1[root@moban-00 ~]#yum -y install nfs-utils rpcbind
 2
 3[root@moban-00 ~]# systemctl start rpcbind
 4
 5[root@moban-00 ~]# systemctl enable rpcbind
 6
 7[root@moban-00 ~]# mkdir /home/dwweiyinwen/logs/
 8
 9[root@moban-00 ~]# mount -t nfs -o vers=4,proto=tcp,port=2049 10.102.23.44:/data01 /home/dwweiyinwen/logs/
10
11

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/RLPaNbKJh4gjrFbaOzO-Sw