glusterfs简介
GlusterFS是一个高层次的分布式文件系统解决方案。通过增加一个逻辑层,对上层使用者掩盖了下面的实现,使用者不用了解也不需知道,文件的存储形式、分布。
内部实现是整合了许多存储块(server)通过Infiniband RDMA或者 Tcp/Ip方式互联的一个并行的网络文件系统,这样的许多存储块可以通过许多廉价的x86主机,通过网络搭建起来
其相对于传统NAS 、SAN、Raid的优点就是:
1.容量可以按比例的扩展,且性能却不会因此而降低。
2.廉价且使用简单,完全抽象在已有的文件系统之上。
3.扩展和容错设计的比较合理,复杂度较低。扩展使用translator方式,扩展调度使用scheduling接口,容错交给了本地的文件系统来处理。
4.适应性强,部署方便,对环境依赖低,使用,调试和维护便利。
支持主流的linux系统发行版,包括 fc,ubuntu,debian,suse等,并已有若干成功应用。
glusterfs安装配置
一般在企业中,采用的是分布式复制卷,因为有数据备份,数据相对安全,分布式条带卷目前对 gluster 来说没有完全成熟,存在一定的数据安全风险。
网络要求全部千兆环境,gluster 服务器至少有 2 块网卡,1 块网卡绑定供 gluster 使用,剩余一块分配管理网络 IP,用于系统管理。如果有条件购买万兆交换机,服务器配置万兆网卡,存储性能会更好。网络方面如果安全性要求较高,可以多网卡绑定。
跨地区机房配置 Gluster,在中国网络不适用。
GlusterFS 五种卷
Distributed:分布式卷,文件通过 hash 算法随机分布到由 bricks 组成的卷上。
Replicated: 复制式卷,类似 RAID 1,replica 数必须等于 volume 中 brick 所包含的存储服务器数,可用性高。
Striped: 条带式卷,类似 RAID 0,stripe 数必须等于 volume 中 brick 所包含的存储服务器数,文件被分成数据块,以 Round Robin 的方式存储在 bricks 中,并发粒度是数据块,大文件性能好。
Distributed Striped: 分布式的条带卷,volume中 brick 所包含的存储服务器数必须是 stripe 的倍数(>=2倍),兼顾分布式和条带式的功能。
Distributed Replicated: 分布式的复制卷,volume 中 brick 所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。
分布式复制卷的brick顺序决定了文件分布的位置,一般来说,先是两个brick形成一个复制关系,然后两个复制关系形成分布。
企业一般用后两种,大部分会用分布式复制(可用容量为 总容量/复制份数),通过网络传输的话最好用万兆交换机,万兆网卡来做。这样就会优化一部分性能。它们的数据都是通过网络来传输的。
下面对glusterfs做分布式复制卷操作演示如下:
1、安装glusterfs
首先关闭iptables或者firewalld和selinux, glusterfs的开发者制作了docker镜像 我们可以直接使用docker方式。
到/home/下新建一个glusterfs目录
安装docker和docker-compose 详见:https://mhsj.net/59.html
cd /home mkdir glusterfs cd glusterfs
每台机器编写docker-compose.yml
vim docker-compose.yml version: '2'services: gfs: image: gluster/gluster-centos network_mode: host privileged: true volumes: - /home/glusterfs/data:/var/lib/glusterd:rw - /home/glusterfs/volume:/data:rw - /home/glusterfs/logs:/var/log/glusterfs:rw - /home/glusterfs/conf:/etc/glusterfs:rw - /dev:/dev:rw - /etc/hosts:/etc/hosts:rw
每台机器配置/etc/hosts
[root@localhost gfs]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.9.144 data-1-1 192.168.9.145 data-1-2 192.168.9.146 data-1-3 192.168.9.147 data-1-4
每台机器 创建docker-compose 并执行命令
cd /home/glusterfs
# 启动
docker-compose up -d
# 创建文件存储目录
docker-compose exec gfs mkdir /data/gfs
到192.168.9.144这台机器上执行(重点)
cd /home/glusterfs
# 进入容器
docker-compose exec gfs bash
### 容器内执行
##关联其他3台的glusterfs,这个执行完后 4台glusterfs处于集群状态
gluster peer probe data-1-2 gluster peer probe data-1-3 gluster peer probe data-1-4
#查看状态
#gluster peer status Number of Peers: 3 Hostname: data-1-2Uuid: db3af9cc-7b66-4045-927b-4e0e076e64f7State: Peer in Cluster (Connected) Hostname: data-1-3Uuid: aac5465c-d714-4704-ad59-9a9d72e62ac8State: Peer in Cluster (Connected) Hostname: data-1-4Uuid: 93dc539f-338a-45b0-a911-1c907a7a42fdState: Peer in Cluster (Connected)
## 创建复制卷,volume 命名为gfs 备份1份
gluster volume create gv1 replica 2 data-1-1:/data/gfs data-1-2:/data/gfs force
#这里创建分布式复制卷,是在 gv1 复制卷的基础上增加 2 块 brick 形成的
gluster volume add-brick gv1 replica 2 data-1-3:/data/gfs data-1-4:/data/gfs force
## 启动gfs
[root@data-1-1 /]# gluster volume start gv1
## 退出容器
exit
到这里分布式复制卷就创建完成了。
客户端测试:
安装客户端:
yum install glusterfs-client
mount -t glusterfs 127.0.0.1:/gv1 /mnt/
批量创建文件测试:
touch {a..f
结果显示:
192.168.9.144 data-1-1
[root@data-1-1 gfs]# cd /home/glusterfs/volume/gfs/ [root@data-1-1 gfs]# ls a b c e
192.168.9.145 data-1-2
[root@data-1-1 gfs]# cd /home/glusterfs/volume/gfs/ [root@data-1-1 gfs]# ls a b c e
192.168.9.146 data-1-3
[root@localhost gfs]# cd /home/glusterfs/volume/gfs/ [root@localhost gfs]# ls d f
192.168.9.147 data-1-4
[root@localhost gfs]# cd /home/glusterfs/volume/gfs/ [root@localhost gfs]# ls d f
如上同理,只有两台服务器需要创建复制卷
gluster volume create gv1 replica 2 data-1-1:/data/gfs data-1-2:/data/gfs force
如果需要创建分布式条带卷(4台)
先创建复制卷
gluster volume create gv1 replica 2 data-1-1:/data/gfs data-1-2:/data/gfs force
分布式条带卷,是在 gv1 条带卷的基础上增加 2 块 brick 形成的
gluster volume add-brick gv1 stripe 2 data-1-3:/data/gfs data-1-4:/data/gfs force
glusterfs的常见维护问题处理(如下是摘录其他地方)
分布式复制卷的最佳实践:
1)搭建条件
- 块服务器的数量必须是复制的倍数
- 将按块服务器的排列顺序指定相邻的块服务器成为彼此的复制
例如,8台服务器:
- 当复制副本为2时,按照服务器列表的顺序,服务器1和2作为一个复制,3和4作为一个复制,5和6作为一个复制,7和8作为一个复制
- 当复制副本为4时,按照服务器列表的顺序,服务器1/2/3/4作为一个复制,5/6/7/8作为一个复制
2)创建分布式复制卷
磁盘存储的平衡
平衡布局是很有必要的,因为布局结构是静态的,当新的 bricks 加入现有卷,新创建的文件会分布到旧的 bricks 中,所以需要平衡布局结构,使新加入的 bricks 生效。布局平衡只是使新布局生效,并不会在新的布局中移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡。
平衡布局是很有必要的,因为布局结构是静态的,当新的 bricks 加入现有卷,新创建的文件会分布到旧的 bricks 中,所以需要平衡布局结构,使新加入的 bricks 生效。布局平衡只是使新布局生效,并不会在新的布局中移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡。
#在gv2的分布式复制卷的挂载目录中创建测试文件入下
[root@data-1-4 opt]# touch {X..Z} #新创建的文件只在老的brick中有,在新加入的brick中是没有的 [root@data-1-4 opt]# ll /storage/brick1 总用量 0 [root@data-1-3 ~]# ll /storage/brick1 总用量 0 [root@data-1-1 ~]# ls /storage/brick2 1 2 3 4 5 6 X Y Z [root@data-1-2 ~]# ls /storage/brick2 1 2 3 4 5 6 X Y Z # 从上面可以看到,新创建的文件还是在之前的 bricks 中,并没有分布中新加的 bricks 中 # 下面进行磁盘存储平衡 [root@data-1-2 ~]# gluster volume rebalance gv2 start #查看平衡存储状态 [root@data-1-4 opt]# gluster volume rebalance gv2 status # 查看磁盘存储平衡后文件在 bricks 中的分布情况 [root@data-1-3 ~]# ls /storage/brick1 1 5 Y Z [root@data-1-4 opt]# ls /storage/brick1 1 5 Y Z [root@data-1-1 ~]# ls /storage/brick2 2 3 4 6 X [root@data-1-2 ~]# ls /storage/brick2 2 3 4 6 X
#从上面可以看出部分文件已经平衡到新加入的brick中了
每做一次扩容后都需要做一次磁盘平衡。 磁盘平衡是在万不得已的情况下再做的,一般再创建一个卷就可以了。
移除 brick
你可能想在线缩小卷的大小,例如:当硬件损坏或网络故障的时候,你可能想在卷中移除相关的 bricks。
注意:当你移除 bricks 的时候,你在 gluster 的挂载点将不能继续访问数据,只有配置文件中的信息移除后你才能继续访问 bricks 中的数据。当移除分布式复制卷或者分布式条带卷的时候,移除的 bricks 数目必须是 replica 或者 stripe 的倍数。
但是移除brick在生产环境中基本上不做的,没什么意思,如果是硬盘坏掉的话,直接换个好的硬盘即可,然后再对新的硬盘设置卷标识就可以使用了,后面会演示硬件故障或系统故障的解决办法。
#移除gv2中的data-1-3 data-1-4下的brick [root@data-1-2 ~]# gluster volume stop gv2 [root@data-1-2 ~]# gluster volume remove-brick gv2 replica 2 data-1-3:/storage/brick1 data-1-4:/storage/brick1 force [root@data-1-2 ~]# gluster volume start gv2 [root@data-1-3 ~]# ls /storage/brick1 1 5 Y Z # 如果误操作删除了后,其实文件还在 /storage/brick1 里面的,加回来就可以了 [root@data-1-3 ~]# gluster volume stop gv2 [root@data-1-3 ~]# gluster volume add-brick gv2 replica 2 data-1-3:/storage/brick1 data-1-4:/storage/brick1 force [root@data-1-3 ~]# gluster volume info gv2 Volume Name: gv2 Type: Distributed-Replicate Volume ID: 27b85504-0a78-4dae-9332-056da410be2e Status: Stopped Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: data-1-1:/storage/brick2 Brick2: data-1-2:/storage/brick2 Brick3: data-1-3:/storage/brick1 Brick4: data-1-4:/storage/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on
删除卷
一般会用在命名不规范的时候才会删除
[root@data-1-3 ~]# gluster volume stop gv1 [root@data-1-3 ~]# gluster volume delete gv1
[root@data-1-3 mnt]# ls /var/lib/glusterd/vols gv2 gv3 gv4
#复制卷的存储位置的数据如下:
[root@data-1-1 ~]# ls /storage/brick2 2 3 4 6 X [root@data-1-2 ~]# ls /storage/brick2 2 3 4 6 X #接着在data-1-1上删除一个数据来模拟复制卷数据不一致 [root@data-1-1 ~]# rm -f /storage/brick2/X [root@data-1-1 ~]# ls /storage/brick2 2 3 4 6 [root@data-1-2 ~]# ls /storage/brick2 2 3 4 6 X #通过访问这个复制卷的挂载点的数据来同步数据 [root@data-1-3 mnt]# mount -t glusterfs 127.0.0.1:/gv2 /opt/ [root@data-1-3 mnt]# cat /opt/X #这时候再看复制卷的数据是否同步成功 [root@data-1-1 ~]# ls /storage/brick2 2 3 4 6 X [root@data-1-2 ~]# ls /storage/brick2 2 3 4 6 X
转载请注明:梦绘设计 » linux服务 » docker方式安装配置GlusterFS分布式文件系统
版权声明
本站《作品展示》类文章均为原创,转载必须注明出处,技术分享类文章部分来源于网络,版权归原作者所有,若侵权请留言。