在 IBM SmartCloud Enterprise+ 中启用虚拟机高可用性

在云中针对 System x 和 System p 实现基于 SLA 的高可用性

高可用性 (HA) 是云基础架构的一个重要特征。本文将概述 IBM SmartCloud Enterprise+ 用于确保高可用性的一种全面方法。本文还提供了在 System x® 和 System p® 平台上运行的虚拟机的 HA 实现细节。

Bhanu P Tholeti, 系统工程师和架构师, IBM

Bhanuprakash 过去 8 年一直在软件行业研究各种技术和产品,比如在 Pocket PC、基于 Web 的应用程序、视频流解决方案以及 Tivoli Workload Scheduler、WebSphere Data Interchange、Tivoli Service Automation Manager 和 Tivoli Provisioning Manager 等产品之上进行应用程序开发。作为 IBM SmartCloud Enterprise 的一员,他拥有丰富的云基础架构和虚拟机管理程序知识。



K. Sowjanya Chakravarthi, 系统工程师, IBM

Sowjanya CK 在过去四年多一直在 IBM 从事各种产品的研发。涉及的工作包括将 Tivoli Provisioning Manager 移植到 z/linux、Go Symphony 插件开发和 SCEplus 开发。



2012 年 11 月 12 日

高可用性 (HA) 是经常与云基础架构解决方案一起出现的一个词汇,主要是指业务的连续性和最短的停机时间。具体而言,任何云基础架构中的 HA 应当具有以下目标:

  • 减少计划内停机
  • 防止计划外停机
  • 快速从宕机中恢复
  • 持续的可用性

支撑云基础架构的是现代的虚拟机管理程序,它提供了实现 HA 的大部分功能和特性。本文将简要介绍 IBM SmartCloud Enterprise+ 如何处理计划内和计划外的服务器宕机,如何从宕机事件中恢复,以及如何确保持续的服务器可用性。然后,本文将描述 IBM SmartCloud Enterprise+ 中虚拟机 (VM) 的 HA 实现,这些虚拟机运行在 IBM System x 和 System p 平台上的 VMware 和 AIX (LPAR) 逻辑分区之上。

减少计划内停机

计划内宕机通常是为了进行软件维护或发布、更新或进行预定的设备维修。大多数云供应商都安排了一些计划内宕机,但是由于公司的运营基于高正常运行时间,所以计划内宕机需要保持在一个最低的水平。

IBM SmartCloud Enterprise+ 提供了一种自动化方法提供 VM 补丁,并对 OS 进行安全和非安全的更新。它会按照预先定义的周期自动部署更新(由客户决定在该周期内对哪些 VM 安装补丁),不需要任何人工干预。这种完全自动化的补丁方式极大地减少了计划内宕机的次数,使 VM 能够长时间可用,从而确保了业务的持续性。

防止计划外停机

引起云环境中计划外停机的原因有很多种。主要原因是虚拟机管理程序基础架构故障、OS 故障和网络故障。

IBM SmartCloud Enterprise+ 可以在最短的停机时间内处理大多数常见的故障。正如本文后面将介绍到,System x 上的监视代理和 System p 上的本机 daemon 可以检测 OS 故障;而 System x 上的 VMware 心跳时间间隔和 System p 上的一些本地 daemon 可以检测网络故障。

快速恢复宕机

对于计划外停机引起的宕机,恢复速度取决于故障的性质。宕机可能是主机平台故障或存储故障引起的,也可能是 OS 故障或网络故障引起的。如果云供应商没有进行恰当的规划,那么由主机平台故障或存储故障引起的宕机将会导致严重的数据和运行时丢失。

IBM SmartCloud Enterprise+ 中的故障转移机制能够使系统从主机平台和存储故障中快速恢复。故障主机平台上的所有工作负载都会分配到其他主机平台,并且停机时间很短。存储故障由镜像后的数据存储处理。VM 中的所有数据都将在两个数据存储中复制;如果一个数据库出现故障,那么 VM 可以启动并运行另一个复制的数据存储。

持续的可用性

减少计划内和计划外停机,并从宕机中快速恢复,这些都有助于实现持续的可用性,服务器(在平台即服务云中)正是靠这一点才能在大部分时间保持活跃状态,并且只需要非常短的停机。持续可用性可以通过以下方式实现:

  • 在底层虚拟机管理程序中适当地配置 HA 特性
  • 使用操作系统提供的特性实现某些故障检测
  • 监视服务可以监视任何 OS 故障
  • 应用程序监视有助于实现应用程序高可用性

IBM SmartCloud Enterprise+ 使用了大多数由虚拟机管理程序提供的 HA 可用性特性,如主机平台上的故障转移机制、重启优先级、心跳间隔、OS 监视和故障检测,以及死机检测。

基于 SLA 的 HA

IBM SmartCloud Enterprise+ 中的 HA 配置基于用户为特定 VM 选择的服务水平协议 (SLA)。对于 System x 和 System p 平台上的 VM,IBM SmartCloud Enterprise+ 定义了四种 SLA 水平:

  • Platinum
  • Gold
  • Silver
  • Bronze

Platinum SLA 具有最高优先级的重启设置,在出错情况下超时非常小。Gold、Silver 和 Bronze SLA 的重启优先级逐次降低,出错情况下的超时也会逐渐变长。本文其余部分会详细解释这些优先级和超时。请注意,SLA 包括基础架构组件和 VM 组件。本文只介绍 VM 组件。

对 System x 启用 HA

IBM SmartCloud Enterprise+ 中的 VMware vSphere High Availability (VMware HA) 对 IBM System x 上装配的 VM 启用了自动 HA 配置。它的两个关键特性分别是重启优先级和心跳。

重启优先级

VM 重启优先级值可解决资源争用的问题。如果没有足够的功能来启动所有故障 VM,优先级将确定 VMware HA 为 VM 分配的优先权。主机上的高优先级 VM 要比低优先级 VM 具有优先权。

一个 VM HA 配置的有效参数包括 disablehighmediumlow

心跳时间间隔

IBM SmartCloud Enterprise+ 中的 VMware VM 健康监视特性将始终检查对 VM 心跳服务的响应,VM 心跳服务在给定主机的每个 VM 的 VMware 工具中运行。如果心跳服务在一个可配置的超时间隔内无法响应健康监视服务,那么该 VM 就是一个故障 VM,因此将执行相应的重置操作。

心跳超时间隔的值越小,VM 重启的速度就越快。Platinum SLA 的心跳时间间隔最短,其后依次为 Gold、Silver 和 Bronze。

表 1 显示了为每个 SLA 级别配置的重启优先级和心跳值:

表 1. System x 上 VM 的重启优先级和心跳值
SLA重启优先级心跳超时间隔(以秒为单位)*
Platinumhigh30
Goldmedium60
Silverlow120
Bronzelow180

* 这是 IBM 的建议值。供应商、云管理员或用户可以根据常见环境和工作负载情况调整超时间隔。

除了 表 1 的设置外,Platinum VM 还在镜像数据存储中分配了存储空间,这使得 VM 在出现存储设备故障的情况下仍然能实现持续可用性。

使用 VMware vSphere API 实现 HA

VMware 提供了灵活、易用的 vSphere API,可通过编程方式配置所需的 HA 设置。

为配置重启优先权,IBM SmartCloud Enterprise+ 使用了 reconfigureComputeResource_Task API 和大量 vSphere 数据对象。清单 1 中的代码片段显示,ClusterConfigSpecEx 数据对象被传递给了 VIPort 接口的 reconfigureComputeResource_Task 方法:

清单 1. 通过编程方式配置重启优先权
// Initialize the ClusterConfigSpceEx data object and subobjects 
// required for enabling restart priority.
ClusterConfigSpecEx spec = new ClusterConfigSpecEx();
ClusterDasVmConfigSpec[] clusterDasVmConfigSpec = new ClusterDasVmConfigSpec[1];
clusterDasVmConfigSpec[0] = new ClusterDasVmConfigSpec();
spec.setDasVmConfigSpec(clusterDasVmConfigSpec);
ClusterDasVmConfigInfo clusterDasVmConfigInfo = new ClusterDasVmConfigInfo();
clusterDasVmConfigSpec[0].setInfo(clusterDasVmConfigInfo);
ArrayUpdateOperation arrayUppdateSpec = ArrayUpdateOperation.add;
clusterDasVmConfigSpec[0].setOperation(arrayUppdateSpec);

// VM managed object reference (MOR) must be provided as a key for ClusterDasVmConfigInfo.
clusterDasVmConfigInfo.setKey(VM MOR);

// Set the restart priority for the VM
ClusterDasVmSettings clusterDasVmSettings = new ClusterDasVmSettings();
clusterDasVmConfigInfo.setDasSettings(clusterDasVmSettings);

// Restart priority value is obtained from the SLA (see Table 1). 
clusterDasVmSettings.setRestartPriority(restartPriority based on SLA);
ManagedObjectReference taskMor 
   = con._service.reconfigureComputeResource_Task(clsMor, spec, true);

配置心跳间隔也使用了 reconfigureComputeResource_Task API 和一些 vSphere 数据对象。清单 2 中的代码片段显示,ClusterConfigSpecEx 数据对象被传递给了 VIPort 接口的 reconfigureComputeResource_Task 方法:

清单 2. 通过编程方式配置心跳间隔
// Initialize the ClusterConfigSpceEx data object and subobjects
//  required for enabling the heartbeat interval.
ClusterConfigSpecEx spec = new ClusterConfigSpecEx();
ClusterDasVmConfigSpec[] clusterDasVmConfigSpec = new ClusterDasVmConfigSpec[1];
clusterDasVmConfigSpec[0] = new ClusterDasVmConfigSpec();
spec.setDasVmConfigSpec(clusterDasVmConfigSpec);
ClusterDasVmConfigInfo clusterDasVmConfigInfo = new ClusterDasVmConfigInfo();
clusterDasVmConfigSpec[0].setInfo(clusterDasVmConfigInfo);
ArrayUpdateOperation arrayUppdateSpec = ArrayUpdateOperation.add;
clusterDasVmConfigSpec[0].setOperation(arrayUppdateSpec);

// VM managed object reference (MOR)must be provided as a key for ClusterDasVmConfigInfo.
clusterDasVmConfigInfo.setKey(VM MOR);

// Set the heartbeat interval for the VM.
ClusterDasVmSettings clusterDasVmSettings = new ClusterDasVmSettings();
clusterDasVmConfigInfo.setDasSettings(clusterDasVmSettings);
ClusterVmToolsMonitoringSettings clusterVmToolsMonitoringSettings = 
   new ClusterVmToolsMonitoringSettings();
clusterDasVmSettings.setVmToolsMonitoringSettings(clusterVmToolsMonitoringSettings);

// Heartbeat interval is obtained from the SLA (see Table 1) 
clusterVmToolsMonitoringSettings.setFailureInterval(heartBeatInterval based on SLA);
ManagedObjectReference taskMor 
   =con._service.reconfigureComputeResource_Task(clsMor, spec, true);

对 System p 启用 HA

在 System p 上启用 HA 的属性是 优先级挂起检测(priority hang detection)丢失 I/O 挂起检测(lost I/O hang detection)死机检测(crash detection)

表 2 显示了每个 SLA 中为这些 HA 特性配置的值:

表 2. System p 上支持 HA 的属性的 SLA 设置
SLA优先级问题超时(以秒为单位)*丢失 I/O 超时(以秒为单位)*死机检测
Platinum1020启用
Gold2040启用
Silver3560启用
Bronze60180启用

* 这些值为 IBM 的推荐值。供应商、云管理员或用户可以根据常用环境和工作负载条件调整超时间隔。

优先级挂起检测

所有进程(或者线程)都按照某种优先级运行。优先级的范围为 0-126,0 表示最高优先级,126 表示最低优先级。所有线程的默认优先级为 60。任何用户都可以通过 nice 命令降低某个进程的优先级。任何具有 root 权限的用户都可以提高某个进程的优先级。

内核调度器总是将具有最高优先级的可运行线程放到 CPU 中。因此始终有足够数量的高优先级线程完全占用机器资源,而低优先级线程线程则永远不会先于高优先级线程运行。如果正在运行的线程的优先级高于默认值 60,那么它可以锁定所有普通 shell 和登录,使系统呈现挂起状态。系统挂起检测特性提供了一种机制来检测装置状态,并向系统管理员提供一种修复方法。该特性被实现为一个后台程序(shdaemon),它按照最高优先级运行。这个后台程序将在内核中查询指定间隔内运行的优先级最低的线程。如果优先级高于配置的阈值,那么改后台程序会采取若干种操作之一。每个操作都可以单独启用,并且可以配置为可在任何时间间隔、任何优先级触发。

要在 IBM SmartCloud Enterprise+ 中配置系统挂起检测,需要使用 shconf 命令重启系统:

$: shconf -l pio -a pp_reboot=enable -a pp_rto=priority hang timeout based on SLA

丢失 I/O 挂起检测

AIX 还可以检测 I/O 挂起条件并根据用户定义的操作尝试修复它们。

I/O 错误可能导致 I/O 路径阻塞,进而影响该路径上的 I/O。在这种情况下,OS 必须警告用户并执行预定义操作。作为丢失 I/O 检测和通知的一部分,shdaemon(以及 Logical Volume Manager)将监视一段时期内的 I/O 缓冲,并检查是否有 I/O 等待时间过长。如果等待时间超过了 shconf 文件中指定的阈值,则会检测到一个 I/O 丢失并采取进一步的措施。有关丢失 I/O 的信息被记录到错误日志中。同时,根据 shconf 文件中的设置,还可以重启系统,以便从丢失 I/O 中恢复。

丢失 I/O 挂起检测在 IBM SmartCloud Enterprise+ 中的配置方式为通过下面的 shconf 命令重启系统:

$: shconf -l lio -a lio_reboot=enable -a lio_to=Lost I/O timeout based up on SLA

死机检测

如果 OS 死机,那么应当启用自动重启来确保连续可用性。IBM SmartCloud Enterprise+ 中的死机检测将通过 chdev 命令实现重启,该命令将系统对象设备属性 autorestart 修改为 true

$: chdev -l sys0 -a autorestart=true

结束语

本文讨论的 HA 特性使 IBM SmartCloud Enterprise+ 成为企业市场中最可靠的云产品之一,可以始终保证业务的连续性。如果您的 HA 需求发生变化,那么可以很轻松地从低 SLA 水平扩展到更高的水平。

参考资料

学习

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=845368
ArticleTitle=在 IBM SmartCloud Enterprise+ 中启用虚拟机高可用性
publish-date=11122012