glusterfs 安裝與配置嘗試。
要做一些關于 GlusterFS 的工作,是以又開了一個坑:-)
本篇主要簡單介紹 Gluster,之後記錄一下安裝過程。
Gluster 簡介
GlusterFS is a scalable network filesystem suitable for data-intensive tasks such as cloud storage and media streaming. GlusterFS is free and open source software and can utilize common off-the-shelf hardware.
Get Started!
英語好的同學可以直接看原文檔了,比我說的好得多。GlusterFS Quick Start Guide
Step1 Have at least three nodes
- Fedora 30 (or later) on 3 nodes named "server1", "server2" and "server3". centos7 應該也是可以的。
- A working network connection. 能聯網。
- 至少兩塊虛拟磁盤,一塊用來安裝 OS,一塊用來提供 GlusterFS 的存儲服務。安裝過程。又因為我直接安裝了3個 centos7 的虛拟機,需要在每台虛拟機上再增加一塊虛拟硬碟,一共需要 3*2 = 6 塊虛拟硬碟。
- 重要:在每一台虛拟機上設定 NTP 服務,目的是擷取檔案系統上層的一些必要服務。
ntp 的安裝方法:
rpm -q ntp
// 檢查 ntp 是否已經安裝
yum -y install ntp
// 如果沒安裝,使用該指令安裝。如果提示需要 root 權限,可以使用 su 指令切換到 root 使用者。
systemctl enable ntpd
systemctl start ntpd
// 設定 ntp 開機啟動并啟動 ntp。
Note:因為 GlusterFS 直接向
var/lib/glusterd
中動态寫入配置檔案,當它無法寫入這些檔案時會導緻一些不穩定的行為發生。推薦為
var/log/
之類的目錄建立新的分區,減少類似情況的發生。
Step2 Format and mount the bricks
設定 XFS 檔案系統來支援後端塊(backend bricks),GlusterFS 工作在檔案系統的上層,是以支援一些擴充的屬性。
設定 sdb 分區:
主要用 fdisk 指令進行劃分。如下圖所示,劃紅線的部分是需要輸入的指令。關于檔案系統的更多内容,詳見《Linux指令行與shell程式設計大全》第八章。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugTMwUzM0QjNy0CN3gTMyADM4ETOwATMwIDMy0iMzkDMyITMvwFMxAjMwIzLcJzM5AjMyEzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
教程裡給的例子預設 bricks 駐留在 sdb1 上,如果在安裝時增加了一塊硬碟,這個時候 sdb 硬碟應該是沒有配置設定過的。
mkfs.xfs -i size=512 /dev/sdb1
mkdir -p /data/brick1
echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab
mount -a && mount
可以使用
df -a
檢視:
發現 sdb1 确實已經挂載到
/data/brick1
目錄下。
Step3 Installing GlusterFS
官方文檔給的很簡單:
yum install glusterfs-server
但是直接敲指令會得到如下的結果:
原因在于 glusterfs-server 這個包在一個很奇怪的位置:http://mirror.centos.org/centos/7/storage/x86_64/gluster-4.1/
但是原來的
etc/yum.repos.d/CentOS-Base.repo
中完全沒有這個位址,是以我們需要在這個檔案的後面加上下面的這部分代碼。不過别急,先備份一手:
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
複制好了之後,就可以在 CentOS-Base.repo 裡加上下面的代碼了。
# CentOS-Gluster-6.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more
# information
[centos-gluster6]
name=CentOS-$releasever - Gluster 6
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repo=storage-gluster-6
#baseurl=http://mirror.centos.org/$contentdir/$releasever/storage/$basearch/gluster-6/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
[centos-gluster6-test]
name=CentOS-$releasever - Gluster 6 Testing
baseurl=http://buildlogs.centos.org/centos/$releasever/storage/$basearch/gluster-6/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
來源:Glusterfs的安裝、建立卷、配置和優化卷、挂載使用
安裝成功後啟動 gluster 的服務,并檢視狀态:
service glusterd start
service glusterd status
Step4 Configure the firewall
iptables -I INPUT -p all -s <ip-address> -j ACCEPT
這裡的
ip-address
是 “the address of the other node”,注意這裡是 node 不是 nodes,是以我是這樣設定的:
- 第一台虛拟機:iptables -I INPUT -p all -s ip-addr2 -j ACCEPT
- 第二台虛拟機:iptables -I INPUT -p all -s ip-addr3 -j ACCEPT
- 第三台虛拟機:iptables -I INPUT -p all -s ip-addr1 -j ACCEPT
Step5 Configure the trusted pool
在全部的 servers 上執行:
echo "ip_addr1 server1" >> /etc/hosts
echo "ip_addr2 server2" >> /etc/hosts
echo "ip_addr3 server3" >> /etc/hosts
我在 server1 上執行了:
gluster peer probe ip-addr2
gluster peer probe ip-addr3
結果在 server1 上執行
gluster peer status
得到了:
發現一頓瞎比操作之後都變成 disconnected 了QAQ,難頂。。
百度了一下,發現隻要執行這幾條指令之後就可以了:
firewall-cmd --zone=public --add-port=24007-24008/tcp --permanent
firewall-cmd --zone=public --add-port=24009/tcp --permanent
firewall-cmd --zone=public --add-service=nfs --add-service=samba --add-service=samba-client --permanent
firewall-cmd --zone=public --add-port=111/tcp --add-port=139/tcp --add-port=445/tcp --add-port=965/tcp --add-port=2049/tcp --add-port=38465-38469/tcp --add-port=631/tcp --add-port=111/udp --add-port=963/udp --add-port=49152-49251/tcp --permanent
firewall-cmd --reload
來源:stackoverflow
可能需要每次開機都執行一遍?還沒試驗,如果是的話就寫個腳本算了。。。
Step 6 Set up a GlusterFS volume
確定三台機器彼此之間互相連接配接。
在三台機器上均執行:
mkdir -p /data/brick1/gv0
在其中任意一台機器上執行:
gluster volume create gv0 replica 3 server1:/data/brick1/gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0
# output: volume create: gv0: success: please start the volume to access data
gluster volume start gv0
# output: volume start: gv0: success
最後執行
gluster volume info
,得到結果如下圖:
Step 7 Testing the GlusterFS volume
建立好卷之後,當然要來嘗試一下:
首先将 server1 上的卷(volume)挂載在 /mnt/ 檔案夾下,之後在 /mnt/ 中建立 100 個臨時測試檔案。
mount -t glusterfs server1:/gv0 /mnt
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
先檢查一下 mnt 中的檔案數量:
ls -lA /mnt/copy* | wc -l
,結果是 100。
再檢查一下 gv0 中的檔案數量:
ls -lA /data/brick1/gv0/copy*
,結果也是 100。
而且檢查 server2 和 server3 中的 gv0 檔案夾,執行同樣的指令,結果也都是 100。
因為我們之前建立卷的時候添加了一個
replica
屬性,如果去掉這個屬性,那麼在每個 server 的卷中會有大概 33 個檔案。
試驗沒有 replica 屬性的指令:
mkdir -p /data/brick1/gv1 # for all servers
# 以下指令都在 server1 上執行:
gluster volume create gv1 server1:/data/brick1/gv1 server2:/data/brick1/gv1 server3:/data/brick1/gv1 # for any server
gluster volume start gv1
mkdir mnt1 # 讓 gv1 挂載到 mnt1 上
mount -t glusterfs server1:/gv1 /mnt1
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt1/copy-test-$i; done
ls -lA /mnt1/copy* | wc -l
檢視 gv1 的屬性:
發現 gv1 的 type 是 distributed,而不是 gv0 的 replicate。
server1 中 gv1 中檔案清單:
server2 中 gv1 中檔案清單:
server3 中 gv1 中檔案清單:
結語
gluster 的安裝以及配置嘗試就到這裡,下一篇啥時候更新,看緣分吧:-)
參考資料:
gluster 官方文檔
VMWare 安裝 CentOS7 詳細教程
解決無法建立volume的問題
glusterfs測試
glusterfs畫圖