虚拟化

实现 Hyper-V 的高可用性

Steven Ekren

 

概览:

  • 使用 Hyper-V 合并服务器
  • 确保虚拟机的高可用性
  • 设置 Windows Server 2008 故障转移

目录

高可用性
主机和来宾
来宾可用性
确保 VM 高可用性
前提条件
高可用性演练
注意事项

服务器虚拟化无疑将对企业中的 IT 部门产生重大影响,而 Hyper-V 与 Windows Server 2008 则可将这种影响变为现实。将服务器合并到更少的物理机器上将在资源和成本节省方面取得巨大优势,但在规划过程中需要考虑两个关键因素。用户对其软件(包括业务线 (LOB) 应用程序,以及类似消息和协作平台之类的工具)可用性的期望不断提高。而且,服务器问题或故障对运营的影响也越来越大。Windows Server 2008 和 Hyper-V 可以让虚拟机 (VM) 及其内部所托管的工作负载发挥出高可用性 (HA)。

高可用性

可用性是指用户能够访问系统以完成其工作。在高可用性环境中,需要确保用户始终能够访问系统,因为其设计和实现的目标即是确保运营的连续性。

Hyper-V 的高可用性通过使用 Windows Server 2008 故障转移群集功能实现。高可用性会受到计划和非计划停机时间的双重影响,在这两种情况中,故障转移群集均可以显著提高虚拟机的可用性。

虚拟机可以通过故障转移群集进行管理,并且可以在虚拟机内部使用故障转移群集以监控并转移 VM 中托管的工作负载。我将更加详细地说明这两种配置方案,但本文侧重于在使用前管理虚拟机。当然,您可以查看“Hyper-V 常用术语”侧栏。

主机和来宾

因为 Hyper-V 系统上运行着多个操作系统,所以准确把握所讨论的层或 OS 非常具有挑战性。我使用术语“来宾”指代 Hyper-V VM 内部运行在子分区中的 OS 和环境。而术语“主机”则表示物理机器,它由 Hyper-V 父分区上的 OS 负责管理。

主机可用性解决了服务器合并可能导致的“将所有鸡蛋放入同一个篮子里”的问题。Windows Server 2008 故障转移群集可以在 Hyper-V 父分区(主机)上配置,以便能够监控 Hyper-V 子分区(虚拟机或来宾)的运行状况并在群集节点间移动。这种配置具备以下主要优点:

  • 如果正在运行 Hyper-V 和 VM 的物理机器需要进行更新、更改或重新启动,则可以将 VM 移动到群集中的其他节点上。当物理机器恢复服务后再将 VM 移回原来的机器。
  • 如果运行 Hyper-V 和 VM 的物理机器发生故障(比如主板故障)或性能严重下降,则 Windows 故障转移群集中的其他成员将接收该 VM 的所有权并自动将其恢复到在线状态。
  • 如果 VM 出现故障,可以在同一台 Hyper-V 服务器重新启动,或者移动到另一台 Hyper-V 服务器。由于 Windows Server 故障转移群集可以检测到这些故障,所以它将根据 VM 资源属性中的设置自动采取恢复措施。凭借检测和恢复自动化,停机时间得以降至最低。

图 1 表示在这种情况下可能发生的事件。最初,VM2 位于主机 A 上,然后将 VM2 移动到主机 B。请注意在此移动过程中,配备 SAN 存储的 LUN 2 从主机 A 更改到主机 B。为确保高可用性解决方案能够满足您的可用性需求,需要仔细斟酌安放 VM 的位置。同时考虑容量和性能。

fig01.gif

图 1 虚拟机及其存储移动到新的主机(单击图像可查看大图)

节点的容量应该足够容纳所有的 VM,并且能够应对 x 个节点发生故障或脱离活动群集分区。(X 代表您希望群集能够承受的节点丢失数量,在丢失这些节点时仍能容纳所有的 VM。当决定容量时,您可以选择某些通常不托管 VM 的节点作为保留节点。或者,您也可以将 VM 传播到所有节点,以便确保每个节点都有足够的剩余空间在任意 x 个节点出现故障时能够成功地接收所有权并启动 VM。

出于日常性能原因考虑,将 VM 传播到群集的所有节点可能比较理想。如果将某些节点作为保留节点且不托管任何 VM,则托管 VM 的节点将使用更多资源,而且可能降低 VM 和管理分区的性能。在各节点中传播 VM 可以减少各节点承载的工作,并为 VM 和管理分区提供更好的性能。但是,规划容量也因此新增了挑战。类似 System Center Virtual Machine Manager 2008 之类的管理软件可以为节点故障和 VM 定位提供容量计算,以此提供帮助。

来宾可用性

来宾可用性侧重于使正在 VM 内部运行的工作负载高度可用。常见的工作负载包括文件和打印服务器、IIS 和 LOB 应用程序。分析 VM 内部工作负载的高可用性需求和解决方案与分析独立服务器上的工作负载非常相似。解决方案视具体的工作负载而定。

某些工作负载可以通过 Windows 网络负载平衡 (NLB) 获得高可用性,它允许将多台服务器作为使用通用网络名称的服务器池的一部分。客户端使用该虚拟网络名称发起连接请求,并连接 NLB 群集中的节点。使用 NLB 群集的典型方案是利用 IIS 构建 Web 场,其中每个单独的系统都包含有相同网页的 IIS,并可访问相同的数据。NLB 提供负载平衡,并可在维护或服务器发生故障期间删除成员关系服务器,以此实现高可用性。如果 Hyper-V VM 运行 Windows Server 2008(或包含 NLB 的早期 Windows Server 版本),则来宾可以与相同或不同 Hyper-V 主机的来宾一同成为 NLB 群集的成员。

运行 Windows Server 2008 的来宾可以使用 Windows 故障转移群集功能为其工作负载提供高可用性。在来宾内部(来宾群集)使用 Windows 故障转移群集有许多优点:

工作负载运行状况监控Windows 故障转移群集包含一个资源监控器,它可以调用与群集相关联的资源 DLL。每种资源都具有运行状况监控,它们通过测试由该资源所管理的应用程序或服务确保其工作正常。这些检查就是通常所说的 isAlive/looksAlive 检查。如果其中某个资源调用失败,则该资源本身可能出现故障。根据其属性配置,该资源可能会重新启动服务或应用程序,或者移动到 Windows 故障转移集群中的另一个节点。

虚拟机维护如果需要更改 VM 的配置,或者需要更新或更改 OS 或软件,则可以将工作负载移动到群集中的另一个节点,VM 关机或更新,这样对最终用户的干扰最小。

主机维护如果托管 Hyper-V VM 的物理机器需要进行维护或软件升级,并且 Windows 故障转移群集中的其他成员位于不同的 Hyper-V 主机之上,则该 VM 中的工作负载将移动到群集中的另一个节点,这样就可以关闭该 VM 以适应物理服务器的更改或重新启动。

虚拟机或主机故障如果物理 Hyper-V 主机或虚拟机来宾发生故障,Windows 故障转移群集中的其他节点将检测到该群集成员无响应或无法再加入群集,而工作正常的节点成员将把运行在发生故障的 VM 上的应用程序或服务恢复联机。

Hyper-V 常用术语

以下是帮助定义高可用 Hyper-V 系统(主机群集)组件或功能的术语列表。

父分区所有运行在管理程序服务器上的操作系统都已分配硬件资源,包括 RAM、CPU 和其他系统组件。在 Hyper-V 中,负责管理系统资源和管理程序配置的分区通常称作父分区。当配置 Hyper-V 角色且服务器重新启动时,充当系统本机操作系统的 Windows Server 2008 将成为 Hyper-V 服务器父分区中的操作系统。

子分区Hyper-V 服务器上的隔离环境,配置子分区是为了承载来宾操作系统,并为该操作系统提供硬件资源。

Hyper-V 主机托管 Hyper-V 和在父分区内运行的操作系统的物理服务器。

Hyper-V 虚拟机Hyper-V 配置信息及用于引导和运行 Hyper-V 子分区的数据。其中包括创建子分区的配置信息、VHD 文件或包含数据的传递磁盘。

传递磁盘磁盘管理程序中显示为物理磁盘的存储设备,它分配给 Hyper-V 来宾专用。Hyper-V 来宾可以装载该磁盘,并将其作为本地连接的存储设备使用。

虚拟硬盘 (VHD)由 Hyper-V 子分区连接的文件,操作系统可将其视为存储设备(磁盘)。.vhd 文件可以位于父分区装载的存储设备上,也可以是直接连接的存储设备,或者连接 SAN、NAS 或 SMB 的存储。

确保 VM 高可用性

要配置虚拟机的高可用性,只需完成“故障转移群集管理”中的“HA 角色向导”即可。当 Hyper-V 虚拟机具备高可用性时需要考虑几个重要组件。首先,让我们看一些重要概念和一般性的前提条件。

故障转移群集节点故障转移群集中的各个物理服务器称为节点。对于主机群集,故障转移群集服务在 Hyper-V 系统父分区上的 Windows Server 2008 中运行。这使得在同一物理服务器子分区中运行的 VM 能够配置为高可用虚拟机。配置高可用性的虚拟机在故障转移群集管理控制台中将作为资源显示。

HA 存储高可用虚拟机可以配置为使用虚拟硬盘 (VHD)、传递磁盘和差异磁盘。为了使虚拟机能够在故障转移群集节点间移动,需要能够被任何 VM 托管节点访问且由故障转移群集服务管理的存储(在“磁盘管理”中显示为磁盘)。传递磁盘应该作为磁盘资源添加到故障转移群集,而 VHD 文件必须位于作为磁盘资源添加到故障转移群集的磁盘上。

虚拟机资源一种用于代表虚拟机的故障转移群集资源类型。当虚拟机资源在线后,Hyper-V 将创建子分区并启动虚拟机内的操作系统。虚拟机资源的离线功能可以从托管节点的 Hyper-V 中删除 VM,并从 Hyper-V 主机中删除子分区。如果虚拟机关闭、停止或置于保存状态,则其资源将处于离线状态。

虚拟机配置资源一种用于管理 VM 配置信息的故障转移群集资源类型。每台虚拟机都具有一个虚拟机配置资源。该资源的属性包括配置文件的路径,配置文件包含将虚拟机添加到 Hyper-V 主机所需的所有信息。启动虚拟机资源需要访问该配置文件。因为配置由单独的资源管理,所以即使在 VM 离线时也可修改 VM 资源的配置。

虚拟机服务和应用程序组对于需要通过故障转移群集获得高可用性的服务或应用程序,必须在同一故障转移群集节点中托管多种资源。为确保这些资源始终处于同一节点且能够正确互操作,将它们放入 Windows Server 2008 故障转移群集称为“服务或应用程序”的组中。VM 的虚拟机资源与虚拟机配置资源始终位于相同的“服务或应用程序”组中。也可能会有一个或多个物理磁盘(或其他存储类型)资源包含“服务或应用程序”组中的 VHD、配置文件或传递磁盘。

资源依赖关系确保在虚拟机资源在线(启动)之前使虚拟机配置资源在线,并在虚拟机资源离线(停止)之后使虚拟机配置资源离线非常重要。通过设置虚拟机资源的属性,使其依赖于虚拟机配置资源可以确保实现这种在线/离线秩序。如果某个存储资源包含用于虚拟机配置资源或虚拟机资源的文件,则应该将这些资源设置为依赖该存储资源。例如,如果虚拟机使用磁盘 G:和磁盘 H: 上的 VHD 文件,则虚拟机资源应该依赖配置文件资源、磁盘 G: 资源和磁盘 H: 资源。

前提条件

以下是通过 Windows Server 2008 故障转移群集功能获得 Hyper-V 虚拟机高可用性的三个前提条件:

  1. 必须为群集中每个节点配置 Windows Server 2008 故障转移群集功能。有关配置和管理故障转移群集的详细信息,请参阅“Hyper-V 资源”侧栏。
  2. 必须安装 Hyper-V 角色。应该安装 Hyper-V 更新并为故障转移群集中的每个节点配置角色(同样请参阅“Hyper-V 资源”侧栏)。Hyper-V 包含一个安装 Hyper-V 服务器组件的更新软件包和一个安装 Hyper-V 管理控制台的更新软件包。安装 Hyper-V 服务器组件更新后,可以通过 Server Manager 或 ServerManagerCMD 添加角色。
  3. 需要为虚拟机提供共享存储。存储可由故障转移群集作为内置物理磁盘资源进行管理,也可以使用第三方解决方案管理共享存储。当然,第三方解决方案必须支持 Windows Server 2008 故障转移群集。

高可用性演练

现在让我们看看高可用性解决方案的创建步骤。第一步是建立虚拟机。在某个已经安装 Hyper-V 角色的故障转移群集节点上使用“Hyper-V Manager”配置一个虚拟机(请参阅图 2)。该虚拟机既可以是手动配置的新 VM,也可以导入预先存在的 VM。VHD 应该位于由 Windows Server 2008 故障转移群集管理的磁盘上,并且当前在将要配置 VM 的节点上处于在线状态。

fig02.gif

图 2 配置虚拟机(单击图像可查看大图)

现在,通过关机、关闭或保存状态将虚拟机置于停止状态。只有处于停止状态的虚拟机才可配置由故障转移群集进行管理。

在任何运行 Windows Server 2008 故障转移群集角色的服务器,或运行远程服务器管理工具 (RSAT) 的 Windows Vista 客户端上打开“故障转移群集管理”控制台(如图 3 所示)。通过选择“管理群集…”操作并选择节点或群集名称,或者选择连接运行控制台的节点上的群集,来连接故障转移群集。

fig03.gif

图 3 “故障转移群集管理”中的虚拟机(单击图像可查看大图)

从“故障转移群集管理”控制台,选择“配置服务或应用程序…”操作。该操作将打开“高可用性向导”,它将引导您完成配置服务、应用程序或将由故障转移群集管理的虚拟机。在向导中的“选择服务或应用程序”页面,请选择“虚拟机”,然后选择“下一步”。

“选择虚拟机”页面将显示故障转移群集中任意节点上配置的所有虚拟机。选择虚拟机,然后选择“下一步”。向导的“确认”页面将显示任何警告或错误。在这一步中将检查虚拟机配置以确认它是否可以配置为 HA 资源,以及节点是否能够托管它。此时选择“下一步”会将虚拟机作为高可用性资源添加到故障转移群集。

“摘要”页面提供有关添加虚拟机作为高可用性资源的结果信息,包括所有警告。“查看报告…”按钮可以显示配置高可用虚拟机任务的详细信息,以及任何警告或错误。最后,选择“完成”会关闭“高可用性向导”。

图 3 中窗口所示,“故障转移群集管理”控制台将在群集名称和“服务或应用程序”下方左侧窗格中列出带有虚拟机默认名称的对象。从该树形结构中选择虚拟机,“服务或应用程序”组中的资源将显示在控制台的中央窗格中。如果任何其他虚拟机在所选的存储中也存放了文件,它也将添加到该组中。还将显示置于该组中的每台虚拟机和虚拟机配置资源。

“服务或应用程序”组的信息窗格将显示该组的“状态”、“警报”、“首选所有者”和“当前所有者”信息。“所有者”节点是当前配置或运行虚拟机的节点。选择“将虚拟机移动到另一个节点”操作可以使虚拟机先离线,然后在另一个节点上在线。通常最佳做法是将 VM 移动到故障转移群集中可能托管它的每个节点,以便验证移动成功且 VM 能够启动和运行。

Hyper-V 资源

注意事项

以下是一些设置高可用性虚拟机时需要记住的要点:

存储如果虚拟机在相同共享磁盘上有 VHD 文件,即使它们位于相同磁盘的不同卷,仍需要置于相同的“服务或应用程序”组中。共享磁盘的优势之一在于它能够更好地利用可用存储空间。

但是,不利之处在于当移动虚拟机时(无论因虚拟机故障自动恢复,还是因为管理员的选择),该组中所有的虚拟机都将移动。

驱动器盘符和 GUID可以创建不分配驱动器盘符的卷。虚拟机可以使用这些卷,且这些卷可由故障转移群集进行管理。如果某个磁盘资源包含使用 GUID 而不是驱动器盘符的卷,则将在“群集管理”中显示该 GUID。当创建虚拟机并为 VHD 指定路径时,确保路径中的 GUID 与该卷“群集管理”中显示的 GUID 相匹配非常重要。如果不匹配,则虚拟机可能无法在故障转移群集中的其他节点上成功启动(在线)。

以下几种情况可能导致 GUID 不匹配。如果某卷先于节点上在线,然后才成为故障转移群集管理的磁盘资源,则该卷在每个节点上可能具有不同的 GUID。卷还可能在单个节点上具有多个 GUID。当磁盘作为物理磁盘资源添加到故障转移群集时,节点(包含在线磁盘)中使用的卷 GUID 将在该磁盘资源的属性中注明。

当磁盘资源在线时,卷 GUID 将添加到节点。这确保故障转移群集为该卷记录的特定 GUID 在任意使该磁盘在线的节点上均为有效路径。该节点可能包含关联相同磁盘的其他 GUID。因此,用户可以找出节点上对该卷有效的 GUID,但故障转移群集并不能保证它与其他节点上卷所用的 GUID 相同。它产生的症状是虚拟机资源(通常是“配置”资源)无法在线,并显示错误消息,指示路径无效。错误消息中的路径显示该 GUID 不是该卷的群集管理 GUID。

装入点装入另一个卷的文件夹中的卷,未分配驱动器盘符或使用 GUID,是 Hyper-V 和故障转移群集可以使用的有效卷。由于被装入的卷和托管该装入点的卷必须位于相同的故障转移群集节点上,所以必须将装入点中的所有磁盘放入相同的“故障转移群集服务或应用程序”组。

如果这些卷位于相同的磁盘上,那显然不存在问题。但如果这些卷位于不同的磁盘上,那肯定会出现问题。同样明显但仍值得一提的是:被装入的卷和装入点主机必须是共享存储,且配置为由故障转移群集节点管理。

差异磁盘 差异磁盘所含的所有 VHD 文件需要位于共享存储上,而该存储与使用差异磁盘的 VM 属于相同的“服务或应用程序”组。在最简单的配置中,差异磁盘包含两个 VHD。一个是父 VHD,其中包含发挥基础作用的数据集。另一个 VHD 是与父项关联的子项。

第一次使用时,差异磁盘的表现类似父项。如果数据位于父项,则从该 VHD 读取数据。所有的写操作在子 VHD 上执行。如果数据位于子项上,则读取该数据时将引用子 VHD。

如果 VM 采用某种方式配置,使得子 VHD 位于共享存储中,而父 VHD 或者不位于相同组中的共享存储上,或者位于本地连接的存储设备中,则该 VM 移动到另一个节点时将无法启动(在线)。“高可用性向导”应该通过检查确保该设置在 VM 中配置正确,并在检测到该错误时提供错误消息,但如 VM 配置发生更改,最好注明要求。

Steven Ekren 是 Windows Server 故障转移群集和高可用性团队的高级产品经理。Steven 在 Microsoft 支持部门工作长达 12 年,期间他曾协助企业客户实施和排除 Windows Server 故障转移群集和虚拟化技术故障,包括 Windows Hyper-V、System Center Virtual Machine Manager、Microsoft Virtual Server 和 Microsoft Virtual PC。