在工作中,项目部署用到了K8s。因而用到了分布式文件存储Glusterfs。
概念
Glusterfs支持了众多的模式,复制券模式(Replicated)、分布式券(Dispersed) 等。
Replicated 模式的用于在將同一份资料同時存到两个不同的 Brick,这样可以在其中一個 Brick 损坏时资料仍然可以正常存取。
同一份文件存储在不同的券上。
Dispersed Volume 使用 Erasure Code 保护资料的完整性,當资料写入Volume 后,会被拆解成指定数量的份数,而每一份包含有资料检查码来确保资料的完整。
同一份文件会被分解成相同的份数保存在节点上。
- 安装GlusterFs
- 增加Volume
- 扩容
- 缩容
安装GlusterFs
Debian10 buster,其他系统请参考官网版本。
1、硬盘分区与挂载
fdisk -l #查看硬盘信息
fdisk /dev/sdb
Command (m for help): n
p primary (0 primary, 0 extended, 4 free)
use default options
...
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
2、格式化和挂载
apt install -y xfsprogs
mkfs.xfs -i size=512 /dev/sdb1
mkdir -p /data/brick1
echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab
mount -a
mount
3、安装 Gluster lasted
apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
wget -O - https://download.gluster.org/pub/gluster/glusterfs/7/rsa.pub | apt-key add -
echo deb [arch=amd64] https://download.gluster.org/pub/gluster/glusterfs/7/LATEST/Debian/buster/amd64/apt buster main > /etc/apt/sources.list.d/gluster.list
apt-get update
apt-get install glusterfs-server
4、启动服务、配置信任池
service glusterd start
service glusterd status
gluster peer probe Ip2
gluster peer probe Ip3
5、检查节点是否挂载
gluster peer status
6、设置磁盘卷
mkdir -p /data/brick1/gv0 #每个节点执行
7、创建volume,任意节点执行
#创建分布式券 冗余为1,模式为 Dispersed 1*(2+1)=3
#可用容量为 brickSize*(brickNumer-redundancy)
gluster volume create gv0 disperse 3 server1:/data/brick1/gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0
#启动volume
gluster volume start gv0
#挂载磁盘卷
mount -t glusterfs server1:/gv0 /mnt
扩容:
gluster v add-brick gv0 server1:/data/brick1/gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0
#扩容后,使用rebalance 重新计算和分配资源文件
gluster volume rebalance gv0 start
扩容计算可用容量公式为:
brickSize1(brickNumer1-redundancy1) + brickSize2(brickNumer2-redundancy2)**
缩容:
gluster v remove-brick gv0 server1:/data/brick1/gv0 server2:/data/brick1/gv0 server3:/data/brick1/gv0 start
#查看缩容后重新计算资源文件的进度状态
gluster v remove-brick gv0 status
#等status状态都变成已完成后进行提交改变
gluster volume remove-brick <volname> <brick> commit
此时会发现brick节点的文件大小发生了改变。