CentOS 7 安装与配置 GlusterFS 全指南

GlusterFS 是一个开源的分布式文件系统,具有高可扩展性、高可用性和灵活的存储管理能力。它通过将普通服务器的本地存储资源汇聚成一个统一的全局命名空间,支持 PB 级别的存储容量和数千个节点的集群规模。GlusterFS 广泛应用于云存储、大数据平台、虚拟化存储等场景,其核心优势包括:

  • 横向扩展:通过添加节点即可线性扩展存储容量和性能。
  • 无中心化架构:无单点故障,所有节点平等,简化维护。
  • 多种卷类型:支持分布式、复制、条带化等多种卷模式,满足不同业务需求。
  • 与 POSIX 兼容:可通过标准文件系统接口(如 NFS、CIFS)访问,兼容现有应用。

本文将详细介绍在 CentOS 7 系统中部署 GlusterFS 的完整流程,包括环境准备、软件安装、集群配置、卷创建与测试,并涵盖最佳实践和常见问题处理。

目录#

  1. 环境准备
    • 1.1 硬件与操作系统要求
    • 1.2 网络规划
    • 1.3 节点配置(主机名、防火墙、SELinux)
  2. 安装 GlusterFS
    • 2.1 添加 GlusterFS 官方仓库
    • 2.2 安装 GlusterFS 服务
    • 2.3 启动并验证服务状态
  3. 配置可信存储池(Trusted Storage Pool)
    • 3.1 节点发现与信任建立
    • 3.2 验证存储池状态
  4. 创建 GlusterFS 卷
    • 4.1 卷类型介绍
    • 4.2 创建复制卷(示例)
    • 4.3 启动卷并验证状态
  5. 挂载与使用 GlusterFS 卷
    • 5.1 在客户端安装 GlusterFS 客户端
    • 5.2 手动挂载卷
    • 5.3 配置开机自动挂载
  6. 测试与验证
    • 6.1 数据写入与复制验证
    • 6.2 高可用性测试(节点故障模拟)
  7. 常见问题与 troubleshooting
  8. 最佳实践
  9. 参考资料

1. 环境准备#

1.1 硬件与操作系统要求#

最低硬件配置(生产环境需根据业务规模调整):

  • 节点数量:至少 2 台(复制卷需 2+ 节点,分布式卷可单节点,但无冗余)。
  • CPU:每节点至少 2 核。
  • 内存:每节点至少 4GB(GlusterFS 元数据缓存依赖内存,建议 8GB+)。
  • 存储:每节点至少 1 块独立磁盘(建议使用 SSD 或高性能 HDD,避免与系统盘共用)。

操作系统

  • CentOS 7.x(本文基于 CentOS 7.9 测试)。
  • 所有节点需保持系统版本一致,避免兼容性问题。

1.2 网络规划#

GlusterFS 依赖节点间的高效通信,需规划以下网络配置:

  • 管理网络:用于节点间控制信息交换(如 glusterd 服务通信)。
  • 存储网络(可选):用于数据传输(如卷数据同步),建议使用万兆网络或专用存储网络提升性能。

端口要求: GlusterFS 需开放以下端口(所有节点均需配置):

  • 24007/tcp:Gluster 管理端口(glusterd 服务)。
  • 24008/tcp:Gluster 管理端口(备用)。
  • 49152-49251/tcp:Brick 进程端口(每个 brick 占用一个端口,范围可配置)。
  • 111/tcp/udp:NFS 服务(若使用 NFS 协议访问卷)。

1.3 节点配置#

1.3.1 主机名与 hostname 解析#

假设部署 2 个节点,节点信息如下:

节点名称IP 地址角色
gluster01192.168.1.101存储节点
gluster02192.168.1.102存储节点
client01192.168.1.201客户端(测试用)

步骤

  1. 在所有节点设置主机名:

    # 在 gluster01 执行
    hostnamectl set-hostname gluster01
    # 在 gluster02 执行
    hostnamectl set-hostname gluster02
    # 在 client01 执行(可选)
    hostnamectl set-hostname client01
  2. 配置 /etc/hosts 实现节点间 hostname 解析(所有节点均需配置):

    cat >> /etc/hosts << EOF
    192.168.1.101 gluster01
    192.168.1.102 gluster02
    192.168.1.201 client01
    EOF
  3. 验证解析:

    ping -c 2 gluster01
    ping -c 2 gluster02

1.3.2 防火墙配置#

临时关闭防火墙(测试环境,生产环境需按需开放端口):

systemctl stop firewalld
systemctl disable firewalld

生产环境配置(开放必要端口):

# 开放 Gluster 管理端口
firewall-cmd --add-port=24007-24008/tcp --permanent
# 开放 Brick 端口范围
firewall-cmd --add-port=49152-49251/tcp --permanent
# 开放 NFS 相关端口(若使用 NFS 访问)
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
# 重新加载规则
firewall-cmd --reload

1.3.3 SELinux 配置#

GlusterFS 与 SELinux 兼容性较好,但默认策略可能限制 brick 目录访问。测试环境可临时关闭 SELinux:

setenforce 0  # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config  # 永久关闭(重启生效)

生产环境建议保持 SELinux 开启,并配置上下文:

# 允许 GlusterFS 访问 brick 目录(假设 brick 路径为 /data/gluster/bricks)
semanage fcontext -a -t glusterd_brick_t "/data/gluster/bricks(/.*)?"
restorecon -Rv /data/gluster/bricks

2. 安装 GlusterFS#

2.1 添加 GlusterFS 官方仓库#

GlusterFS 官方提供了 CentOS 7 的 YUM 仓库,需在所有存储节点(gluster01、gluster02)执行:

# 安装仓库 RPM(以 GlusterFS 9 为例,最新版本可查看官方文档)
yum install -y https://download.gluster.org/pub/gluster/glusterfs/9/LATEST/CentOS/glusterfs-release-9.noarch.rpm
# 清除 YUM 缓存
yum clean all
yum makecache

2.2 安装 GlusterFS 服务#

在所有存储节点安装 glusterfs-server

yum install -y glusterfs-server

2.3 启动并验证服务状态#

  1. 启动 glusterd 服务并设置开机自启:

    systemctl start glusterd
    systemctl enable glusterd
  2. 验证服务状态:

    systemctl status glusterd

    输出应包含 active (running)

  3. 检查 GlusterFS 版本:

    gluster --version

    示例输出:glusterfs 9.6

3. 配置可信存储池(Trusted Storage Pool)#

GlusterFS 集群由多个节点组成“可信存储池”,节点间通过互相“探测”(probe)建立信任关系。

3.1 节点发现与信任建立#

在其中一个节点(如 gluster01)执行以下命令,将其他节点加入存储池:

# 在 gluster01 上探测 gluster02
gluster peer probe gluster02

注意

  • 只需在一个节点执行 peer probe,GlusterFS 会自动在节点间双向建立信任。
  • 若需添加更多节点(如 gluster03),继续执行 gluster peer probe gluster03

3.2 验证存储池状态#

执行以下命令查看节点状态:

gluster peer status

成功输出示例:

Number of Peers: 1

Hostname: gluster02
Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State: Peer in Cluster (Connected)

若状态为 Disconnected,需检查网络连通性、防火墙或 hostname 解析。

4. 创建 GlusterFS 卷#

卷(Volume)是 GlusterFS 的核心概念,是由多个“brick”(存储节点上的目录)组成的逻辑存储单元。

4.1 卷类型介绍#

GlusterFS 支持多种卷类型,常用类型如下:

  • 分布式卷(Distributed):数据分散存储在不同节点,无冗余,适合对容量要求高、对可用性要求低的场景。
  • 复制卷(Replicated):数据在多个节点复制(如 2 副本、3 副本),具备高可用性,适合对数据安全要求高的场景。
  • 条带卷(Striped):数据分片存储在多个节点(类似 RAID 0),提升读写性能,无冗余。
  • 分布式复制卷(Distributed-Replicated):结合分布式和复制特性,兼顾容量和可用性(推荐生产环境使用)。

4.2 创建复制卷(示例)#

以 2 节点复制卷为例(数据在 gluster01 和 gluster02 各存一份):

步骤 1:创建 brick 目录#

在所有存储节点创建 brick 目录(需提前规划存储路径,建议使用独立磁盘挂载点):

# 在 gluster01 执行
mkdir -p /data/gluster/bricks/volume1
# 在 gluster02 执行
mkdir -p /data/gluster/bricks/volume1

步骤 2:创建卷#

在任意存储节点执行卷创建命令:

# 格式:gluster volume create <卷名> [副本数] <节点1:brick路径> <节点2:brick路径> ...
gluster volume create volume1 replica 2 gluster01:/data/gluster/bricks/volume1 gluster02:/data/gluster/bricks/volume1

参数说明

  • replica 2:指定副本数为 2(数据在 2 个节点复制)。
  • gluster01:/data/...:节点 1 的 brick 路径。
  • gluster02:/data/...:节点 2 的 brick 路径。

执行后会提示确认,输入 yes 即可。

4.3 启动卷并验证状态#

  1. 启动卷:

    gluster volume start volume1
  2. 查看卷信息:

    gluster volume info volume1

    输出示例:

    Volume Name: volume1
    Type: Replicate
    Volume ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: gluster01:/data/gluster/bricks/volume1
    Brick2: gluster02:/data/gluster/bricks/volume1
    Options Reconfigured:
    transport.address-family: inet
    nfs.disable: on
    
  3. 查看卷状态:

    gluster volume status volume1

    确认所有 brick 状态为 Online

5. 挂载与使用 GlusterFS 卷#

5.1 在客户端安装 GlusterFS 客户端#

客户端(如 client01)需安装 glusterfs-client 以挂载卷:

# 添加 GlusterFS 仓库(同存储节点步骤)
yum install -y https://download.gluster.org/pub/gluster/glusterfs/9/LATEST/CentOS/glusterfs-release-9.noarch.rpm
# 安装客户端
yum install -y glusterfs glusterfs-fuse

5.2 手动挂载卷#

  1. 创建挂载点:

    mkdir -p /mnt/gluster/volume1
  2. 挂载卷(使用 GlusterFS 原生协议):

    mount -t glusterfs gluster01:/volume1 /mnt/gluster/volume1

    说明gluster01:/volume1 中,gluster01 为任意存储节点的 hostname/IP,volume1 为卷名。

5.3 配置开机自动挂载#

编辑 /etc/fstab 添加以下行:

gluster01:/volume1 /mnt/gluster/volume1 glusterfs defaults,_netdev 0 0
  • _netdev:确保网络启动后再挂载,避免开机挂载失败。

验证 fstab 配置:

mount -a  # 重新加载 fstab,无报错则配置正确

6. 测试与验证#

6.1 数据写入与复制验证#

  1. 在客户端写入测试文件:

    dd if=/dev/zero of=/mnt/gluster/volume1/testfile bs=1M count=100
  2. 在存储节点检查文件是否同步:

    # 在 gluster01 检查
    ls -l /data/gluster/bricks/volume1/testfile
    # 在 gluster02 检查(应存在相同文件)
    ls -l /data/gluster/bricks/volume1/testfile

6.2 高可用性测试(节点故障模拟)#

  1. 关闭 gluster01 节点:

    poweroff
  2. 在客户端验证文件可访问:

    cat /mnt/gluster/volume1/testfile  # 应能正常读取
  3. 重启 gluster01 后,数据会自动同步(无需手动干预):

    # 在 gluster01 启动后检查同步状态
    gluster volume heal volume1 info

7. 常见问题与 troubleshooting#

问题 1:peer probe 失败,提示“Transport endpoint is not connected”#

  • 原因:网络不通、防火墙未开放端口、hostname 解析失败。
  • 解决
    • 检查节点间 ping gluster02 是否通。
    • 确认防火墙已开放 24007-24008 端口。
    • 验证 /etc/hosts 配置是否正确。

问题 2:卷创建失败,提示“Brick path is already part of another volume”#

  • 原因:brick 目录已被其他卷使用。
  • 解决:删除旧卷(gluster volume delete <旧卷名>)或更换 brick 路径。

问题 3:客户端挂载失败,提示“Volume does not exist”#

  • 原因:卷未启动或卷名错误。
  • 解决
    • 检查卷状态:gluster volume status volume1
    • 若未启动,执行 gluster volume start volume1

问题 4:数据写入后仅单个节点有文件(复制卷)#

  • 原因:卷类型配置错误(未指定 replica 参数)。
  • 解决:删除当前卷,重新创建时指定 replica N(N 为副本数)。

8. 最佳实践#

  1. 存储规划

    • 使用独立磁盘/分区作为 brick,避免与系统盘共用,提升性能和安全性。
    • 对 brick 所在磁盘进行分区对齐(如使用 parted 工具)。
  2. 网络优化

    • 为 GlusterFS 配置专用存储网络(如 10Gbps 网卡),分离管理网和数据网。
    • 启用 jumbo frames(MTU=9000)减少网络开销(需交换机支持)。
  3. 卷类型选择

    • 生产环境推荐使用 分布式复制卷(如 replica 2 + 多节点分布式),兼顾容量和可用性。
    • 避免使用纯分布式卷(无冗余)。
  4. 监控与维护

    • 使用 gluster volume statusgluster peer status 定期检查集群状态。
    • 配置日志监控(/var/log/glusterfs/),及时发现异常。
    • 定期执行 gluster volume heal <卷名> 修复数据不一致(自动 heal 已默认开启)。
  5. 性能调优

    • 调整卷参数:gluster volume set <卷名> performance.cache-size 256MB(根据内存调整缓存)。
    • 启用异步 I/O:gluster volume set <卷名> performance.io-thread-count 16

9. 参考资料#


通过本文步骤,您已成功在 CentOS 7 上部署了一个基础的 GlusterFS 集群。根据实际业务需求,可进一步扩展节点数量、调整卷类型或优化性能参数。GlusterFS 的灵活性和可扩展性使其成为企业级分布式存储的理想选择。