主题
第 19 章 升级与扩容
19.1 GlusterFS 版本升级
升级原则
- 先在测试环境验证
- 逐节点升级,不要同时升级所有节点
- 确保集群健康后再升级下一节点
升级步骤
- 停止当前节点的 glusterd
- 升级软件包
- 重启 glusterd
- 检查集群状态
- 升级下一节点
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 status19.2 NFS-Ganesha 升级
升级 Ganesha 前,确保不会影响 VIP 服务:
- 确认当前节点不是 VIP 持有者(或主动切换)
- 停止 Ganesha
- 升级软件包
- 启动 Ganesha
- 验证导出
bash
systemctl stop nfs-ganesha
# 升级软件包
systemctl start nfs-ganesha
showmount -e localhost19.3 增加新节点扩容
步骤
- 准备新节点(系统、磁盘、网络、时间同步)
- 安装 GlusterFS
- 从现有节点 probe 新节点
- 准备新 brick
- 扩容卷
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 status19.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/gv019.5 在线迁移数据
场景
旧存储替换为新存储,业务不能停机。
方案
- 将新节点加入集群
- 扩容卷包含新节点
- 执行 rebalance
- 移除旧节点 brick
- 更新客户端挂载(如果需要)
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 commit19.6 本章小结
- 升级应逐节点进行,避免集群整体不可用
- 扩容可以增加节点或增加磁盘
- 扩容后需要执行 rebalance 重新分布数据
- 在线迁移数据需要谨慎操作,确保 rebalance 完成
- 升级和扩容前都要备份关键配置
练习题
- GlusterFS 升级时为什么要逐节点进行?
- 增加新节点后为什么需要 rebalance?
- 在线迁移数据的完整流程是什么?
- 升级 Ganesha 时如何减少对客户端的影响?