GlusterFS 快照备份解决方案

Luk*_*ins 5 backup rsync glusterfs

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

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

  • 理想情况下,它可以作为实时(无停机)备份运行,但我们可以处理从集群中删除一个节点,然后在需要时重新添加它。

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

  • 我们有多个砖块。所有这些都需要备份,可以单独或一次性完成。

  • glusterfs 3.5.3在撰写本文时,我们目前正在运行,但在发布新版本时确实会升级。

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

Gluster Volume Snapshot听起来像是完美的解决方案,但我认为它还没有发布。

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

有没有其他人对如何处理这种情况有好的建议?还是真实的生活经历?谢谢你。

mer*_*lin 4

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

  1. 创建 LVM 精简池
  2. 为thinpool中的brick创建LVM镜像
  3. 创建砖并设置光泽体积等。

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

  1. sudo gluster snapshot 创建volume_name snapshot_name
  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
Run Code Online (Sandbox Code Playgroud)