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