一、概述
GlusterFS 是一个开源的分布式文件系统。
由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成。
没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。
GlusterFS同时也是Scale-Out(横向扩展)存储解决方案Gluster的核心,在存储数据方面具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。
GlusterFS支持借助TCP/IP或InfiniBandRDMA网络(一种支持多并发链接的技术,具有高带宽、低时延、高扩展性的特点)将物理分散分布的存储资源汇聚在一起,统一提供存储服务,并使用统一全局命名空间来管理数据。
GlusterFS特点:
- 扩展性和高性能
- 高可用性
- 全局统一命名空间
- 弹性卷管理
- 基于标准协议
二、分布式卷原理及特点
这里我们只用到了分布式卷,此文档只安装分布式卷
特点: 文件没有进行分块处理,一个文件只会存在某一个server中,效率并没有提升
比如file1 和file2 上传,file1只会在一个sever上
- 文件分布在不同服务器,不具备冗余性
- 更容易和无代价的拓展卷的大小
- 单点故障会导致数据丢失
- 依赖底层的数据保护
三、搭建
1.部署规划
基础信息:
服务器类型 操作系统 GlusterFS版本
X86 Cnetos 7.9 9.6(9版本最新20230221)
安装规划:
|主机名 |磁盘名 挂载名|
| -------- | -------- | -------- |
|gwtest-01(192.168.1.199)| /dev/sdb /gfsdata01 /dev/sdc /gfsdata02 /dev/sdd /gfsdata03|
|gwtest-02(192.168.1.7| /dev/sdb /gfsdata01 /dev/sdc /gfsdata02 /dev/sdd /gfsdata03|
| gwtest-03(192.168.1.142)| 作为测试扩容节点 /dev/sdb /gfsdata01 /dev/sdc /gfsdata02 /dev/sdd /gfsdata03|
2.准备磁盘目录
所有节点执行
fdisk /dev/sdb
mkfs -t xfs /dev/sdb1fdisk /dev/sdc
mkfs -t xfs /dev/sdc1fdisk /dev/sdd
mkfs -t xfs /dev/sdd1
依次将所有节点上所有盘初始化并挂载好目录
mkdir /gfsdata01 /gfsdata02 /gfsdata03
mount /dev/sdb1 /gfsdata01
mount /dev/sdc1 /gfsdata02
mount /dev/sdd1 /gfsdata03
将挂载信息写到/etc/fstab 中,开机自动挂载
3.软件安装
下载的是gluster9.6版本,打成tar包,解压后即可使用。所有节点执行
# tar -xvf glusterfs-9.6.tar.gz
# cd glusterfs-9.6
执行安装
# rpm -Uvh --force --nodeps *.rpm
开启服务:开机自启动并启动glusterd进程
# systemctl enable glusterd && systemctl start glusterd
查看glusterd进程状态
# systemctl status glusterd
4.添加存储信任池
在gwtest-01节点运行:
# gluster peer probe gwtest-02
peer probe: success. # gluster peer probe gwtest-03
peer probe: success.
查看信任池状态:
在一台上可以看到其它台的信息
[root@gwtest-01 ~]# gluster peer status
Number of Peers: 2Hostname: gwtest-02
Uuid: 42c97841-3e42-4305-90f5-f3bca183a627
State: Peer in Cluster (Connected)Hostname: gwtest-03
Uuid: 94c85a3f-78da-4a34-97f2-6ca9f12a2e54
State: Peer in Cluster (Connected)
四、创建卷
1.创建分布式卷
将前2台的三块盘创建一个分布式卷
[root@gwtest-01 ~]# gluster volume create dis-gw-volume gwtest-01:/gfsdata01 gwtest-01:/gfsdata02 gwtest-01:/gfsdata03 gwtest-02:/gfsdata01 gwtest-02:/gfsdata02 gwtest-02:/gfsdata03 forcevolume create: dis-gw-volume: success: please start the volume to access data
2.查看并启动
查看已经创建的卷:
[root@gwtest-01 ~]# gluster volume list
dis-gw-volume
启动卷
[root@gwtest-01 ~]# gluster volume start dis-gw-volume
volume start: dis-gw-volume: success查看卷的状态
[root@gwtest-01 ~]# gluster volume status dis-gw-volume
Status of volume: dis-gw-volume
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gwtest-01:/gfsdata01 49152 0 Y 5555
Brick gwtest-01:/gfsdata02 49153 0 Y 5571
Brick gwtest-01:/gfsdata03 49154 0 Y 5587
Brick gwtest-02:/gfsdata01 49152 0 Y 6777
Brick gwtest-02:/gfsdata02 49153 0 Y 6793
Brick gwtest-02:/gfsdata03 49154 0 Y 6809 Task Status of Volume dis-gw-volume
------------------------------------------------------------------------------
There are no active volume tasks
3.查看卷的信息
[root@gwtest-01 ~]# gluster volume info dis-gw-volume Volume Name: dis-gw-volume
Type: Distribute
Volume ID: 85106618-39ee-4012-93b3-9f1bbcd83de2
Status: Started
Snapshot Count: 0
Number of Bricks: 6
Transport-type: tcp
Bricks:
Brick1: gwtest-01:/gfsdata01
Brick2: gwtest-01:/gfsdata02
Brick3: gwtest-01:/gfsdata03
Brick4: gwtest-02:/gfsdata01
Brick5: gwtest-02:/gfsdata02
Brick6: gwtest-02:/gfsdata03
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
五、使用卷
1.挂载目录
可先准备好相应的挂载目录(注:挂载的服务器需要安装gluster 客户端)
手动挂载
[root@gwtest-01 ~]# mount -t glusterfs gwtest-01:/dis-gw-volume /gfs_gwtest
WARNING: getfattr not found, certain checks will be skipped..
注意:如果有这个WARNING,请安装 yum install attr -y
我们这里就在ambari01 中
自动挂载:
写到/etc/fstab 文件中
gwtest-01:dis-gw-volume /gfs_gwtest defaults,_netdev 0 0
然后mount -a既可
查看挂载情况
[root@gwtest-01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
gwtest-01:/dis-gw-volume 600G 6.2G 594G 2% /gfs_gwtest
2.准备测试文件
生成多个小文件:
[root@gwtest-01 ~]# for i in `seq -w 1 20`; do cp -rp /var/log/messages /gfs_gwtest/copy-test-$i; done
可以多执行几次,如果文件少的话
查看生成的文件 , 可以看到是分布在不同的节点上的
六、扩容缩容与重分布
GlusterFS支持brick的扩容缩容及数据重平衡,这里使用分布式卷做一次测试
1.准备环境
这里就紧接着上面的安装测试,将第三台机器扩容进去
目前的分布式卷的情况是:
[root@gwtest-01 ~]# gluster volume info dis-gw-volume Volume Name: dis-gw-volume
Type: Distribute
Volume ID: 85106618-39ee-4012-93b3-9f1bbcd83de2
Status: Started
Snapshot Count: 0
Number of Bricks: 6
Transport-type: tcp
Bricks:
Brick1: gwtest-01:/gfsdata01
Brick2: gwtest-01:/gfsdata02
Brick3: gwtest-01:/gfsdata03
Brick4: gwtest-02:/gfsdata01
Brick5: gwtest-02:/gfsdata02
Brick6: gwtest-02:/gfsdata03
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
2.分布式卷的扩容
将第三台机器的磁盘扩容进去
执行扩容brick的操作:
[root@gwtest-01 ~]#gluster volume add-brick dis-gw-volume gwtest-03:/gfsdata01 gwtest-03:/gfsdata02 gwtest-03:/gfsdata03 force
volume add-brick: success
查看卷的信息,发现新brick已经添加上去:
[root@gwtest-01 ~]# gluster volume info dis-gw-volume Volume Name: dis-gw-volume
Type: Distribute
Volume ID: 85106618-39ee-4012-93b3-9f1bbcd83de2
Status: Started
Snapshot Count: 0
Number of Bricks: 9
Transport-type: tcp
Bricks:
Brick1: gwtest-01:/gfsdata01
Brick2: gwtest-01:/gfsdata02
Brick3: gwtest-01:/gfsdata03
Brick4: gwtest-02:/gfsdata01
Brick5: gwtest-02:/gfsdata02
Brick6: gwtest-02:/gfsdata03
Brick7: gwtest-03:/gfsdata01
Brick8: gwtest-03:/gfsdata02
Brick9: gwtest-03:/gfsdata03
Options Reconfigured:
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
但是此时的新目录里是没有文件的,历史的文件,需要做重分布
[root@gwtest-03 ~]# ls /gfsdata0*
/gfsdata01:/gfsdata02:/gfsdata03:
[root@gwtest-03 ~]#
3.分布式卷的文件重分布
执行重分布命令:
[root@gwtest-01 ~]# gluster volume rebalance dis-gw-volume start
volume rebalance: dis-gw-volume: success: Rebalance on dis-gw-volume has been started successfully. Use rebalance status command to check status of the rebalance process.
ID: 56dfdf10-8725-4ffd-8333-93293168da43
重分布的进度状态信息:
重分布是一个过程,不会立刻成功,可以用此命令来查看进度
[root@gwtest-01 ~]# gluster volume rebalance dis-gw-volume statusNode Rebalanced-files size scanned failures skipped status run time in h:m:s--------- ----------- ----------- ----------- ----------- ----------- ------------ --------------gwtest-02 16 546.4KB 26 0 0 completed 0:00:00gwtest-03 0 0Bytes 20 0 0 completed 0:00:00localhost 27 921.4KB 34 0 0 completed 0:00:00
volume rebalance: dis-gw-volume: success
扩容完成以后,就可以看到,新增加的节点有文件移动过去,旧的节点文件减少
4.分布式卷的缩容
执行缩容命令:
[root@gwtest-01 ~]# gluster volume remove-brick dis-gw-volume gwtest-03:/gfsdata01 gwtest-03:/gfsdata02 gwtest-03:/gfsdata03 start
It is recommended that remove-brick be run with cluster.force-migration option disabled to prevent possible data corruption. Doing so will ensure that files that receive writes during migration will not be migrated and will need to be manually copied after the remove-brick commit operation. Please check the value of the option and update accordingly.
Do you want to continue with your current cluster.force-migration settings? (y/n) y
volume remove-brick start: success
ID: ca928a65-1202-4aba-babd-d98ead1558d5
查看缩容状态:
缩容命令结束后,后台进程会自动将该节点的文件迁移至别的brick,可以使用一下命令查看进度,待全部迁移完成后继续
[root@gwtest-01 ~]# gluster volume remove-brick dis-gw-volume gwtest-03:/gfsdata01 gwtest-03:/gfsdata02 gwtest-03:/gfsdata03 statusNode Rebalanced-files size scanned failures skipped status run time in h:m:s--------- ----------- ----------- ----------- ----------- ----------- ------------ --------------gwtest-03 23 784.6KB 23 0 0 completed 0:00:00
此时看文件已经没有:
[root@gwtest-03 ~]# ls /gfsdata0*
/gfsdata01:/gfsdata02:/gfsdata03:
执行删除提交:
[root@gwtest-01 ~]# gluster volume remove-brick dis-gw-volume gwtest-03:/gfsdata01 gwtest-03:/gfsdata02 gwtest-03:/gfsdata03 commit
volume remove-brick commit: success
Check the removed bricks to ensure all files are migr