Gluster FS 部署复制卷与常用命令 常见问题解决
在 liunx 下部署Gluster FS分布式文件系統(tǒng),以及Gluster FS遇到的一些問題解決,常用命令
概述
Gluster FS 是一個(gè)開源分布式文件系統(tǒng),具有強(qiáng)大的橫向擴(kuò)展能力,可支持?jǐn)?shù)PB存儲(chǔ)容量和數(shù)千客戶端,通過Infiniband RDMA 或Tcp/Ip 方式將許多廉價(jià)的x86 主機(jī),通過網(wǎng)絡(luò)互聯(lián)成一個(gè)并行的網(wǎng)絡(luò)文件系統(tǒng)。具有可擴(kuò)展性、高性能、高可用性等特點(diǎn)。
Gluster FS采用可堆疊的用戶空間設(shè)計(jì),如圖所示:
什么是分布式文件系統(tǒng)
簡(jiǎn)單的說,分布式文件系統(tǒng)就是將固定于某個(gè)點(diǎn)的某個(gè)文件系統(tǒng),擴(kuò)展到任意多個(gè)地點(diǎn)/多個(gè)文件系統(tǒng),眾多的節(jié)點(diǎn)組成一個(gè)文件系統(tǒng)網(wǎng)絡(luò)。通過網(wǎng)絡(luò)進(jìn)行節(jié)點(diǎn)間的通信和數(shù)據(jù)傳輸。你無需關(guān)心數(shù)據(jù)是存儲(chǔ)在哪個(gè)節(jié)點(diǎn),或是從哪個(gè)節(jié)點(diǎn)讀取數(shù)據(jù)。
Gluster FS 卷類型
部署
安裝Gluster FS
此處為安裝單機(jī)流程,安裝集群請(qǐng)參考 搭建復(fù)制卷
搜索可用安裝版本
yum search centos-release-gluster
指定 Glusterfs 6 版本(根據(jù)自己要求選擇安裝版本)
yum -y install centos-release-gluster6.noarch
安裝 服務(wù)端 + 客戶端
yum install -y glusterfs*
只安裝客戶端
yum install -y glusterfs-fuse.x86_64
查看版本(如果只有客戶端無法使用該命令)
glusterfs -V
啟動(dòng)服務(wù)
service glusterd start
添加開機(jī)啟動(dòng)
systemctl enable glusterd.service
搭建復(fù)制卷
參考 centos7下glusterFs 分布式文件系統(tǒng)環(huán)境搭建
參考 CentOS7安裝GlusterFS
以上兩個(gè)參考已經(jīng)很詳細(xì)了,你也可以自行搜索文章教程,關(guān)鍵字 (CentOS7、GlusterFS、復(fù)制卷)
以下是自行總結(jié)的步驟
開放通信端口
Linux 有兩種防火墻(firewall、iptables ),請(qǐng)確定自己使用的是什么類型防火墻再放行端口
firewall 防火墻
# 通信端口
firewall-cmd --zone=public --add-port=49152/tcp--permanent
firewall-cmd --zone=public --add-port=24007:24011/tcp--permanent
firewall-cmd --zone=public --add-port=38465:38485/tcp--permanent
重新載入
firewall-cmd --reload
查看防火墻規(guī)則
firewall-cmd --list-ports
iptables 防火墻
iptables -A INPUT -p tcp --dport 49152 -j ACCEPT
iptables -A INPUT -p tcp --dport 24007:24011 -j ACCEPT
iptables -A INPUT -p tcp --dport 38465:38485 -j ACCEPT
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
保存規(guī)則
service iptables save
查看防火墻規(guī)則
iptables -L -n
安裝Gluster FS
集群環(huán)境與角色
| name | ip |
|---|---|
| node-2 | 172.16.10.2 |
| node-3 | 172.16.10.3 |
| node-4 | 172.16.10.4 |
| client | 172.16.10.50 |
-
安裝 Gluster FS Server (node-2、3、4都需執(zhí)行以下命令)
# 搜索可用安裝版本 yum search centos-release-gluster # 指定 Glusterfs 6 版本(根據(jù)自己要求選擇安裝版本) yum -y install centos-release-gluster6.noarch # 安裝 服務(wù)端 + 客戶端 (可以選擇不安裝客戶端) yum install -y glusterfs* # 查看版本 glusterfs -V # 啟動(dòng)服務(wù) service glusterd start # 添加開機(jī)啟動(dòng) systemctl enable glusterd.service -
安裝 Gluster FS Client (在 client 執(zhí)行以下命令,Client 需與 Server 版本一致)
# 搜索可用安裝版本 yum search centos-release-gluster # 指定 Glusterfs 6 版本(根據(jù)自己要求選擇安裝版本) yum -y install centos-release-gluster6.noarch # 只安裝客戶端 yum install -y glusterfs-fuse.x86_64
增加集群節(jié)點(diǎn)
-
關(guān)閉防火墻 or 開放端口
- 開放端口參考 開放通信端口
- 或者關(guān)閉每一臺(tái)機(jī)器的防火墻
# firewalld systemctl stop firewalld.service systemctl disable firewalld.service # or iptables systemctl stop iptables.service systemctl disable iptables.service -
添加節(jié)點(diǎn)
在node-2上執(zhí)行,將node-3、node-4加入集群
gluster peer probe 172.16.10.2 gluster peer probe 172.16.10.3 gluster peer probe 172.16.10.4 -
在node-1上看集群節(jié)點(diǎn)狀態(tài)
[root@172.16.10.2 db]# gluster peer status Number of Peers: 2Hostname: 172.16.10.3 Uuid: d8d232f-e5fb-4752-b40d-b0103afrf8ea State: Peer in Cluster (Connected)Hostname: 172.16.10.4 Uuid: ff3gg732-ae12-4b6c-4rfb-65fd7886588c State: Peer in Cluster (Connected)# 如果節(jié)點(diǎn) State 顯示的不是 (Connected) 則添加節(jié)點(diǎn)未成功,需排查兩個(gè)節(jié)點(diǎn)之間通信是否正常,可以ping 測(cè)試
創(chuàng)建網(wǎng)絡(luò)卷
-
創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄(在三個(gè)節(jié)點(diǎn)都執(zhí)行 node-2、3、4)
mkdir -p /home/hotgv1 -
創(chuàng)建復(fù)制卷三節(jié)點(diǎn)模式
# 語法 gluster volume create 卷名稱 replica 節(jié)點(diǎn)數(shù)量 節(jié)點(diǎn)IP:目錄... force # 示例 gluster volume create hotgv1 replica 3 172.16.10.2:/home/hotgv1 172.16.10.3:/home/hotgv1 172.16.10.4:/home/hotgv1 force -
查看卷信息
# 卷信息 gluster volume info -
啟動(dòng)卷
gluster volume start hotgv1 -
查看卷狀態(tài)
gluster volume statusStatus of volume: hotgv1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick 172.16.10.2:/home/hotgv1 49152 0 Y 6283 Brick 172.16.10.3:/home/hotgv1 49152 0 Y 6216 Brick 172.16.10.4:/home/hotgv1 49152 0 Y 6232# online Y | N 表示節(jié)點(diǎn)是否在線
性能調(diào)優(yōu)
-
性能調(diào)優(yōu)(可選操作步驟)
# 啟用卷配額 gluster volume quota hotgv1 enable # 限制 hotgv1中 / (既總目錄) 最大使用 100GB 空間 gluster volume quota hotgv1 limit-usage / 100GB # 設(shè)置 cache 大小(此處要根據(jù)實(shí)際情況,如果設(shè)置太大可能導(dǎo)致后面客戶端掛載失敗) gluster volume set hotgv1 performance.cache-size 512MB # 開啟 異步,后臺(tái)操作 gluster volume set hotgv1 performance.flush-behind on # 設(shè)置 io 線程 32 gluster volume set hotgv1 performance.io-thread-count 32 # 設(shè)置 回寫 (寫數(shù)據(jù)時(shí)間,先寫入緩存內(nèi),再寫入硬盤) gluster volume set hotgv1 performance.write-behind on# 查看調(diào)優(yōu)后的卷信息 gluster volume info
掛載網(wǎng)絡(luò)卷
-
設(shè)置ip白名單
# 僅白名單IP才能掛載客戶端訪問卷 *通配符 gluster volume set hotgv1 auth.allow 172.16.10.50,172.16.10.*, -
掛載卷(在 client 172.16.10.50 執(zhí)行)
# 創(chuàng)建數(shù)據(jù)訪問掛載點(diǎn) mkdir -p /mnt/hotgv1 # 掛載卷 mount -t glusterfs IP:卷名 掛載點(diǎn)目錄 # 例 1 mount -t glusterfs 172.16.10.2:hotgv1 /mnt/hotgv1 # 例 2 不要記錄掛載日志 mount -t glusterfs -o log-level=NONE 172.16.10.2:hotgv1 /mnt/hotgv1# df 命令檢查掛載狀態(tài) df -h# 掛載失敗 檢查卷白名單、測(cè)試節(jié)點(diǎn)之間通信Ping、防火墻
測(cè)試卷工作
-
測(cè)試卷工作 (在 client 172.16.10.50 執(zhí)行)
# 往該目錄寫入文件,隨后查看gluster服務(wù)器的存儲(chǔ)情況 time dd if=/dev/zero of=/mnt/hotgv1/hello bs=100M count=1 -
查看卷節(jié)點(diǎn)文件是否同步
# 172.16.10.2 ll /home/hotgv1 # 172.16.10.3 ll /home/hotgv1 # 172.16.10.4 ll /home/hotgv1
常見問題
遇到問題,建議先排查錯(cuò)誤日志,90%的問題都可以找到原因
cd /var/log/glusterfs/
節(jié)點(diǎn)
-
新增節(jié)點(diǎn)到集群后,集群其余節(jié)點(diǎn)無法感知新增節(jié)點(diǎn)狀態(tài),或者新增節(jié)點(diǎn)無法同步數(shù)據(jù),通信等情況
參考 開放通信端口
-
故障節(jié)點(diǎn)重新上線
當(dāng)執(zhí)行
gluster volume status命令發(fā)現(xiàn)有節(jié)點(diǎn) Online 狀態(tài)為 N,該情況一般為網(wǎng)絡(luò)通信故障導(dǎo)致節(jié)點(diǎn)狀態(tài)為掉線,解決方法:- 重啟掉線節(jié)點(diǎn) glusterfs程序,使其重新上線
service glusterd restart - 排查掉線節(jié)點(diǎn)防火墻
- 如果仍然無法成功上線 參考 故障節(jié)點(diǎn)排除方案
- 重啟掉線節(jié)點(diǎn) glusterfs程序,使其重新上線
-
故障節(jié)點(diǎn)排除(非復(fù)制卷,慎用)
? 如果重啟節(jié)點(diǎn)仍然無法解決 節(jié)點(diǎn)掉線
- 備份故障節(jié)點(diǎn)目錄 /var/lib/glusterd 中的 glusterd.info 文件 與 peers 文件夾
- stop gluster 服務(wù) 刪除 /var/lib/glusterd 目錄下的所有文件
- 啟動(dòng) gluster 服務(wù) 將備份的 glusterd.info文件與 peers 文件夾覆蓋到 /var/lib/glusterd 中
- 重啟 gluster 服務(wù)
掛載
-
掛載點(diǎn)異常處理方法
-
當(dāng)掛載點(diǎn) 出現(xiàn) 掛載點(diǎn)傳輸未建立
??? ? ? ? ? ? /mnt/hotgv1這種情況是掛載目標(biāo)節(jié)點(diǎn)掉線,導(dǎo)致掛載點(diǎn)崩潰,通常帶來 無法訪問、寫入網(wǎng)絡(luò)卷等問題
處理方法:卸載掛載點(diǎn) 重新掛載
# 卸載掛載點(diǎn)(當(dāng)出現(xiàn)此情況時(shí)通常無法使用該命令卸載) umount /mnt/hotgv1cn # 使用此命令卸載 fusermount-glusterfs -uz /mnt/hotgv1# 重新掛載 mount -t glusterfs 172.16.10.2:hotgv1 /mnt/hotgv1該情況一般 伴隨網(wǎng)絡(luò)卷有部分節(jié)點(diǎn)掉線
# 使用此命令排查卷健康狀態(tài) 每個(gè)節(jié)點(diǎn)都執(zhí)行一遍 gluster volume status# 發(fā)現(xiàn)存在掉線節(jié)點(diǎn),可嘗試重啟服務(wù)解決,如果掉線節(jié)點(diǎn)自身參考卷狀態(tài)正常,而其它節(jié)點(diǎn)無法連接掉線節(jié)點(diǎn),可排查防火墻原因
-
注意事項(xiàng)
集群角色
- Brick 表示是集群節(jié)點(diǎn),集群節(jié)點(diǎn)只能讀取文件,不支持向卷中寫入數(shù)據(jù)或者改變數(shù)據(jù),如果向節(jié)點(diǎn)目錄寫入數(shù)據(jù),并不會(huì)同步到集群中。
- Client 即 mount 掛載點(diǎn),該目錄下對(duì)文件操作,都會(huì)被同步到卷中所有節(jié)點(diǎn),支持都集群中的文件讀寫。
- Volume 即 網(wǎng)絡(luò)卷,由多個(gè)節(jié)點(diǎn)組成,不同的網(wǎng)絡(luò)卷模式,工作原理也不同。
網(wǎng)絡(luò)卷維護(hù)
- 定期查看網(wǎng)絡(luò)卷健康狀態(tài),及時(shí)處理故障節(jié)點(diǎn)
- 添加集群哨兵,監(jiān)控掛載點(diǎn)狀態(tài),一但掛載點(diǎn)下線,網(wǎng)絡(luò)卷就無法訪問與存儲(chǔ),可實(shí)現(xiàn)多掛載點(diǎn)模式,防止單點(diǎn)故障。
- 同一臺(tái)服務(wù)器不僅可以作為節(jié)點(diǎn),也可以做掛載點(diǎn),同一臺(tái)服務(wù)器可以承擔(dān)多個(gè)網(wǎng)絡(luò)卷的節(jié)點(diǎn)組成,自行考慮性能與存儲(chǔ)
常用命令
參考 Glusterfs的常用命令
服務(wù)器節(jié)點(diǎn)
# 查看所有節(jié)點(diǎn)信息,顯示時(shí)不包括本節(jié)點(diǎn)
gluster peer status
# 添加節(jié)點(diǎn)
gluster peer probe NODE-NAME
# 移除節(jié)點(diǎn),需要提前將該節(jié)點(diǎn)上的brick移除
gluster peer detach NODE-NAME
Glusterd 服務(wù)
# 啟動(dòng)glusterd服務(wù)
/etc/init.d/glusterd start
# 關(guān)閉glusterd服務(wù)
/etc/init.d/glusterd stop
# 查看glusterd服務(wù)
/etc/init.d/glusterd status
卷管理
# 創(chuàng)建卷# <1> 復(fù)制卷# 語法:
gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK
# 示例1:
gluster volume create test-volume replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick# <2>條帶卷# 語法:
gluster volume create NEW-VOLNAME [stripe COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume stripe 2 transport tcp server1:/exp1/brick server2:/exp2/brick# <3>分布式卷# 語法:
gluster volume create NEW-VOLNAME [transport tcp | rdma | tcp, rdma] NEW-BRICK
# 示例1:
gluster volume create test-volume server1:/exp1/brick server2:/exp2/brick
# 示例2:
gluster volume create test-volume transport rdma server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# <4>分布式復(fù)制卷# 語法:
gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# <5>分布式條帶卷# 語法:
gluster volume create NEW-VOLNAME [stripe COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume stripe 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# <6>條帶復(fù)制卷# 語法:
gluster volume create NEW-VOLNAME [stripe COUNT] [replica COUNT] [transport tcp | rdma | tcp, rdma] NEW-BRICK...
# 示例:
gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1/brick server2:/exp2/brick server3:/exp3/brick server4:/exp4/brick# 啟動(dòng)卷
gluster volume start test-volume
# 停止卷
gluster volume stop test-volume
# 刪除卷 先停止卷后才能刪除
gluster volume delete test-volume
# 查看卷
# 列出集群中的所有卷
gluster volume list
# 查看集群中的卷信息
gluster volume info [all]
# 查看集群中的卷狀態(tài)
gluster volume status [all]gluster volume status [detail| clients | mem | inode | fd]# 配置卷
gluster volume set <VOLNAME> <OPTION> <PARAMETER># 擴(kuò)展卷
gluster volume add-brick <VOLNAME> <NEW-BRICK>
# 注意,如果是復(fù)制卷或者條帶卷,則每次添加的Brick數(shù)必須是replica或者stripe的整數(shù)倍。# 收縮卷
# 先將數(shù)據(jù)遷移到其它可用的Brick,遷移結(jié)束后才將該Brick移除:
gluster volume remove-brick start
# 在執(zhí)行了start之后,可以使用status命令查看移除進(jìn)度:
gluster volume remove-brick status
# 不進(jìn)行數(shù)據(jù)遷移,直接刪除該Brick:
gluster volume remove-brick commit
# 注意,如果是復(fù)制卷或者條帶卷,則每次移除的Brick數(shù)必須是replica或者stripe的整數(shù)倍。# 遷移卷
# 使用start命令開始進(jìn)行遷移:
gluster volume replace-brick start
# 在數(shù)據(jù)遷移過程中,可以使用pause命令暫停遷移:
gluster volume replace-brick pause
# 在數(shù)據(jù)遷移過程中,可以使用abort命令終止遷移:
gluster volume replace-brick abort
# 在數(shù)據(jù)遷移過程中,可以使用status命令查看遷移進(jìn)度:
gluster volume replace-brick status
# 在數(shù)據(jù)遷移結(jié)束后,執(zhí)行commit命令來進(jìn)行Brick替換:
gluster volume replace-brick commit # 重新均衡卷
# 不遷移數(shù)據(jù):
gluster volume rebalance lay-outstart
gluster volume rebalance start
gluster volume rebalance startforce
gluster volume rebalance status
gluster volume rebalance stop
Brick管理
# 添加Brick
gluster volume add-brick test-volume 192.168.1.{151,152}:/mnt/brick2# 刪除Brick
# 若是副本卷,則移除的Bricks數(shù)是replica的整數(shù)倍
gluster volume remove-brick test-volume 192.168.1.{151,152}:/mnt/brick2 start
# 在執(zhí)行開始移除之后,可以使用status命令進(jìn)行移除狀態(tài)查看。
gluster volume remove-brick test-volume 192.168.1.{151,152}:/mnt/brick2 status#使用commit命令執(zhí)行Brick移除,則不會(huì)進(jìn)行數(shù)據(jù)遷移而直接刪除Brick,符合不需要數(shù)據(jù)遷移的用戶需求。
gluster volume remove-brick test-volume 192.168.1.{151,152}:/mnt/brick2 commit# 替換Brick
# 任務(wù):把192.168.1.151:/mnt/brick0 替換為192.168.1.151:/mnt/brick2# <1>開始替換
gluster volume replace-brick test-volume 192.168.1.:/mnt/brick0 ..152:/mnt/brick2 start
# 異常信息:volume replace-brick: failed: /data/share2 or a prefix of it is already part of a volume
# 說明 /mnt/brick2 曾經(jīng)是一個(gè)Brick。具體解決方法
rm -rf /mnt/brick2/.glusterfssetfattr -x trusted.glusterfs.volume-id /mnt/brick2
setfattr -x trusted.gfid /mnt/brick2# 如上,執(zhí)行replcace-brick卷替換啟動(dòng)命令,使用start啟動(dòng)命令后,開始將原始Brick的數(shù)據(jù)遷移到即將需要替換的Brick上。# <2>查看是否替換完
gluster volume replace-brick test-volume 192.168.1.151:/mnt/brick0 ..152:/mnt/brick2 status# <3>在數(shù)據(jù)遷移的過程中,可以執(zhí)行abort命令終止Brick替換。
gluster volume replace-brick test-volume 192.168.1.151:/mnt/brick0 ..152:/mnt/brick2 abort# <4>在數(shù)據(jù)遷移結(jié)束之后,執(zhí)行commit命令結(jié)束任務(wù),則進(jìn)行Brick替換。使用volume info命令可以查看到Brick已經(jīng)被替換。
gluster volume replace-brick test-volume 192.168.1.151:/mnt/brick0 .152:/mnt/brick2 commit# 此時(shí)我們?cè)偻?/sf/data/vs/gfs/rep2上添加數(shù)據(jù)的話,數(shù)據(jù)會(huì)同步到 192.168.1.152:/mnt/brick0和192.168.1.152:/mnt/brick2上。而不會(huì)同步到 192.168.1.151:/mnt/brick0 上。
文件系統(tǒng)擴(kuò)展屬性
#獲取文件擴(kuò)展屬性
getfattr -d -m . -e hex filename
getfattr -d -m "trusted.afr.*" -e hex filename
如果一句話反過來就必然不成立,那就根本沒必要把這句話放進(jìn)文檔。—— Bob Martin
總結(jié)
以上是生活随笔為你收集整理的Gluster FS 部署复制卷与常用命令 常见问题解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #72
- 下一篇: ES搜索引擎增删改查操作