Xen:以最少的停机时间将图像转换为 lvm

Xen:以最少的停机时间将图像转换为 lvm

我的目标:

  • 将我的所有 DomU 从基于图像的转换为基于 lvm 的
  • 停机时间最短
  • 对其他 DomU/Dom0 的性能影响最小

我的计划/设置:

我的所有映像都位于一个大的 lvm 卷中,新设置的所有 lvs 都是使用文件系统 (ext3/ext4) 创建的。所以我的方法是,对每台机器都这样做:

  1. 制作大图快照-lv
  2. 挂载此快照(例如/tmp/img_snap/
  3. 回送安装图像本身(例如/tmp/convert_src/
  4. 安装新的 lv(例如/tmp/convert_dest
  5. rsync 从/tmp/convert_src/tmp/convert_dest
  6. 卸载所有内容
  7. 删除 lv 快照
  8. 关闭 DomU
  9. 重复步骤 1-7
  10. 更改 DomU 配置中的磁盘设置
  11. 再次启动 domU

步骤 1-7 已经编写好了脚本,因此在第 9 步我只需再次启动此脚本即可。这意味着一些开销,因为 lv-snapshot 不是必需的,但我对此没有意见,也意识到了这一点。

由于原始机器可以运行到步骤 8(步骤 9 应该只复制增量),因此停机时间应该很短。我还renice检查了ionicersync 进程,因此对所有其他系统的影响应该很小。或者我是这样认为的...

  • 德比安·兰尼
  • 来自 Debian 的 Xen 3.2
  • HP ML350 G5 及其 SmartArray 控制器(iirc:e220?)
  • 通过 SATA 连接的驱动器

疑问/问题:

  • 这种方法没问题,并且已在小图像上进行了测试,但我有一些 400GB 以上的大图像。这需要很长时间。有没有更好的方法?
  • 有时 - 我不知道为什么 - Dom0 的负载会上升太多,机器会“卡住”,我会收到诸如INFO: task loop27:23352 blocked for more than 120 secondsINFO: task pdflush:7329 blocked for more than 120 seconds.、 ... 之类的消息以及它们的调用轨迹等。为什么/什么时候?我无法找出规律?是不是 IO 太多,CPU 太多?最重要的是:为什么我的 rsync 进程没有被阻止 - 我对它们进行了 reniced ( renice 20 -p $(pidof rsync)) 和 ioniced ( ionice -c2 -n7 -p$pid) - 这些进程不应该是首先被阻止的吗?
  • 通常有什么提示和改进想法吗?

答案1

rsync 是一个非常好的工具。如果你使用它,请采用选项“-aSH --delete”,这样你将获得几乎完全相同的目标(软链接的 ctime-stamps 将具有当前时间)。

从您的文章中我了解到 rsync 所需的时间似乎是您的主要问题,而 DomU 的关闭/启动非常快(我认为包括它们的应用程序)。

我发现您的大型 LV 快照中存在另一个问题,该快照保存了所有正在运行的 DomU。如果您有许多写入请求,您的快照将很快填满 - 并且快照将在写入期间减慢 DomU 的速度。

在这种情况下,我会选择一种不同的方法:使用软件 raid 1 将您的图像镜像到您的新 LV。

如果您愿意,可以将其与快照/rsync 结合使用,以减少需要移动的数据量。但恕我直言,整理和编写脚本所需的时间不值得付出努力。

因此计划如下 - 在两种情况下您都需要块设备(回送安装您的图像):

A)使用 md(通过 mdadm 设置)编写脚本来:

  1. 关闭 DomU
  2. Loopback-挂载 DomUs 镜像
  3. 使用该映像创建降级的 md-raid-1 设备
  4. 使用“phy:mdN”作为新磁盘设备启动你的 DomU
  5. 将 raid1 成员数量从 1 增加到 2
  6. 添加你的目标 LV
  7. 更改 DomU 的设置,以便将来使用 phy:vgX/lvY
  8. 如果镜像完成,请使用新设置重新启动 DomU

使用计划 A,您将有两次停机时间,每次重新启动 DomU。镜像将尽快在后台进行。

缺点:所有数据将同步(RAW 镜像,不基于文件系统)

您可以通过使用 (--assume clean) 创建 md-raid1 来解决这个问题,而不会降低性能。但这会很棘手(您需要 rsync 将数据传送到 LV,然后使用 md-bitmap 镜像增量)。

B) 使用 drbd(通过 /etc/drbd.conf 设置)如果您计划将来切换到 drbd,则应该采用这种方式。我没有测试过这一点,但看不出 drbd 不应该在 127.0.0.1 和 127.0.0.2 之间进行镜像的原因 ;-)

我没有测试过,但它应该可行 - 而且比计划 A 更复杂。

缺点:复杂,未经测试。

但是:如果您无论如何都想切换到 drbd,您可以通过这种方式准备 DomU。在断开连接的模式下运行,直到集群准备就绪,然后连接、通过 IP 同步并开始实时迁移...

相关内容