GlusterFS是一個可伸縮的網絡文件系統,使用常見的現成的硬件,您可以創建大型分布式存儲流媒體解決方案、數據分析、和其他數據相關的任務。GlusterFS是自由和開源軟件。
詳細參考官網:https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/
一、部署環境
1、系統環境:
fedora操作系統(xfs文件系統)
2、硬件規划
主機名稱 IP地址
compute4 192.168.141.24
compute5 192.168.141.24
3、其它硬件要求
a、一塊網卡
b、每台主機至少兩塊硬盤,一塊用於安裝OS,其他用於Gluster storage
4、注意事項:
GlusterFS默認地把動態生成的配置數據存放於/var/lib/glusterd目錄下,日志數據存放於/var/log下,請確保它們所在的分區空間足夠多,避免因磁盤滿而導致GlusterFS運行故障而服務宕機。
5、配置域名解析 (備注:兩個節點相同配置)
vi /etc/hosts
10.10.0.24 compute4
10.10.0.25 compute5
6、分區准備 (備注:二台服務器,各准備一塊480G硬盤)
Disk /dev/sdb: 446.6 GiB, 479559942144 bytes, 936640512 sectors
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 936640511 936638464 446.6G 83 Linux
#自動分區腳本 (備注:兩台服務器相同操作)
[root@compute4 ~]# cat fdisk_sdb.sh
#!/bin/bash
echo "n
p
1
w
" | fdisk /dev/sdb
partprobe
#格式化 (備注:兩台服務器相同操作)
[root@compute4 ~]# mkfs.xfs /dev/sdb1 -f
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=29269952 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0
data = bsize=4096 blocks=117079808, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=57167, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#設置開機自啟動 (備注:兩台服務器相同操作)
[root@compute4 ~]# echo "/dev/sdb1 /mnt xfs defaults 0 0" >>/etc/fstab
#查看 (備注:兩台服務器相同操作)
[root@compute4 ~]# cat /etc/fstab
/dev/mapper/fedora00-root / xfs defaults 0 0
UUID=31323eb2-0fba-46c3-aa9f-9373490a63bd /boot ext4 defaults 1 2
/dev/mapper/fedora00-swap swap swap defaults 0 0
/dev/sdb1 /mnt xfs defaults 0 0
#掛載 (備注:兩台服務器相同操作)
[root@compute4 ~]# mount -a
#查看掛載是否到/mnt目錄 (備注:兩台服務器相同操作)
[root@compute4 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 79G 0 79G 0% /dev
tmpfs 79G 12K 79G 1% /dev/shm
tmpfs 79G 1.3M 79G 1% /run
tmpfs 79G 0 79G 0% /sys/fs/cgroup
/dev/mapper/fedora00-root 100G 3.3G 97G 4% /
tmpfs 79G 0 79G 0% /tmp
/dev/sda3 976M 135M 775M 15% /boot
tmpfs 16G 0 16G 0% /run/user/0
/dev/sdb1 447G 488M 446G 1% /mnt
二、glusterfs部署
1、glusterfs軟件安裝 (備注:兩台服務器相同操作)
[root@compute4 ~]# dnf install glusterfs-server -y
2、配置防火牆 (備注:兩台服務器相同操作)
清空iptables
[root@compute4 ~]# iptables -F
或配置防火牆規則
節點上的gluster進程需要能夠相互通信。為了簡化此設置,請將每個節點上的防火牆配置為接受來自其他節點的所有流量。
iptables -I INPUT -p all -s <ip-address> -j ACCEPT
3、啟動服務 (備注:兩台服務器相同操作)
[root@compute4 ~]#systemctl start glusterd
[root@compute4 ~]#systemctl status glusterd
[root@compute4 ~]# systemctl enable glusterd
Created symlink /etc/systemd/system/multi-user.target.wants/glusterd.service → /usr/lib/systemd/system/glusterd.service.
#啟動服務
[root@compute4 ~]#systemctl start glusterfsd
[root@compute4 ~]#systemctl enable glusterfsd
[root@compute4 ~]#systemctl status glusterfsd
4、配置可信池
注意:使用主機名時,需要從另一台服務器ping通其主機名
[root@compute4 ~]# ping compute5
PING compute4 (10.10.0.24) 56(84) bytes of data.
64 bytes from compute5 (10.10.0.24): icmp_seq=1 ttl=64 time=0.393 ms
[root@compute5 ~]# ping compute4
PING compute4 (10.10.0.24) 56(84) bytes of data.
64 bytes from compute4 (10.10.0.24): icmp_seq=1 ttl=64 time=0.393 ms
#在compute4上面操作
[root@compute4 ~]# gluster peer probe compute5
peer probe: success.
#在compute5上面操作
[root@compute5 ~]# gluster peer probe compute4
peer probe: success. Host compute4 port 24007 already in peer list
5、檢查狀態
#在compute4上面操作
[root@compute4 ~]# gluster peer status
Number of Peers: 1
Hostname: compute5
Uuid: a1d42adb-0207-459a-abfb-73c53efd2689
State: Peer in Cluster (Connected)
#在compute5上面操作
[root@compute5 ~]# gluster peer status
Number of Peers: 1
Hostname: compute4
Uuid: 091f6810-9cac-4415-8077-6a9fba708013
State: Peer in Cluster (Connected)
6、建立一個GlusterFS卷(兩個節點都要執行)
GlusterFS卷共有三種基本類型,分別是Distributed(分布式存儲)、Striped(將一個文件分成多個固定長度的數據,分布存放在所有存儲塊,相當於RAID0)、Replicated(鏡像存儲,相當於RAID1).
基於striped和replicated,結合使用distributed后,又可以擴展出分布式分片存儲卷和分布式鏡像存儲卷兩種新的類型。而后兩種擴展類型並沒有新的命令格式僅是通過設置數據冗余分數和添加
進邏輯卷的bricks數量動態定義的
#創建一個GlusterFS Replicated卷(兩個節點都要執行)
[root@compute5 ~]# mkdir -p /mnt/brick1/gv0
#(備注:在任意一個節點操作)
[root@compute4 gv0]# gluster volume create gv0 replica 2 compute4:/mnt/brick1/gv0 compute5:/mnt/brick1/gv0
volume create: gv0: success: please start the volume to access data
#其它命令
#啟動卷
[root@compute4 gv0]# gluster volume start gv0
volume start: gv0: success
#停止卷
# gluster volume stop gv0
#查看卷信息
[root@compute4 gv0]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 297db7f2-099f-40f8-962a-bb8b918afcb6
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: compute4:/mnt/brick1/gv0
Brick2: compute5:/mnt/brick1/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
#刪除卷
gluster volume delete gv0
#在gv0卷中增加一個存儲塊comoute6:/data
gluster volume add-brick gv0 comoute6:/data
gluster rebalance gv0 start
#在gv0卷中刪除一個存儲塊comoute6:/data
gluster volume remove-brick gv0 comoute6:/data
gluster rebalance gv0 start
#如果以上操作票遇到報錯,請查看/var/log/gluster下的日志,以定位排錯
三、測試GlusterFS卷
1、安裝掛載 (備注:客戶端操作)
# yum install centos-release-gluster38
# yum install -y glusterfs glusterfs-fuse
# mkdir /heboan_data
# mount -t glusterfs server1:/gv0 /heboan_data/ (掛載任一節點即可)
2、測試文件 (備注:客戶端執行)
# echo "this is a test file" >/heboan_data/test.txt
在sever1、server2可以查看到test文件
# cat /data/brick1/gv0/test.txt
3、宕機測試
#將其中一個節點停止存儲服務
# systemctl stop glusterd
# systemctl stop glusterfsd
4、在客戶端刪除test.txt,新建test2.txt
# rm -f /heboan_data/test.txt
# echo "this is a test2 file" >/heboan_data/test2.txt
此時查看服務被停止的節點上的文件還是test.txt,另一個節點則變成test2.txt
此時啟動服務
# systemctl start glusterd
5、文件恢復同步
#創建Distributed邏輯卷
# gluster volume create gv1 server1:/data server2:/data
# gluster volume info
# gluster volume start gv1
#創建Striped邏輯卷
創建一個名字為gv2,包含兩個存儲塊,使用TCP協議的Striped邏輯卷:
# gluster volume create gv2 stripe 2 transport tcp server1:/data server2:/data
# gluster volume info
# gluster volume start gv2
#遷移卷
將server2的數據遷移到server3
先將server3加入集群
# gluster peer probe server3
遷移
# gluster volume replace-brick gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0 start
查看遷移狀態
# gluster volume replace-brick gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0 status
數據遷移完畢后提交
# gluster volume replace-brick gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0 commit
如果機器server1出現故障已經不能運行,執行強制提交然后要求gluster馬上執行一次同步
# gluster volume replace-brick gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0 commit -force
# gluster volume heal gv0 full
更多用法參考:
https://www.cnblogs.com/sxchengchen/p/7805667.html
分布式文件系統MFS、Ceph、GlusterFS、Lustre的比較:
http://blog.csdn.net/dipolar/article/details/50154349