分布式文件系统 glusterfs

2022-05-04  本文已影响0人  Robin92

NFS 共享存储很简单,但后期扩容和管理方面很不方便,所以这里引入 glusterfs。

glusterfs 是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数 PB 级存储容量和数千客户端,通过网络互联构成一个并行的网络文件系统。具有高可用性、高性能、高可用的特点。(任何一个结点挂掉不影响使用)

安装

yum install centos-release-gluster -y # 安装 glusterfs 的 yum 源,通过 `ls /etc/yum.repos.d` 查看源
yum install glusterfs-server -y # 安装
systemctl start glusterd.service # 启动
systemctl enable glusterd.service
gluster --version # glusterfs 9.5

原教程上对应 gluster 源是 6 版本,而我本地是 9 版本,这可能会导致 gluster 服务启动和运行有问题。(目前看到 systemctl start 的时候有错误日志,但依然是启动成功的)

May 04 06:20:46 k8s-master systemd[1]: [/usr/lib/systemd/system/glusterd.service:4] Unknown lvalue 'StartLimitBurst' in section 'Unit'
May 04 06:20:46 k8s-master systemd[1]: [/usr/lib/systemd/system/glusterd.service:5] Unknown lvalue 'StartLimitIntervalSec' in section 'Unit'

gluster 操作

构建资源池

gluster pool list # 列表资源池
gluster peer probe k8s-node1 # 向资源池中添加结点信息
# probe 是添加;detach 是删除;status 是查看状态
image.png

使用资源池创建卷

glusterfs 支持七种模式的卷,这里使用“分布式复制卷”,最稳定的就是这个卷。分布式复制卷要求至少需要四个存储单元。
一个目录需要挂载一块空的硬盘(/dev/下的文件),一个硬盘就是一个存储单元。

首先要在所有结点上创建目录 mkdir -p /gfs/test1 /gfs/test2,用于挂载 gfs 的硬盘

# 创建卷,分别用 master 的两个目录和 node1 的两个目录(四个目录各绑定一个卷,所以是四个卷)
gluster volume create test-gfs replica 2 k8s-master:/gfs/test1 k8s-master:/gfs/test2 k8s-node1:/gfs/test1 k8s-node1:/gfs/test2 force 
gluster volume start test-gfs # 启动卷(启动后才能访问数据)
gluster volume info test-gfs  # 查看卷信息
mount -t glusterfs k8s-master:/test-gfs /mnt/ # 可以在任意的结点上挂载卷

test-gfs 是卷名
生产环境用增加硬盘的方式(/dev/sda 就是 gfs 创建的,还可以添加 sdbsdc),而不是增加目录的方式。
replica 2 是在复制模式下至少使用了两个副本。
在不用 force 时,会提示复制卷期望至少 3 个副本;并且会因为使用了系统的 root 分区而导致终止。加入 force 后不再提示。

image.png

原理:在写文件时,由于 replica=2,文件系统会根据哈希算法写两份到整个系统的四个存储单元(brick)中。

扩容

当卷的空间不够用时,可以先加 node,然后将 node 加入到 资源池中(已经将 node2 加入到资源池了),在 node 上格式化硬盘,并加入到卷中。如果是复制卷,那么每次应该至少加入两个 brick。

df -h # 查看容量
gluster volume add-brick test-gfs k8s-node2:/gfs/test1 k8s-node2:/gfs/test2 force # 扩容
df -h # 查看容量
查看容量 扩容 image.png

解压之后产生一堆的文件,理论上应该分布在六个 brick 中,实际仍然是 node2 上没有文件,可能是偶然。

image.png
上一篇下一篇

猜你喜欢

热点阅读