天天看點

GlusterFS 安裝與配置

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

GlusterFS 安裝與配置

教程裡給的例子預設 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

檢視:

GlusterFS 安裝與配置

發現 sdb1 确實已經挂載到

/data/brick1

目錄下。

Step3 Installing GlusterFS

官方文檔給的很簡單:

yum install glusterfs-server

但是直接敲指令會得到如下的結果:

GlusterFS 安裝與配置

原因在于 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
           
GlusterFS 安裝與配置

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

得到了:

GlusterFS 安裝與配置

發現一頓瞎比操作之後都變成 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

,得到結果如下圖:

GlusterFS 安裝與配置

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 的屬性:

GlusterFS 安裝與配置

發現 gv1 的 type 是 distributed,而不是 gv0 的 replicate。

server1 中 gv1 中檔案清單:

GlusterFS 安裝與配置

server2 中 gv1 中檔案清單:

GlusterFS 安裝與配置

server3 中 gv1 中檔案清單:

GlusterFS 安裝與配置

結語

gluster 的安裝以及配置嘗試就到這裡,下一篇啥時候更新,看緣分吧:-)

參考資料:

gluster 官方文檔

VMWare 安裝 CentOS7 詳細教程

解決無法建立volume的問題

glusterfs測試

glusterfs畫圖

繼續閱讀