手把手教你搭建高可用GlusterFS分布式存储集群

一、原理与理论:GlusterFS是什么?

在开始动手之前,我们先简单理解一下GlusterFS的工作原理,这能帮助我们在后续配置和排错时更有方向。

1. 核心概念:

  • Brick(存储块): 集群中最基础的存储单元,通常指服务器上由某个指定目录提供的存储空间。例如 /data/brick1

  • Volume(逻辑卷): 一个逻辑卷由一个或多个Brick组成,对客户端来说,它就像一个巨大的、单一的挂载点。用户操作的是Volume,而非底层分散的Brick。

  • Translator(转换器): GlusterFS的核心架构,它采用“栈式”设计,通过一系列的Translator来处理数据(如集群、复制、条带化等),最终将数据存储到Brick上。这种设计非常灵活,易于扩展新功能。

2. 常见的Volume类型(工作模式):

  • Distributed Volume(分布式卷): 文件被分散存储到不同的Brick上,无冗余。优点是容量是所有Brick之和,缺点是任何一个Brick损坏,其上的数据就丢失了。

    • 公式:总容量 = Brick1 + Brick2 + ... + BrickN

  • Replicated Volume(复制卷): 文件被同步复制到多个Brick上,提供数据冗余。通常用于高可用场景。

    • 公式:总容量 = 单个Brick容量(因为所有Brick存一样的数据)

  • Distributed Replicated Volume(分布式复制卷): 上述两种模式的结合。先将Brick分成多个复制组,文件再分布式地存储在这些复制组上。既扩展了容量,又保证了冗余,是生产环境最常用的模式。

    • 公式:总容量 = (单个Brick容量) * (复制组数量)

简单理解,你可以把它想象成一个“软件定义的RAID”,只不过这些硬盘(Brick)是跨越多台不同服务器的。


二、背景与目的:为什么需要它?

背景
在现代IT架构中,数据量爆炸式增长,传统的单机存储在容量、性能和可靠性上都遇到了瓶颈。尤其是Web应用、大数据分析、日志存储、docker/K8s持久化存储等场景,迫切需要一种能 scale-out(横向扩展)、高可用且成本低廉的存储解决方案。

目的

  • 实现海量存储: 通过横向添加节点,轻松扩展存储容量和性能。

  • 保证高可用性: 通过副本机制,确保即使部分服务器宕机,业务数据依然可访问,服务不中断。

  • 统一命名空间: 客户端可以像访问本地文件夹一样,访问分布在不同服务器上的海量文件。

  • 低成本: 基于开源软件和普通的x86服务器,构建媲美商业存储的解决方案。


三、搭建步骤:四节点集群实战(分布式复制卷)

实验环境

  • 4台CentOS 7/8服务器(2台用于做复制对,共两组,组成分布式复制卷)

  • 主机名与IP:

    • gluster-node1 (192.168.1.101)

    • gluster-node2 (192.168.1.102)

    • gluster-node3 (192.168.1.103)

    • gluster-node4 (192.168.1.104)

  • 每台服务器新增一块硬盘(如 /dev/sdb),并格式化为XFS文件系统,挂载到 /data/brick1

步骤说明

1. 基础环境准备(所有节点操作)

# 1.1 设置主机名和hosts解析(以node1为例,其他节点类似)
hostnamectl set-hostname gluster-node1
echo "192.168.1.101 gluster-node1
192.168.1.102 gluster-node2
192.168.1.103 gluster-node3
192.168.1.104 gluster-node4" >> /etc/hosts

# 1.2 格式化并挂载磁盘
mkfs.xfs /dev/sdb
mkdir -p /data/brick1
echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
mount -a

# 1.3 安装GlusterFS
yum install centos-release-gluster -y  # 添加GlusterFS源
yum install glusterfs-server -y        # 安装服务端

# 1.4 启动并设置开机自启
systemctl start glusterd
systemctl enable glusterd

# 1.5 关闭防火墙或放行端口(生产环境建议放行端口)
systemctl stop firewalld
systemctl disable firewalld
# 或者:firewall-cmd --add-service=glusterfs --permanent && firewall-cmd --reload

2. 组建集群信任池(在任意一个节点操作即可,例如在node1上)

gluster peer probe gluster-node2
gluster peer probe gluster-node3
gluster peer probe gluster-node4

# 查看集群状态
gluster peer status

预期看到其他三台节点都是 Connected 状态。

3. 创建分布式复制卷(在任意节点操作)

我们的规划是:(node1, node2) 组成一个复制对,(node3, node4) 组成另一个复制对,然后这两个复制对再组成一个分布式卷。

gluster volume create gv0 replica 2 \
transport tcp \
gluster-node1:/data/brick1/gv0 \
gluster-node2:/data/brick1/gv0 \
gluster-node3:/data/brick1/gv0 \
gluster-node4:/data/brick1/gv0 \
force

# 启动卷
gluster volume start gv0

# 查看卷信息
gluster volume info

参数解释

  • create gv0: 创建名为 gv0 的卷。

  • replica 2: 副本数为2。

  • transport tcp: 使用TCP协议通信。

  • force: 强制创建(因为这里我们用了根目录,生产环境建议用子目录,如 /data/brick1/gv0)。

4. 客户端挂载使用

在一台客户端机器上(也可以是集群中的某台):

# 安装客户端
yum install glusterfs-client -y

# 创建挂载点并挂载
mkdir /mnt/glusterfs
mount -t glusterfs gluster-node1:/gv0 /mnt/glusterfs

# 写入fstab实现开机自动挂载
echo 'gluster-node1:/gv0 /mnt/glusterfs glusterfs defaults,_netdev 0 0' >> /etc/fstab
df -hT /mnt/glusterfs

现在,你就可以在 /mnt/glusterfs 目录下进行读写操作了,所有数据都会自动分布式且复制地存储到后端4台服务器上。


四、常见问题与解决方案(避坑指南)

  1. 问题:peer probe 失败,提示 Connection failed

    • 原因: 防火墙未关闭或端口未放行;网络不通;glusterd 服务未启动。

    • 解决: 检查防火墙状态、服务状态和网络连通性(ping/telnet)。

  2. 问题:创建卷时失败,提示目录不存在

    • 原因: 在创建卷时指定的Brick路径在对应服务器上不存在。

    • 解决: 在所有节点上预先创建好完全相同的Brick目录(如 mkdir -p /data/brick1/gv0)。

  3. 问题:客户端挂载成功,但写入文件报错 No space left on device

    • 原因: 可能是脑裂(split-brain)问题。当复制卷的两个副本由于网络等原因无法同步,且内容不一致时,会进入脑裂状态以保护数据,导致写入失败。

    • 解决

      • 查看状态:gluster volume heal gv0 info

      • 强制修复(谨慎操作!需确认要保留哪个副本的数据):gluster volume heal gv0 full

      • 最佳实践是配置 quorum 以避免脑裂。

  4. 问题:性能不佳

    • 原因: 网络带宽是瓶颈;磁盘IOPS是瓶颈;卷类型选择不当(例如小文件用分布式卷会导致查询元数据慢)。

    • 解决: 确保万兆网络;使用SSD硬盘;对于大量小文件场景,可以考虑使用纠删码(Dispersed Volume) 或调整客户端挂载参数(如启用缓存)。


五、总结与心得

通过这次实战,我深刻体会到GlusterFS的强大与灵活。它的部署过程相对简单,但其背后的分布式思想却非常深厚。

  • 优势: 扩展性极佳,加机器就能加容量和性能;无单点故障,真正的高可用;社区活跃,文档丰富。

  • 注意事项

    1. 网络是关键: GlusterFS对网络延迟和带宽非常敏感,一个糟糕的网络会让集群性能大打折扣,务必使用高速稳定的内网。

    2. 规划先行: Volume的类型(分布式、复制、条带)必须在创建时就确定好,后期无法直接转换,必须重新创建。所以前期设计非常重要。

    3. 监控与维护: 生产环境一定要配置监控,关注节点的磁盘空间、网络流量和卷的“愈合”(heal)状态。

总的来说,GlusterFS是构建私有云存储或处理海量非结构化数据的优秀选择。它可能不是性能最快的,但其简洁的架构和出色的扩展性,使其在众多分布式文件系统中占据了重要一席。希望本文能帮助大家少走弯路,成功搭建自己的分布式存储系统!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东窗西篱梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值