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編程大全》第八章。

教程里給的例子默認 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畫圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM