文章目录
一、GlusterFS 9.6 版本部署与应用
1.1 GlusterFS 简介
GlusterFS 是一款高性能、开源的分布式文件系统,广泛应用于企业级存储需求。通过将多台服务器的存储资源整合成一个统一的全局命名空间,GlusterFS 提供了横向扩展能力,适合处理 PB 级别的大规模数据存储。
GlusterFS 的主要特性:
- 无元数据架构: 避免了传统分布式文件系统中因元数据服务器单点故障带来的问题。
- 高扩展性: 通过增加存储节点来扩展容量和性能,支持动态调整存储资源。
- 多种协议支持: 包括 NFS、SMB、FTP 等,且与 POSIX 标准完全兼容。
- 卷类型多样性: 支持多种卷类型,如分布式卷、复制卷和分布式复制卷,满足多样化的业务需求。
1.2 GlusterFS 9.6 版本的变化
在 GlusterFS 9.6 版本中,功能得到了进一步优化,同时对一些功能进行了调整和精简。以下是主要的变化:
- 条带卷和分布式条带卷取消:
- 条带卷(Stripe Volume)和分布式条带卷(Distribute Stripe Volume)在 6.0 版本后已被移除,不再支持。
- 原因:这两种卷的可靠性较差,缺乏冗余机制,不适合现代存储需求。
- 优化的性能:
- 在高并发和大规模存储场景下性能提升显著,尤其是在 RDMA 网络环境中的数据传输效率进一步优化。
- 增强的兼容性:
- 提升了与 CentOS 7.9 及相关内核的兼容性,确保了客户端和服务端之间的无缝通信。
- 管理功能改进:
- 提供更灵活的卷管理功能,并增强了访问控制机制,可基于 IP 地址实现细粒度的权限管理。
1.3 实验环境准备
为展示 GlusterFS 9.6 的部署与应用,我们规划了以下实验环境。
1.3.1 系统环境
- 操作系统:CentOS 7.9 x86_64
- 主机规划:
- Server1: 192.168.78.22 (
node01
) - Server2: 192.168.78.3 (
node02
) - Server3: 192.168.78.4 (
node03
) - Server4: 192.168.78.5 (
node04
) - Client1: 192.168.78.11 (
client
)
- Server1: 192.168.78.22 (
- 存储目录: 每台存储节点的存储目录规划为:
/data/ceshi1
/data/ceshi2
/data/ceshi3
1.3.2 主机配置
1. 修改主机名
在每台节点上,使用以下命令修改主机名:
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname node04
2. 配置 /etc/hosts
在每台节点上,编辑 /etc/hosts
文件,添加以下内容:
echo "192.168.78.22 node01" >> /etc/hosts
echo "192.168.78.3 node02" >> /etc/hosts
echo "192.168.78.4 node03" >> /etc/hosts
echo "192.168.78.5 node04" >> /etc/hosts
1.3.3 安装 GlusterFS 服务端
1. 添加 GlusterFS YUM 源并安装相关组件:
在所有存储节点上执行以下命令:
# 添加官方源
yum -y install centos-release-gluster
# 安装服务端和客户端相关组件
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
2. 如果安装中出现版本冲突或兼容性问题,可先卸载再重新安装:
yum -y remove glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
3. 启动 GlusterFS 服务并设置开机自启:
systemctl start glusterd.service
systemctl enable glusterd.service
1.3.4 配置存储信任池
在 node01
节点上,将其他节点添加到信任池:
gluster peer probe node02
gluster peer probe node03
gluster peer probe node04
验证节点状态:
gluster peer status
示例输出:
Number of Peers: 3
Hostname: node02
Uuid: <UUID>
State: Peer in Cluster (Connected)
Hostname: node03
Uuid: <UUID>
State: Peer in Cluster (Connected)
Hostname: node04
Uuid: <UUID>
State: Peer in Cluster (Connected)
1.3.5 创建存储目录
在所有存储节点上创建存储目录:
mkdir -p /data/ceshi{1..3}
1.3.6 创建卷
1. 创建分布式复制卷
分布式复制卷既具备分布式存储的扩展性,又具备复制卷的高可用性:
gluster volume create dis-rep replica 4 \
node01:/data/ceshi1 node02:/data/ceshi1 node03:/data/ceshi1 node04:/data/ceshi1 force
gluster volume start dis-rep
gluster volume info dis-rep
2. 创建复制卷
复制卷为所有文件创建冗余副本,提供高可用性:
gluster volume create rep-volume replica 2 \
node01:/data/ceshi2 node02:/data/ceshi2 force
gluster volume start rep-volume
gluster volume info rep-volume
3. 创建分布式卷
分布式卷将文件分散存储在多个节点上,适合对数据冗余性要求不高的场景:
gluster volume create dis-volume \
node01:/data/ceshi3 node02:/data/ceshi3 force
gluster volume start dis-volume
gluster volume info dis-volume
4. 查看所有卷的列表
查看当前创建的所有卷:
gluster volume list
1.3.7 客户端配置
1. 安装客户端组件
在 client
节点上安装 GlusterFS 客户端:
yum install -y glusterfs glusterfs-fuse
2. 创建挂载路径
在 client
节点上创建挂载目录:
mkdir -p /ceshi/{dis,rep,dis_rep}
ls /ceshi
3. 挂载 GlusterFS 文件系统
临时挂载:
mount.glusterfs node01:dis-volume /ceshi/dis
mount.glusterfs node01:rep-volume /ceshi/rep
mount.glusterfs node01:dis-rep /ceshi/dis_rep
验证挂载:
df -Th
永久挂载: 编辑 /etc/fstab
文件,添加以下内容:
node01:dis-volume /ceshi/dis glusterfs defaults,_netdev 0 0
node01:rep-volume /ceshi/rep glusterfs defaults,_netdev 0 0
node01:dis-rep /ceshi/dis_rep glusterfs defaults,_netdev 0 0
执行以下命令挂载:
mount -a
二、测试 GlusterFS 卷的读写及文件分布
2.1 测试环境准备
在客户端节点进行以下操作,准备测试文件并复制到挂载的卷中:
2.1.1 创建测试文件
使用 dd
命令在 /opt
目录下生成多个测试文件:
cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
dd if=/dev/zero of=/opt/demo5.log bs=1M count=40
验证文件生成:
ls -lh /opt
2.1.2 复制文件到挂载目录
将生成的测试文件分别复制到挂载的 GlusterFS 卷中:
cp /opt/demo* /ceshi/dis
cp /opt/demo* /ceshi/rep/
cp /opt/demo* /ceshi/dis_rep/
2.2 验证分布式复制卷
分布式复制卷具有数据冗余特性,所有文件在每个节点上都有完整副本。
文件分布验证:
在 node01
、node02
、node03
和 node04
节点的 /data/ceshi1
目录中验证文件分布情况:
[root@node01 ~]# ll -h /data/ceshi1
总用量 200M
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo1.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo2.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo3.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo4.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo5.log
同样在 node02
、node03
和 node04
节点上查看文件:
[root@node02 ~]# ll -h /data/ceshi1
[root@node03 ~]# ll -h /data/ceshi1
[root@node04 ~]# ll -h /data/ceshi1
结果:
- 所有节点上的
/data/ceshi1
目录中均有完整的文件副本。 - 特点:分布式复制卷提供了高冗余性,文件在每个节点上都有完整副本,适合对数据安全性要求较高的场景。
2.3 验证复制卷
复制卷同样具备冗余性,但副本数量和节点数量直接相关。
文件分布验证:
在 node01
和 node02
节点的 /data/ceshi2
目录中验证文件分布情况:
[root@node01 ~]# ll -h /data/ceshi2
总用量 200M
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo1.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo2.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo3.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo4.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo5.log
同样在 node02
查看:
[root@node02 ~]# ll -h /data/ceshi2
结果:
- 复制卷中,所有文件的副本均存储在
node01
和node02
的/data/ceshi2
目录中。 - 特点:复制卷提供冗余,但副本数量受限于节点数量,适合需要一定容错能力的场景。
2.4 验证分布式卷
分布式卷无冗余,文件通过弹性哈希算法分布到不同节点上。
文件分布验证:
在 node01
和 node02
节点的 /data/ceshi3
目录中验证文件分布情况:
[root@node01 ~]# ls -lh /data/ceshi3
总用量 160M
-rw-r--r-- 2 root root 40M 4月 8 23:29 demo1.log
-rw-r--r-- 2 root root 40M 4月 8 23:29 demo2.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo3.log
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo4.log
[root@node02 ~]# ls -lh /data/ceshi3
总用量 40M
-rw-r--r-- 2 root root 40M 4月 8 23:30 demo5.log
结果:
- 文件分布情况:
node01
存储了demo1.log
至demo4.log
。node02
存储了demo5.log
。
- 特点:分布式卷无冗余,文件分布在不同节点上,适合对数据冗余性要求较低但需要扩展存储容量的场景。
通过上述测试可以得出以下结论:
卷类型 | 冗余性 | 文件分布特点 | 适用场景 |
---|---|---|---|
分布式复制卷 | 高冗余性 | 所有文件在每个节点上都有完整副本,提供最高的数据安全性。 | 适合对数据安全性和高可用性要求较高的场景。 |
复制卷 | 一定的冗余性 | 文件在部分节点上有副本,冗余数量取决于副本因子,读性能较高但写性能受限。 | 适合需要容错能力但副本数量有限的场景。 |
分布式卷 | 无冗余性 | 文件通过哈希算法分布到不同节点,无副本,扩展性强但数据可靠性较低。 | 适合对存储容量需求较大,但对冗余性要求较低的场景。 |
三、GlusterFS 常用命令总结
3.1 集群管理命令
查看所有节点信息
查看当前集群中所有节点的状态:
gluster peer status
添加节点
将新的节点添加到 GlusterFS 信任池中:
gluster peer probe <节点名或IP地址>
删除节点
从 GlusterFS 信任池中移除某节点:
gluster peer detach <节点名或IP地址>
3.2 服务管理命令
启动 GlusterFS 服务
使用以下命令启动 GlusterFS 服务:
/etc/init.d/glusterd start
或者在 systemd 环境中:
systemctl start glusterd.service
停止 GlusterFS 服务
停止 GlusterFS 服务:
/etc/init.d/glusterd stop
或者:
systemctl stop glusterd.service
重启 GlusterFS 服务
重启 GlusterFS 服务:
/etc/init.d/glusterd restart
或者:
systemctl restart glusterd.service
3.3 卷管理命令
创建卷
根据需求创建不同类型的卷:
gluster volume create <卷名称> [卷类型] <存储路径列表>
示例:创建一个分布式复制卷
gluster volume create dis-rep replica 4 \
node01:/data/ceshi1 node02:/data/ceshi1 node03:/data/ceshi1 node04:/data/ceshi1 force
查看卷信息
查看集群中所有卷的信息:
gluster volume info
查看卷状态
查看所有卷的状态信息:
gluster volume status
启动卷
启动指定的卷:
gluster volume start <卷名称>
停止卷
停止指定的卷:
gluster volume stop <卷名称>
删除卷
在删除某卷前,需要先停止该卷。删除卷的命令如下:
gluster volume delete <卷名称>
3.4 日志与调试
查看日志文件
GlusterFS 的日志文件通常位于 /var/log/glusterfs
目录下,可以查看相关日志排查问题:
tail -f /var/log/glusterfs/glusterd.log
检查自愈状态
当使用复制卷或分布式复制卷时,可以检查卷的自愈状态:
gluster volume heal <卷名称> info
手动触发自愈
手动修复卷中的不一致数据:
gluster volume heal <卷名称>
3.5 卷访问控制
设置访问权限
可以通过 IP 地址设置卷的访问控制策略:
仅允许特定 IP 段访问
gluster volume set <卷名称> auth.allow <IP地址或网段>
示例:允许 192.168.1.0/24
网段访问
gluster volume set dis-rep auth.allow 192.168.1.*
拒绝特定 IP 地址访问
gluster volume set <卷名称> auth.deny <IP地址或网段>
示例:拒绝 192.168.1.100
访问
gluster volume set dis-rep auth.deny 192.168.1.100
3.6 数据迁移与扩容
添加 Brick(扩展卷容量)
在已有卷的基础上增加存储节点:
gluster volume add-brick <卷名称> <新增Brick路径> force
示例:为 dis-volume
增加一个 Brick
gluster volume add-brick dis-volume node03:/data/newdir force
移除 Brick
从卷中移除某个 Brick:
gluster volume remove-brick <卷名称> <Brick路径> force
示例:移除 node03:/data/newdir
:
gluster volume remove-brick dis-volume node03:/data/newdir force
3.7 挂载卷
挂载 GlusterFS 文件系统
在客户端使用 mount.glusterfs
命令挂载 GlusterFS 卷:
mount.glusterfs <服务器>:<卷名称> <挂载路径>
示例:挂载 dis-volume
:
mount.glusterfs node01:dis-volume /mnt/glusterfs
永久挂载
编辑 /etc/fstab
文件,添加以下内容:
node01:dis-volume /mnt/glusterfs glusterfs defaults,_netdev 0 0
然后执行以下命令挂载:
mount -a
ata/newdir force
### 移除 Brick
从卷中移除某个 Brick:
```bash
gluster volume remove-brick <卷名称> <Brick路径> force
示例:移除 node03:/data/newdir
:
gluster volume remove-brick dis-volume node03:/data/newdir force
3.7 挂载卷
挂载 GlusterFS 文件系统
在客户端使用 mount.glusterfs
命令挂载 GlusterFS 卷:
mount.glusterfs <服务器>:<卷名称> <挂载路径>
示例:挂载 dis-volume
:
mount.glusterfs node01:dis-volume /mnt/glusterfs
永久挂载
编辑 /etc/fstab
文件,添加以下内容:
node01:dis-volume /mnt/glusterfs glusterfs defaults,_netdev 0 0
然后执行以下命令挂载:
mount -a