Skip to content

第 19 章 升级与扩容

19.1 GlusterFS 版本升级

升级原则

  • 先在测试环境验证
  • 逐节点升级,不要同时升级所有节点
  • 确保集群健康后再升级下一节点

升级步骤

  1. 停止当前节点的 glusterd
  2. 升级软件包
  3. 重启 glusterd
  4. 检查集群状态
  5. 升级下一节点
bash
# 在 node1 执行
systemctl stop glusterd

# Ubuntu
apt update
apt install --only-upgrade glusterfs-server

# Rocky
dnf update glusterfs-server

systemctl start glusterd
gluster peer status
gluster volume status

19.2 NFS-Ganesha 升级

升级 Ganesha 前,确保不会影响 VIP 服务:

  1. 确认当前节点不是 VIP 持有者(或主动切换)
  2. 停止 Ganesha
  3. 升级软件包
  4. 启动 Ganesha
  5. 验证导出
bash
systemctl stop nfs-ganesha
# 升级软件包
systemctl start nfs-ganesha
showmount -e localhost

19.3 增加新节点扩容

步骤

  1. 准备新节点(系统、磁盘、网络、时间同步)
  2. 安装 GlusterFS
  3. 从现有节点 probe 新节点
  4. 准备新 brick
  5. 扩容卷
bash
# 在现有节点执行
gluster peer probe node4

# 扩容分布式复制卷示例
gluster volume add-brick gv0 replica 3 \
    node4:/data/brick1/gv0 \
    node5:/data/brick1/gv0 \
    node6:/data/brick1/gv0

数据再平衡

bash
gluster volume rebalance gv0 start
gluster volume rebalance gv0 status

19.4 增加新磁盘扩容

如果节点有未使用的磁盘,可以在同一节点增加 brick。

bash
# 格式化并挂载新磁盘到 /data/brick2
mkfs.xfs -f /dev/sdc
mkdir -p /data/brick2
mount /dev/sdc /data/brick2

# 扩容卷
gluster volume add-brick gv0 replica 3 \
    node1:/data/brick2/gv0 \
    node2:/data/brick2/gv0 \
    node3:/data/brick2/gv0

19.5 在线迁移数据

场景

旧存储替换为新存储,业务不能停机。

方案

  1. 将新节点加入集群
  2. 扩容卷包含新节点
  3. 执行 rebalance
  4. 移除旧节点 brick
  5. 更新客户端挂载(如果需要)
bash
# 添加新 brick
gluster volume add-brick gv0 replica 3 \
    new1:/data/brick1/gv0 \
    new2:/data/brick1/gv0 \
    new3:/data/brick1/gv0

# 数据再平衡
gluster volume rebalance gv0 start

# 移除旧 brick(需要等待 rebalance 完成)
gluster volume remove-brick gv0 replica 3 \
    old1:/data/brick1/gv0 \
    old2:/data/brick1/gv0 \
    old3:/data/brick1/gv0 start

# 确认迁移完成后提交
gluster volume remove-brick gv0 replica 3 \
    old1:/data/brick1/gv0 \
    old2:/data/brick1/gv0 \
    old3:/data/brick1/gv0 commit

19.6 本章小结

  • 升级应逐节点进行,避免集群整体不可用
  • 扩容可以增加节点或增加磁盘
  • 扩容后需要执行 rebalance 重新分布数据
  • 在线迁移数据需要谨慎操作,确保 rebalance 完成
  • 升级和扩容前都要备份关键配置

练习题

  1. GlusterFS 升级时为什么要逐节点进行?
  2. 增加新节点后为什么需要 rebalance?
  3. 在线迁移数据的完整流程是什么?
  4. 升级 Ganesha 时如何减少对客户端的影响?