GlusterFS快照备份解决方案

GlusterFS快照备份解决方案

我们正在寻找一种快速的方法来获取我们的 gluster 砖的时间点快照。

  • 这是不是至关重要的是,它是一个完美的时间点快照(即,如果文件在备份期间发生变化/添加/删除,则备份有/没有这些更改是可以的)。

  • 理想情况下,它可以作为实时(无停机)备份运行,但如果需要,我们可以从集群中删除一个节点,然后再将其添加回来。

  • 备份需要传输到远程位置,但如果需要,可以在本地进行初始备份后完成此操作。

  • 我们有多块砖。所有砖块都需要备份,可以单独备份,也可以同时备份。

  • glusterfs 3.5.3在撰写本文时我们正在运行,但是当新版本发布时我们往往会升级。

我们考虑过使用 rsync(就像我们在普通卷上所做的那样),但是它在 gluster 上确实很慢,因为我们有数十万个非常小的文件(100kb - 3mb),我的理解是 gluster 会与每个文件的所有节点通信以确保它提供正确的版本。我们可以通过其中一个服务器节点上的数据目录位置(而不是通过 glusterfs 客户端)进行 rsync 吗?这会按预期工作并且更快,因为它不需要检查所有节点的内容吗?

Gluster 卷快照听起来像是完美的解决方案,但我认为它尚未发布。

gluster 存储节点有 LVM,但我不太熟悉它的来龙去脉。这可能是解决方案吗?

还有人对如何处理这种情况有什么好的建议吗?或者有实际经验吗?谢谢。

答案1

您需要将您的 gluster 砖放在精简配置的 LVM-Images 上。

  1. 创建 LVM 精简池
  2. 为 Thinpool 中的 Brick 创建 LVM 映像
  3. 创建砖块并设置 gluster 卷等。

据我所知,最简单的解决方案是:

  1. sudo gluster 快照创建卷名称快照名称
  2. 从文件系统卸载快照
  3. 使用 dd 和 lz4 创建快照的 lz4 映像
  4. 重新挂载映像

在专用服务器上,对包含超过 2M 个文件和 18G 的图像进行完全备份大约需要 90 秒。

伪代码:

# create snapshot
echo $(date)" Creating glusterfs snapshot" >> $LOG
gluster snapshot create $SNAP_NAME $GS_VOLUME no-timestamp 2>>$LOG
echo $(date)" [OK]" >> $LOG

# get snapshot volume name
SNAP_VOL_NAME=$(gluster snapshot info $SNAP_NAME | grep "Snap\ Volume\ Name" | sed -e 's/.*S.*:.//g') MOUNT_OBJECT="/dev/"$VG"/"$SNAP_VOL_NAME"_0" 
MOUNT_POINT="/run/gluster/snaps/$SNAP_VOL_NAME/"$BRICK BACKUP_FS=$DIR_BA"/"$SNAP_NAME".ddimg.lz4"

# umount the image
umount $MOUNT_POINT

# create backup
echo $(date)" Creating lz4 of LVM image" >> $LOG
sudo dd if=$MOUNT_OBJECT 2>>$LOG | lz4 > $BACKUP_FS 2>>$LOG
echo $(date)" [OK]" >> $LOG

# mount image back
#mount $MOUNT_OBJECT $MOUNT_POINT

# delete (all) snapshots and umount
yes | gluster snapshot delete volume $GS_VOLUME 2>> $LOG

答案2

我认为这是一个糟糕的解决方案。

GlusterNode1 ~ $ df -h | grep gluster

/dev/mapper/vg_12564073a0545f72de3g7835e711459a-33eacc4c9c2c4e6fbec16cdb55dd8b37_0 2.0G 35M 2.0G 2% /运行/gluster/snaps/33000c4c9c2c4e6fbec16cdb55dd8b37/brick3

快照是用lvm制作的,lv4图像只包含这个节点的砖块。

相关内容