CentOS7安装GlusterFS集群以及相关配置


Posted in Servers onApril 12, 2022

CentOS 7 GlusterFS

CentOS7安装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

CentOS7安装GlusterFS集群以及相关配置

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

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

CentOS7安装GlusterFS集群以及相关配置

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

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

CentOS7安装GlusterFS集群以及相关配置

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

CentOS7安装GlusterFS集群以及相关配置

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

CentOS7安装GlusterFS集群以及相关配置

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

CentOS7安装GlusterFS集群以及相关配置

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

CentOS7安装GlusterFS集群以及相关配置

再查看 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集群的文章就介绍到这了!

Servers 相关文章推荐
使用goaccess分析nginx日志的详细方法
Jul 09 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
CentOS7和8下安装Maven3.8.4
Apr 07 Servers
Linux下使用C语言代码搭建一个简单的HTTP服务器
Apr 13 Servers
Tomcat执行startup.bat出现闪退的原因及解决办法
Apr 20 Servers
openstack云计算keystone组件工作介绍
Apr 20 Servers
搭建Yolov5服务器
Apr 30 Servers
在容器中使用nginx搭建上传下载服务器
May 11 Servers
CentOS7安装MySQL8的超级详细教程(无坑!)
Jun 10 Servers
CentOS7环境下MySQL8常用命令小结
Jun 10 Servers
windows server2016安装oracle 11g的图文教程
Jul 15 Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 Servers
Nginx+Tomcat负载均衡多实例详解
Nginx配置根据url参数重定向
Apr 11 #Servers
在Docker容器中部署SQL Server
Apr 11 #Servers
阿里云日志过滤器配置日志服务
阿里云k8s服务升级时502错误 springboot项目应用
Apr 09 #Servers
Consul在linux环境的集群部署
nginx.conf配置文件结构小结
You might like
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
js图片预加载示例
2014/04/30 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python入门篇之面向对象
2014/10/20 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
python实发邮件实例详解
2019/11/11 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
小学教育毕业生自荐信
2013/11/18 职场文书
行政人员工作职责
2013/12/05 职场文书
实习生自我鉴定
2013/12/12 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
休假证明书
2015/06/24 职场文书
八年级数学教学反思
2016/02/17 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS