CentOS 7 安裝 GlusterFS

CentOS 7 GlusterFSnode

 

環境說明:
3臺機器安裝 GlusterFS 組成一個集羣。
使用 docker volume plugin GlusterFS
算法

服務器:
10.6.0.140
10.6.0.192
10.6.0.196

配置 hosts docker

10.6.0.140 swarm-manager
10.6.0.192 swarm-node-1
10.6.0.196 swarm-node-2

client:
10.6.0.94 node-94


安裝:
CentOS 安裝 glusterfs 很是的簡單

在三個節點都安裝glusterfs

yum install centos-release-gluster

yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
centos

配置 GlusterFS 集羣:緩存

啓動 glusterFS

systemctl start glusterd.service

systemctl enable glusterd.service


在 swarm-manager 節點上配置,將 節點 加入到 集羣中。

[root@swarm-manager ~]#gluster peer probe swarm-manager
peer probe: success. Probe on localhost not needed服務器

[root@swarm-manager ~]#gluster peer probe swarm-node-1
peer probe: success. app

[root@swarm-manager ~]#gluster peer probe swarm-node-2
peer probe: success. 異步


查看集羣狀態:
[root@swarm-manager ~]#gluster peer status
Number of Peers: 2tcp

Hostname: swarm-node-1
Uuid: 41573e8b-eb00-4802-84f0-f923a2c7be79
State: Peer in Cluster (Connected)分佈式

Hostname: swarm-node-2
Uuid: da068e0b-eada-4a50-94ff-623f630986d7
State: Peer in Cluster (Connected)



建立數據存儲目錄:
[root@swarm-manager ~]#mkdir -p /opt/gluster/data
[root@swarm-node-1 ~]# mkdir -p /opt/gluster/data
[root@swarm-node-2 ~]# mkdir -p /opt/gluster/data


查看volume 狀態:
[root@swarm-manager ~]#gluster volume info
No volumes present


建立GlusterFS磁盤:
[root@swarm-manager ~]#gluster volume create models replica 3 swarm-manager:/opt/gluster/data swarm-node-1:/opt/gluster/data swarm-node-2:/opt/gluster/data force
volume create: models: success: please start the volume to access data


GlusterFS 幾種volume 模式說明:

1、 默認模式,既DHT, 也叫 分佈卷: 將文件已hash算法隨機分佈到 一臺服務器節點中存儲。
gluster volume create test-volume server1:/exp1 server2:/exp2


2、 複製模式,既AFR, 建立volume 時帶 replica x 數量: 將文件複製到 replica x 個節點中。
gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2


3、 條帶模式,既Striped, 建立volume 時帶 stripe x 數量: 將文件切割成數據塊,分別存儲到 stripe x 個節點中 ( 相似raid 0 )。
gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2


4、 分佈式條帶模式(組合型),最少須要4臺服務器才能建立。 建立volume 時 stripe 2 server = 4 個節點: 是DHT 與 Striped 的組合型。
gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4


5、 分佈式複製模式(組合型), 最少須要4臺服務器才能建立。 建立volume 時 replica 2 server = 4 個節點:是DHT 與 AFR 的組合型。
gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4


6、 條帶複製卷模式(組合型), 最少須要4臺服務器才能建立。 建立volume 時 stripe 2 replica 2 server = 4 個節點: 是 Striped 與 AFR 的組合型。
gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

 

7、 三種模式混合, 至少須要8臺 服務器才能建立。 stripe 2 replica 2 , 每4個節點 組成一個 組。
gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8


再查看 volume 狀態:
[root@swarm-manager ~]#gluster volume info

Volume Name: models
Type: Replicate
Volume ID: e539ff3b-2278-4f3f-a594-1f101eabbf1e
Status: Created
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: swarm-manager:/opt/gluster/data
Brick2: swarm-node-1:/opt/gluster/data
Brick3: swarm-node-2:/opt/gluster/data
Options Reconfigured:
performance.readdir-ahead: on


啓動 models
[root@swarm-manager ~]#gluster volume start models
volume start: models: success

 


gluster 性能調優:

開啓 指定 volume 的配額: (models 爲 volume 名稱)
gluster volume quota models enable

限制 models 中 / (既總目錄) 最大使用 80GB 空間
gluster volume quota models limit-usage / 80GB

#設置 cache 4GB
gluster volume set models performance.cache-size 4GB

#開啓 異步 , 後臺操做
gluster volume set models performance.flush-behind on

#設置 io 線程 32
gluster volume set models performance.io-thread-count 32

#設置 回寫 (寫數據時間,先寫入緩存內,再寫入硬盤)
gluster volume set models performance.write-behind on


部署GlusterFS客戶端並mount GlusterFS文件系統 (客戶端必須加入 glusterfs hosts 不然報錯。)

[root@node-94 ~]#yum install -y glusterfs glusterfs-fuse
[root@node-94 ~]#mkdir -p /opt/gfsmnt
[root@node-94 ~]#mount -t glusterfs swarm-manager:models /opt/gfsmnt/

[root@node-94 ~]#df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/vg001-root 98G 1.2G 97G 2% /
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 130M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/mapper/vg001-opt 441G 71G 370G 17% /opt
/dev/sda2 497M 153M 344M 31% /boot
tmpfs 6.3G 0 6.3G 0% /run/user/0
swarm-manager:models 441G 18G 424G 4% /opt/gfsmnt

 

測試:

DHT 模式 客戶端 建立一個 1G 的文件

[root@node-94 ~]#time dd if=/dev/zero of=hello bs=1000M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
1048576000字節(1.0 GB)已複製,9.1093 秒,115 MB/秒

real 0m9.120s
user 0m0.000s
sys 0m1.134s



AFR 模式 客戶端 建立一個 1G 的文件

[root@node-94 ~]#time dd if=/dev/zero of=hello.txt bs=1024M count=1
錄了1+0 的讀入
記錄了1+0 的寫出
1073741824字節(1.1 GB)已複製,27.4566 秒,39.1 MB/秒

real 0m27.469s
user 0m0.000s
sys 0m1.065s


Striped 模式 客戶端 建立一個 1G 的文件

[root@node-94 ~]#time dd if=/dev/zero of=hello bs=1000M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
1048576000字節(1.0 GB)已複製,9.10669 秒,115 MB/秒

real 0m9.119s
user 0m0.001s
sys 0m0.953s

 

條帶複製卷模式 (Number of Bricks: 1 x 2 x 2 = 4) 客戶端 建立一個 1G 的文件

[root@node-94 ~]#time dd if=/dev/zero of=hello bs=1000M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
1048576000字節(1.0 GB)已複製,17.965 秒,58.4 MB/秒

real 0m17.978s
user 0m0.000s
sys 0m0.970s


分佈式複製模式 (Number of Bricks: 2 x 2 = 4) 客戶端 建立一個 1G 的文件

[root@node-94 ~]#time dd if=/dev/zero of=haha bs=100M count=10
記錄了10+0 的讀入
記錄了10+0 的寫出
1048576000字節(1.0 GB)已複製,17.7697 秒,59.0 MB/秒

real 0m17.778s
user 0m0.001s
sys 0m0.886s

 

針對 分佈式複製模式還作了以下測試:

4K隨機寫 測試:
安裝 fio (yum -y install libaio-devel (不然運行fio 會報錯engine libaio not loadable, 已安裝需從新編譯,不然同樣報錯))

[root@node-94 ~]#fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -size=10G -filename=1.txt -name="EBS 4KB randwrite test" -iodepth=32 -runtime=60


write: io=352204KB, bw=5869.9KB/s, iops=1467, runt= 60002msec
WRITE: io=352204KB, aggrb=5869KB/s, minb=5869KB/s, maxb=5869KB/s, mint=60002msec, maxt=60002msec


4K隨機讀 測試:
fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randread -size=10G -filename=1.txt -name="EBS 4KB randread test" -iodepth=8 -runtime=60


read: io=881524KB, bw=14692KB/s, iops=3672, runt= 60001msec
READ: io=881524KB, aggrb=14691KB/s, minb=14691KB/s, maxb=14691KB/s, mint=60001msec, maxt=60001msec


512K 順序寫 測試:
fio -ioengine=libaio -bs=512k -direct=1 -thread -rw=write -size=10G -filename=512.txt -name="EBS 512KB seqwrite test" -iodepth=64 -runtime=60

write: io=3544.0MB, bw=60348KB/s, iops=117, runt= 60135msec
WRITE: io=3544.0MB, aggrb=60348KB/s, minb=60348KB/s, maxb=60348KB/s, mint=60135msec, maxt=60135msec






其餘的維護命令:

1. 查看GlusterFS中全部的volume:
[root@swarm-manager ~]#gluster volume list

2. 刪除GlusterFS磁盤:
[root@swarm-manager ~]#gluster volume stop models #中止名字爲 models 的磁盤
[root@swarm-manager ~]#gluster volume delete models #刪除名字爲 models 的磁盤

 

注: 刪除 磁盤 之後,必須刪除 磁盤( /opt/gluster/data ) 中的 ( .glusterfs/ .trashcan/ )目錄。
不然建立新 volume 相同的 磁盤 會出現文件 不分佈,或者 類型 錯亂 的問題。

 

 

 


3. 卸載某個節點GlusterFS磁盤
[root@swarm-manager ~]#gluster peer detach swarm-node-2


4. 設置訪問限制,按照每一個volume 來限制
[root@swarm-manager ~]#gluster volume set models auth.allow 10.6.0.*,10.7.0.*


5. 添加GlusterFS節點:
[root@swarm-manager ~]#gluster peer probe swarm-node-3
[root@swarm-manager ~]#gluster volume add-brick models swarm-node-3:/opt/gluster/data
注:若是是複製卷或者條帶卷,則每次添加的Brick數必須是replica或者stripe的整數倍

6. 配置卷
[root@swarm-manager ~]# gluster volume set


7. 縮容volume:

先將數據遷移到其它可用的Brick,遷移結束後纔將該Brick移除:
[root@swarm-manager ~]#gluster volume remove-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data start

在執行了start以後,能夠使用status命令查看移除進度:
[root@swarm-manager ~]#gluster volume remove-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data status

不進行數據遷移,直接刪除該Brick:
[root@swarm-manager ~]#gluster volume remove-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data commit
注意,若是是複製卷或者條帶卷,則每次移除的Brick數必須是replica或者stripe的整數倍。

 

 

擴容:

gluster volume add-brick models swarm-node-2:/opt/gluster/data 

 

 

 

 

 

 

8. 修復命令: [root@swarm-manager ~]#gluster volume replace-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data commit -force 9. 遷移volume: [root@swarm-manager ~]#gluster volume replace-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data start pause 爲暫停遷移 [root@swarm-manager ~]#gluster volume replace-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data pause abort 爲終止遷移 [root@swarm-manager ~]#gluster volume replace-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data abort status 查看遷移狀態 [root@swarm-manager ~]#gluster volume replace-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data status 遷移結束後使用commit 來生效 [root@swarm-manager ~]#gluster volume replace-brick models swarm-node-2:/opt/gluster/data swarm-node-3:/opt/gluster/data commit 10. 均衡volume: [root@swarm-manager ~]#gluster volume models lay-outstart [root@swarm-manager ~]#gluster volume models start [root@swarm-manager ~]#gluster volume models startforce [root@swarm-manager ~]#gluster volume models status [root@swarm-manager ~]#gluster volume models stop

相關文章
相關標籤/搜索