![Xen:以最少的停机时间将图像转换为 lvm](https://linux22.com/image/546255/Xen%EF%BC%9A%E4%BB%A5%E6%9C%80%E5%B0%91%E7%9A%84%E5%81%9C%E6%9C%BA%E6%97%B6%E9%97%B4%E5%B0%86%E5%9B%BE%E5%83%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%20lvm.png)
我的目标:
- 将我的所有 DomU 从基于图像的转换为基于 lvm 的
- 停机时间最短
- 对其他 DomU/Dom0 的性能影响最小
我的计划/设置:
我的所有映像都位于一个大的 lvm 卷中,新设置的所有 lvs 都是使用文件系统 (ext3/ext4) 创建的。所以我的方法是,对每台机器都这样做:
- 制作大图快照-lv
- 挂载此快照(例如
/tmp/img_snap/
) - 回送安装图像本身(例如
/tmp/convert_src/
) - 安装新的 lv(例如
/tmp/convert_dest
) - rsync 从
/tmp/convert_src
到/tmp/convert_dest
- 卸载所有内容
- 删除 lv 快照
- 关闭 DomU
- 重复步骤 1-7
- 更改 DomU 配置中的磁盘设置
- 再次启动 domU
步骤 1-7 已经编写好了脚本,因此在第 9 步我只需再次启动此脚本即可。这意味着一些开销,因为 lv-snapshot 不是必需的,但我对此没有意见,也意识到了这一点。
由于原始机器可以运行到步骤 8(步骤 9 应该只复制增量),因此停机时间应该很短。我还renice
检查了ionice
rsync 进程,因此对所有其他系统的影响应该很小。或者我是这样认为的...
- 德比安·兰尼
- 来自 Debian 的 Xen 3.2
- HP ML350 G5 及其 SmartArray 控制器(iirc:e220?)
- 通过 SATA 连接的驱动器
疑问/问题:
- 这种方法没问题,并且已在小图像上进行了测试,但我有一些 400GB 以上的大图像。这需要很长时间。有没有更好的方法?
- 有时 - 我不知道为什么 - Dom0 的负载会上升太多,机器会“卡住”,我会收到诸如
INFO: task loop27:23352 blocked for more than 120 seconds
、INFO: 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 设置)编写脚本来:
- 关闭 DomU
- Loopback-挂载 DomUs 镜像
- 使用该映像创建降级的 md-raid-1 设备
- 使用“phy:mdN”作为新磁盘设备启动你的 DomU
- 将 raid1 成员数量从 1 增加到 2
- 添加你的目标 LV
- 更改 DomU 的设置,以便将来使用 phy:vgX/lvY
- 如果镜像完成,请使用新设置重新启动 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 同步并开始实时迁移...