生產環境 GlusterFS 副本卷(Replicate 3)因 SSD 故障導致一個 Brick 掉線。更換硬盤後,**無需全量同步、無需停業務**,通過從健康節點讀取可信擴展屬性(trusted.gfid、trusted.glusterfs.volume-id)寫入新節點,重啟服務即可自動觸發增量修復,實現秒級掛載、數據零影響恢復。
Volume Name: web-volume
Type: Replicate
Bricks:
Brick1: 10.48.83.204:/data/gfs (Online)
Brick2: 10.48.83.200:/data/gfs (Online)
Brick3: 10.48.83.196:/data/gfs (Offline - SSD 故障)
GlusterFS 以 **擴展屬性** 標識卷身份與文件標識:
trusted.glusterfs.volume-id:卷唯一 ID,所有 Brick 根目錄必須一致。trusted.gfid:文件全局唯一 ID(相當於 inode),根目錄 GFID 固定為 000...001。mkfs.xfs /dev/nvme0n1 # 或 ext4
mount /dev/nvme0n1 /data/gfs
echo "/dev/nvme0n1 /data/gfs xfs defaults 0 0" >> /etc/fstab
在 **任一在線節點** 執行:
getfattr -d -m '.*' /data/gfs
# 輸出示例:
# trusted.glusterfs.volume-id=0szZv1rRtfQEuCeW3hK4g47A==
# trusted.gfid=0sAAAAAAAAAAAAAAAAAAAAAQ==
# (其他 afr/dht 屬性無需手動複製,自愈過程會重建)
setfattr -n trusted.glusterfs.volume-id -v 0szZv1rRtfQEuCeW3hK4g47A== /data/gfs
setfattr -n trusted.gfid -v 0sAAAAAAAAAAAAAAAAAAAAAQ== /data/gfs
systemctl restart glusterd # 或 service glusterd restart
# 新節點執行
getfattr -d -m '.*' /data/gfs
# 應顯示完整 afr/dht/volume-id/gfid 屬性
# 任意節點執行
gluster volume status web-volume
# Brick3 狀態應變為 Online (Y)
gluster volume heal web-volume info
# 顯示待同步文件數,隨時間歸零
watch -n 5 'gluster volume heal web-volume info | grep -c "Number of entries"'
== 結尾,複製時勿遺漏。smartd)、定期 gluster volume heal 檢查、多副本策略(至少 3 副本)。| 維度 | 擴展屬性同步法 | remove/add-brick |
|---|---|---|
| 業務影響 | 零(在線秒級掛載) | 需遷移數據、可能觸發再平衡、耗時長 |
| 數據同步 | 增量自愈(僅差異) | 全量重平衡 |
| 操作複雜度 | 低(4 條命令) | 高(多步驟、需監控) |
| 風險 | 極低 | 再平衡期間性能抖動、佔用帶寬 |
GlusterFS 設計之初即考慮硬件故障替換場景,**擴展屬性即身份證**。掌握 getfattr/setfattr 操作 volume-id 與 gfid,配合 glusterd 重啟觸發自愈,能將 Brick 更換從「小時級遷移」壓縮為「分鐘級掛載」,最大化業務連續性。