學習Gluster創建不同卷。

學習複習使用。只學習創建不同卷,不測試不同卷性能差別。

四個虛擬機進行測試

關閉防火牆 設置selinux爲permissive

三個服務端
192.168.199.81 gluster-1
192.168.199.82 gluster-2
192.168.199.83 gluster-3

一個客戶端 測試掛載卷
192.168.199.84 gluster-client

服務端每個服務器添加兩塊10G的硬盤並掛載用作 brick點。

硬盤掛載和gluster軟件安裝

硬盤掛載以gluster-1 爲例
查看硬盤是否添加。 我的虛擬機上顯示的/dev/sdb //dev/sdc 表示新加的兩塊硬盤設備。
新增的兩塊硬盤
設置掛載點

mkdir -p /gluster/disk1
mkdir -p /gluster/disk2

設置硬盤的文件格式 可以爲 xfs ext2 ext3 ext4 等。選擇xfs

mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc

將其寫入 /etc/fstab 文件實現開機掛載

echo "/dev/sdb        /gluster/disk1  xfs     defaults        0 0" >> /etc/fstab 
echo "/dev/sdc        /gluster/disk2  xfs     defaults        0 0" >> /etc/fstab 

立即掛載 /etc/fstab 文件

mount -a

掛載完成查看
兩塊硬盤掛載成功
三個gluster服務節點都要設置

gluster使用yum 方式安裝。

所有節點都要安裝gluster源。版本選擇6。41儘管是長期支持版本,但是似乎glusterfs-fuse 依賴庫之類有衝突。。。

yum -y install centos-release-gluster6

三個服務端安裝

yum -y install glusterfs-server

用戶端安裝

yum -y install glusterfs-fuse

只有在使用Infiniband時才需要安裝RDMA模塊。這應該是一個不同於tcp/ip的網絡協議。。。

yum -y install glusterfs-rdma

glusterfs是基礎包,也是服務軟件和客戶軟件的依賴包。會自動安裝。

服務端安裝完成查看 安裝軟件。。。看着軟件版本和源版本好像不一致。。。沒關係。安裝上就行。

rpm -qa | grep gluster

服務端軟件

客戶端安裝完成查看 安裝軟件

rpm -qa | grep gluster

客戶端軟件
啓動glusterd 守護進程,並設置開機自啓

systemctl enable glusterd
systemctl start glusterd

配置受信任池
在gluster-1節點 將gluster-2 gluster-3加入受信任池。

gluster peer probe gluster-1
gluster peer probe gluster-2

測試安裝不同卷。。。

brick: gluster基本存儲單元,由受信任存儲池中服務器上的導出目錄表示。
brick通過以下格式將服務器與導出目錄組合來表示。SERVER:EXPORT

myhostname:/exports/myexportdir/

創建卷命令
[] 表示可省略

gluster volume create <NEW-VOLNAME> [stripe <COUNT>] [replica <COUNT> [arbiter <COUNT>]] [disperse [<COUNT>]] [disperse-data <COUNT>] [redundancy <COUNT>] [transport <tcp|rdma|tcp,rdma>] <NEW-BRICK>... [force] - create a new volume of specified type with mentioned bricks

過於長。。。其實不是特別複雜。先放這裏,不用太在意
transport <tcp|rdma|tcp,rdma> 這一塊,表明使用的網絡協議,默認是tcp。我想大多數人都使用的tcp協議吧。如果有使用其他網絡協議的,那應該比我懂多了。。。

1.基礎卷 Distribute(分佈式卷)

分佈式卷。這種類型卷數據沒有冗餘,只是將數據分佈到不同的brick 中。也就是說數據沒有備份。一旦數據丟失就真的丟失了。因此一般不常用。

默認創建不加額外參數就是 分佈式卷
創建一個包含3個brick的分佈式卷。卷名 gv-distributed

gluster volume create gv-distributed gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 force

末尾 加上force是因爲我們直接將 掛載目錄也就是brick導出目錄設置數據存儲點了,如果不想加force 可以設置

gluster volume create gv-distributed gluster-1:/gluster/disk1/brick gluster-2:/gluster/disk1/brick gluster-3:/gluster/disk1/brick 

/gluster/disk1/brick中 brick目錄不用我們手動創建。

開啓卷,查看該卷信息

gluster volume start gv-distributed
gluster volume info

在這裏插入圖片描述
可以看到改卷類型是Distribute Brick數目是3 傳輸類型是tcp以及其他信息。

客戶端掛載該卷並寫入數據查看數據分佈

mkdir /mnt/test-distributed
mount -t glusterfs gluster-1:gv-distributed /mnt/test-distributed/

分佈式卷掛載
測試寫入文件

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/test-distributed/copy-test-$i; done

將message文件複製100份寫入到掛載的目錄。

成功後可以在gluster-1 gluster-2 gluster-3服務節點查看作爲brick的硬盤中數據。

cd /gluster/disk1
ls

我的文件分佈如下
gluster-1
gluster-1
gluster-2
gluster-3
gluster-3
gluster-3
數量上可能不是特別平均,但是也差不太多。分佈式卷數據分佈大概就是這樣,將數據分佈到不同的brick,沒有副本備份。

2.基礎卷 Replicate(複製卷)

在創建卷時寫入類型 replica 和副本數量。且副本數量與組成改卷的brick數目一致的話就是 基礎複製卷。可選 [arbiter ] 我也不知道什麼用的(似乎是設置仲裁器的數量,防止腦裂)。以後學會了再來補充
最好是3副本以上,2副本容易造成腦裂。

創建一個由3brick組成的3副本複製卷。 卷名 gv-replicated

gluster volume create gv-replicated replica 3 gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force

開啓卷 查看卷信息

gluster volume start gv-replicated
gluster volume info gv-replicated

複製卷信息
可以看到 卷類型是一個 複製卷 Brick數量1X3,3表示數據有3個副本。1表示分佈式的數量,分佈式數量爲1表示數據只會分佈在由這三個副本組成的副本羣中。如果爲2表示數據會分佈在兩個副本羣中。

客戶端掛載該卷並寫入數據查看數據分佈

mkdir /mnt/test-replicated
mount -t glusterfs gluster-1:gv-replicated /mnt/test-replicated/

複製卷掛載
可以看到複製卷的 容量約爲10G 是3個brick 加起來的1/3。因爲數據要有3份。
測試向該掛載卷寫入數據

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/test-replicated/copy-test-$i; done

查看服務端查看作爲brick的硬盤中數據。

cd /gluster/disk2
ls

gluster-1
gluster-1
gluster-2
gluster-2
gluster-3
gluster-3
三個brick的內容完全一致。。。因爲是3副本複製卷。gluster會自動維護副本羣中文件。

有時候可以手動恢復副本羣中 文件不同的brick。比如 現在刪除 gluster-1的brick中的copy-test-001 不會使用程序刪除

cd /gluster/disk2
rm -f copy-test-001

刪除copy-test-001
可以看到刪除成功。
客戶端掛載點的 文件也少了一個。。。
客戶端掛載點也少了一個
重新掛載後文件正常。。。如果還不正常。
在三個服務節點任一個上執行命令來檢查修復卷
gluster volume heal VOLNAME full

gluster volume heal gv-replicated full

客戶端數據正常
客戶端數據恢復正常
服務節點數據恢復
服務節點刪除數據恢復
不知什麼原因 ,這樣做未必真的有效,數據有時候可能並不會恢復。。。可能gluster修復的是異常問題導致的文件毀壞。手動執行檢測可能不識別什麼的。。。

3.基礎卷 Stripe (條帶卷)。4.0版本之後應該移除了。

不知道什麼原因,gluster似乎移除了該類型卷。條帶卷的意思將一個文件數據均勻的存儲在構成卷的 brick 中。每個brick都存放的是文件的一部分,不是完整的文件。。。該類型卷優勢是,讀取大文件時,文件所在的不同brick同時讀取文件,速度較快。
不過已經移除了。。。就不再多說了。相對應的複合卷什麼的也就沒了。

4.複合卷 Distributed Replicated(分佈式複製卷)

前面說過,複製卷的副本數如果和組成該卷的brick 數量一致,那麼就是一個基礎副本卷。
如果組成改卷的brick數目是副本數的倍數,那麼該卷就是一個分佈式複製卷
注,一定要是倍數關係,brick少一個 多一個 卷的建立都會失敗。。。
刪除剛纔的卷,準備測試創建新卷

gluster volume stop gv-distributed
gluster volume delete gv-distributed

gluster volume stop gv-replicated
gluster volume delete gv-replicated

如果硬盤上面有數據,將硬盤數據也清除掉。
創建一個3副本 的分佈式存儲卷 卷名 gv-dis-rep

gluster volume create gv-dis-rep replica 3 gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force

由6個brick組成的三副本的分佈式複製卷,在該卷中,

gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1

互爲副本,這三個brick中存儲的數據一致。看做副本羣1。三個brick的大小要一致。

gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2

互爲副本,這三個brick中存儲的數據一致。看做副本羣2。三個brick的大小要一致。

副本羣1 和 副本羣2 構成一個分佈式,數據會比較均衡的分佈在這兩個副本羣中。副本羣1中brick和副本羣2中brick大小可以不一致。。。但最好構成gluster集羣的brick大小都是一致的爲好。

開啓卷,查看卷信息
分佈式複製卷的信息
構成該卷的brick有6個。2*3 3表示的就是副本的數量,2表示的分佈式 的數量。

客戶端掛載該卷並寫入數據查看數據分佈

掛載

mkdir /mnt/test-dis-rep
mount -t glusterfs gluster-1:gv-dis-rep /mnt/test-dis-rep

分佈式複製卷掛載
大小爲20G,因爲是兩個副本羣構成,每個副本羣中brick大小都爲10G。
依然是測試寫入100個文件,查看 各個brick中文件分佈。

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/test-dis-rep/copy-test-$i; done

分佈式付志軍寫入數據
查看各個brick 的文件存儲狀況

gluster-1 /gluster/disk1
gluster-1disk1

gluster-2 /gluster/disk1
gluster-2disk1

gluster-3 /gluster/disk1
gluster-3disk1

gluster-1 /gluster/disk2
gluster-1disk2

gluster-2 /gluster/disk2
gluster-2disk2

gluster-3 /gluster/disk2
gluster-3disk2
可以看到 前三個brick的內容一致,後三個brick內容一致。兩個副本羣中數據內容組合起來就是完整的數據內容。

下面說的兩個卷 個人不是特別理解。因此放在了最後,根據官方文檔來學習測試
https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/

5. Dispersed(分散卷)。

應該與不再支持的的條帶卷有那麼一絲類似。。。

分散的卷是基於糾刪碼(erasure codes)的。它在卷中的多塊brick中對文件的編碼數據進行條帶化,並添加了一些冗餘。可以使用分散的卷具有一個可配置水平的可靠性和最小的空間浪費。

關於糾刪碼。。。一臉懵。估計以後也學不會。只要知道 分散卷基於糾刪碼,存在冗餘。類似於糾刪碼中的冗餘級別就可以了。

應該是。假設有一個6塊brick組成的分散卷,如果冗餘爲2,那麼就是最多可以允許兩塊brick損壞,實際可用的空間爲4brick。最優值大概就是6個brick兩個做冗餘。

gluster volume create <NEW-VOLNAME>  [disperse [<count>]] [redundancy <count>] <NEW-BRICK>... [force]

可以通過指定 分散集的brick 數、 冗餘的brick數 或者兩個都指定 來創建分散卷。

  • 如果disperse未指定,或者缺少時,但是指定了redundancy count時,整個卷將被視爲由命令行中枚舉的所有brick組成的單個分散集。

  • 如果 冗餘 的 brick數未指定。會自動機算出最優值。大約就是 2+1 4+2 這種的。如果最優值無法計算得出,冗餘度默認設置爲1。

  • disperse count 的數目中包含了冗餘的數目。

  • 如果指定disperse和 disperse 的count時。命令行列出的brick的數量一定是disperse count 的倍數。可以相等,那就是單個的分散卷。

刪除掉之前的卷。測試創建一個由3個brick 構成的,disperse count 爲3,冗餘brick爲1(redundancy 1)的的分散卷 gv-disperse。

gluster volume create gv-disperse disperse 3 redundancy 1 gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 force

指定了分散集 brick 數爲3 冗餘brick爲1 一共由三個brick組成,這就是一個單一的分散卷。
單一分散卷創建
可以看到該卷信息。構成該卷的brick數 1X(2+1)=3
1個冗餘brick 分散集brick 數爲3。是一個單一的分散卷。

如此指定的話創建方式可以 省略分散集的 count 。結果是一樣的。

gluster volume create gv-disperse disperse  redundancy 1 gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 force

disperse 也可以省略。看到 redundancy 關鍵字 gluster也會知道在創建分散卷。

 gluster volume create gv-disperse redundancy 1 gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 force

不指定 disperse count 的話默認就是創建單一分散卷。由所有brick構成一個分散集羣。

可以不指定redundancy 1 只設置關鍵字disperse,會自動計算冗餘brick,有三個brick的話,自動計算結果應該也是1。

gluster volume create gv-disperse disperse gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 force

自動計算單一分散卷冗餘brick

客戶端掛載該卷並寫入數據查看數據分佈

mkdir /mnt/test-disperse
mount.glusterfs gluster-1:gv-disperse /mnt/test-disperse

單一分散卷掛載
存入數據。。。

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/test-disperse/copy-test-$i; done

存入數據
查看各個brick中數據
分散卷各brick存放數據
gluster-2 和 gluster-3的數據也是一樣。看上去好像是複製卷一樣啊。
看文件名是一致的,但是文件內容就不一樣了。這些文件並不是一個完整的文件。
它在卷中的多塊brick中對文件的編碼數據進行條帶化,並添加了一些冗餘。
分散卷數據存儲是 條帶化存儲的,單個並不是完整文件。另分散卷是基於糾刪碼的。這個原理確實有點複雜,我也不清楚數據到底怎麼存儲的。。。

對於分散卷。。。知道如何使用就可以了吧。。。

6. Distributed Dispersed(分佈式分散卷)

可以看做多個不同的分散集羣構成一個分佈式的卷。每一個分散集羣保存維護一份數據,多個集羣構成完整的數據。
創建上與單一分散卷創建類似,只不過要設置 分散集羣的brick數目。且構成分佈式分散卷的brick 數目是 分散集羣羣brick數目的倍數。至少2倍。redundancy count的設置依然是根據 分散集羣brick數目( disperse count)設置的。

設置一個6個brick構成的分佈式分散卷gv-dis-dis,分散集羣brick 數目爲3 冗餘爲1。

gluster volume create gv-dis-dis disperse 3 redundancy 1 gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force
gluster volume start gv-dis-dis
gluster volume info gv-dis-dis

分佈式分散卷信息
2X(2+1)=6 6個brick構成分佈式分散卷。2+1 是每個分散集羣有三個brick 其中一個作爲冗餘。 一共由兩個 這樣構造的 分散集羣。

前面說過 gluster會自動計算冗餘的brick數量。因此如此設置也是可以的
不設置冗餘數

gluster volume create gv-dis-dis disperse 3 gluster-1:/gluster/disk1 gluster-2:/gluster/disk1 gluster-3:/gluster/disk1 gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force

客戶端掛載該卷並寫入數據查看數據分佈

 mkdir /mnt/test-dis-dis
 mount.glusterfs gluster-1:gv-dis-dis /mnt/test-dis-dis

分佈式分散卷掛載

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/test-dis-dis/copy-test-$i; done

查看分佈式分散羣 文件分佈
分佈式分散羣文件分佈
gluster-1:/gluster/disk1 gluster-2:gluster/disk1 gluster-3:/gluster/disk1 構成了一個分散集羣。三個brick使用糾刪碼的方式保存數據。
gluster-1:/gluster/disk2 gluster-2:gluster/disk2 gluster-3:/gluster/disk3 構成另外的分散集羣。三個brick使用糾刪碼的方式保存數據。
這兩個分散集羣 加起來構成了完整的數據。。。

卷擴容。卷收縮。卷遷移。

內容比較亂。。。將就着看。
所謂卷擴容,就是向原來卷中加入新的brick。
卷收縮,就是減少卷中的brick。
卷遷移 將一個brick中數據遷移到另一箇中。應該是brick替換。

gluster volume help

查看卷操作幫助。

不管是擴容還是縮容執行前要明確增減的brick數是否可以構成新的平衡。

分佈式卷擴容。

使用卷擴容前要明瞭原卷的構成,新加brick數與擴容的類型。

測試由3分佈式擴展到6分佈式。4或者5也是可以的。。。純分佈式存儲方式brick之間關係沒有那麼密切。
三分不是複製卷信息
三分佈式複製卷信息
假設其中有一定量數據。。。
3分佈式中brick中數據
假設一次添加三個brick,那麼構成該卷的就是6個brick,原卷類型是純分佈式卷,可以擴展成 6個brick 的純分佈式卷,或者2副本的分佈式存儲卷。。。中間如果需要數據遷移,gluster會自動完成。如果不需要遷移數據也能完成,gluster不會遷移數據。

首先測試擴展成6 brick的純分佈式卷

gluster volume add-brick gv-distribute gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force

查看卷信息

gluster volume info gv-distribute

6分佈式存儲卷
查看新增brick 中數據。。。發現爲空

手動進行數據均衡

gluster volume rebalance VOL_NAME start

需要耗費一段時間

gluster volume rebalance gv-distribute start

再次查看新增brick中數據
分佈式卷擴容後新增brick中數據

純分佈式複製卷不能實現數據遷移。。。測試一下brick刪除。

gluster volume remove-brick gv-distribute gluster-1:/gluster/disk2 start

移除brick
可以看到,執行過程中要確認。刪除完成後查看卷信息,發現還是6個brick。因爲刪除比較麻煩,start 後還要commit 提交。

gluster volume remove-brick gv-distribute gluster-1:/gluster/disk2 commit

commit
在這個過程中可以查看刪除狀態

gluster volume remove-brick gv-distribute gluster-1:/gluster/disk2 status

直接使用 force的話,直接從卷中去除該brick,數據會直接丟失。其實該brick中的數據沒有被刪除(只不過不在卷中了,捲上當然就找不到這些數據)。。。start + commit 會先將該brick中數據遷移到其它地方,然後移除該brick。

gluster volume remove-brick gv-distribute gluster-1:/gluster/disk2 force

分佈式卷擴容成分佈式複製卷。

先將卷使用各種方法還原成 3個brick的分佈式卷。測試擴容成2副本分佈式複製卷 因爲現在是一個3 分佈式的,如果要設置成3副本,需要新增6個brick

gluster volume remove-brick gv-distribute gluster-2:/gluster/disk2 start
gluster volume remove-brick gv-distribute gluster-2:/gluster/disk2 commit
gluster volume remove-brick gv-distribute gluster-3:/gluster/disk2 start
gluster volume remove-brick gv-distribute gluster-3:/gluster/disk2 commit

測試新增brick擴容卷 使成爲2副本分佈式複製卷

gluster volume add-brick gv-distribute replica 2 gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force

2副本分佈式複製卷
新增brick中是有數據的,與之前存在的brick一一互爲副本。
gluster-1:/gluster/disk1 與 gluster-1:/gluster/disk2
gluster-2:/gluster/disk1 與 gluster-2:/gluster/disk2
gluster-3:/gluster/disk1 與 gluster-3:/gluster/disk2

測試卷遷移 brick替換

互爲副本之間的brick數據是不能遷移的。。。且副本中有一個brick數據遷移了,會影響另外的副本數據。與之保持一致。
還是直接叫 brick替換好一點。卷遷移不明確。。。

純分佈式卷是不能進行 brick替換的

volume replace-brick: failed: replace-brick is not permitted on distribute only volumes. Please use add-brick and remove-brick operations instead.

brick替換就是使用一塊新的brick替換掉原來的brick。原來的brick退出卷。新增的brick加入該卷。

準備一個 3副本的純複製卷。寫入一定量數據
gluster遷移前數據

disk2 內數據 爲空,disk1 內存放數據
disk2數據爲空
brick 替換 使用 gluster-1:/gluster/disk2 替換 gluster-1:/gluster/disk1

gluster volume replace-brick gv-replicate gluster-1:/gluster/disk1 gluster-1:/gluster/disk2 commit force

卷信息
brick替換後卷信息
構成複製卷的brick 發生了變化

數據遷移
brick替換後數據
disk2 中寫入了數據,disk1 中數據沒有刪除,但是disk1 已經不是構成卷的brick了。其中數據對卷不會有任何影響。。。

將複製卷擴展成分佈式複製卷。

先將brick替換回來。依然是一個3副本的複製卷。

gluster volume replace-brick gv-replicate gluster-1:/gluster/disk2 gluster-1:/gluster/disk1 commit force

只是爲了看着舒服。。。

[root@gluster-1 ~]# gluster volume info
 
Volume Name: gv-replicate
Type: Replicate
Volume ID: e44da150-3767-4cc1-be18-a2a9136a7918
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: gluster-1:/gluster/disk1
Brick2: gluster-2:/gluster/disk1
Brick3: gluster-3:/gluster/disk1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@gluster-1 ~]# 

將 /gluster/disk2中文件數據清空

rm -f /gluster/disk2/*

3副本複製卷不能變成2副本。不知道2副本複製卷可不可以變成3副本
3副本複製卷可擴展爲 分佈式 3 副本複製卷。

gluster volume add-brick gv-replicate gluster-1:/gluster/disk2 gluster-2:/gluster/disk2 gluster-3:/gluster/disk2 force

分佈式3副本複製卷

雜項

設置開機自動掛載gluster卷

編輯/etc/fstab 文件 如下 大概格式如下

gluster:cloud-second /export/secondary/ glusterfs defaults,_netdev      0 0

gluster卷 掛載點 glusterfs defaults,_netdev 0 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章