CentOS7安装GlusterFS集群的全过程

2022-07-15,,,,

centos 7 glusterfs

环境说明:

3台机器安装 glusterfs 组成一个集群

使用 docker volume plugin glusterfs

服务器:

10.6.0.140
10.6.0.192
10.6.0.196

配置 hosts

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-fuseglusterfs-rdma

配置 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.

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

查看集群状态:

[root@swarm-manager ~]#gluster peer status
number of peers: 2

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 模式说明:

一、 默认模式,既dht, 也叫 分布卷: 将文件已hash算法随机分布到 一台服务器节点中存储。

gluster volume create test-volume server1:/exp1 server2:/exp2

二、 复制模式,既afr, 创建volume 时带 replica x 数量: 将文件复制到 replica x 个节点中。

gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2

三、 条带模式,既striped, 创建volume 时带 stripe x 数量: 将文件切割成数据块,分别存储到 stripe x 个节点中 ( 类似raid 0 )。

gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2

四、 分布式条带模式(组合型),最少需要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

五、 分布式复制模式(组合型), 最少需要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

六、 条带复制卷模式(组合型), 最少需要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

七、 三种模式混合, 至少需要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

总结

到此这篇关于centos7安装glusterfs集群的文章就介绍到这了,更多相关centos7安装glusterfs内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

《CentOS7安装GlusterFS集群的全过程.doc》

下载本文的Word格式文档,以方便收藏与打印。