分佈式存儲之 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