能用3台最小化centos7节点跑起来、不依赖外部元数据服务、写入后自动跨节点复制的glusterfs集群,核心就三步:时间同步+主机名互通+glusterd正常通信;需严格校准时间(chronyd±50ms)、fqdn双向解析准确、brick使用xfs格式化并挂载于独立目录、replica数与brick总数严格匹配。

能用 3 台最小化 CentOS 7 节点跑起来、不依赖外部元数据服务、写入后自动跨节点复制的 GlusterFS 集群,核心就三步:时间同步 + 主机名互通 + glusterd 正常通信。其他所谓“复杂配置”多数是为高可用或监控补的,不是启动前提。
确保所有节点时间严格同步
GlusterFS 对时间差极其敏感,节点间时钟偏差 > 5 秒就可能触发 peer probe 失败或卷状态异常(如 Staged 卡住)。不要只靠 ntpdate 临时校准。
- 在每台节点上安装并启用
chronyd:yum install -y chrony && systemctl enable --now chronyd - 检查是否真正同步:
chronyc tracking输出中System clock offset应稳定在 ±50ms 内;chronyc sources -v显示至少一个有效源(如^* pool.ntp.org) - 禁止使用
systemd-timesyncd—— 它精度不够,且与chronyd冲突
主机名必须可双向解析且匹配 glusterd 实际绑定地址
gluster peer probe node2 失败最常见的原因是 DNS 返回了错误 IP,或 /etc/hosts 里写了别名但 hostname -f 解析不到真实 FQDN。
- 每台节点执行
hostname -f,输出必须是完整域名(如node1.cluster.local),不能是localhost或未解析的短名 - 统一用
/etc/hosts管理(比 DNS 更可控):192.168.93.101 node1.cluster.local node1,每行一个节点,IP 和 FQDN 必须一一对应 - 验证解析:
getent hosts node2.cluster.local和ping -c1 node2.cluster.local必须返回预期 IP 且通 - 注意:glusterd 默认监听所有接口,但
peer probe会尝试用hostname -f解析出的地址通信,所以 FQDN 的 A 记录/IP 必须可达
brick 目录必须挂载在 XFS 上且禁用 atime
ext4 虽然能跑,但小文件性能差、元数据锁竞争高;未禁用 atime 会导致频繁磁盘写入,加速 brick 所在磁盘老化,并引发 gluster volume start 卡在 Brick process not running。
- 格式化命令必须带
-i size=512:mkfs.xfs -f -i size=512 /dev/sdb1(避免默认 256 字节 inode 导致大目录性能下降) - 挂载选项加
noatime,inode64,allocsize=256k:/dev/sdb1 /bricks/brick1 xfs defaults,noatime,inode64,allocsize=256k 1 2 - brick 路径不能是根分区子目录(如
/data/brick1),必须是独立挂载点(/bricks/brick1),否则glusterd启动时可能因权限或 SELinux 上下文问题拒绝写入 - 确认挂载后执行:
mount | grep brick1看是否含noatime;xfs_info /bricks/brick1看ino64是否启用
创建复制卷时 brick 数量必须是 replica 数的整数倍
比如想建 3 副本复制卷,却只提供 4 个 brick(node1:/b1 node2:/b1 node3:/b1 node4:/b1),gluster volume create 会静默失败或创建出非预期的分布式复制卷。
- 正确做法:3 节点 × 1 brick = 3 brick,命令为
gluster volume create vol1 replica 3 node1:/bricks/brick1 node2:/bricks/brick1 node3:/bricks/brick1 - 若某节点有多个磁盘,可单节点配多个 brick,但总数仍需满足
total_bricks % replica == 0 - 启动后立刻检查:
gluster volume info vol1中Number of Bricks应等于replica * count_of_node_groups,且每个Brick行末尾显示Online - 容易忽略的一点:首次
volume start后,/var/lib/glusterd/vols/<volname>/</volname>下会生成info文件,里面记录了 brick 的实际 UUID —— 如果你后续重装系统但保留了 brick 目录,这个 UUID 不匹配会导致 brick 拒绝加入卷











