要做一些關於 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編程大全》第八章。
教程里給的例子默認 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
可能需要每次開機都執行一遍?還沒試驗,如果是的話就寫個腳本算了。。。
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畫圖