本文详细介绍CloudStack平台的宿主机HA的设计与实现细节。

在一个分布式系统中,一个宿主机上可能会运行很多不同的组件,出故障时,很有可能部分组件受到了影响, 另外一些组件没有受到影响,那些受影响的组件可能只是某个服务的一部分,一旦某个组件出问题, 属于同一服务的其他组件就会受到影响,它们很难判断受影响的组件是否出问题了,是否可以继续提供服务。 因此,分布式系统中如果存在有效的隔离机制,可以加快服务对故障的判断,并及时的剔除存在故障的组件, 这可以提高分布式系统的稳定性和故障时的收敛速度。

实现宿主机HA的基础是有可靠的宿主机隔离手段,也就是说一旦我们认定某个宿主机出问题了, 通过执行某些操作,能够确保这个被认为有问题的宿主机不会再影响其他宿主机。 服务器的带外管理(如:BMC)是现实服务器隔离比较有效的手段,因为它可以控制服务器的电源的供应。

为了实现宿主机的HA,CloudStack提供了一整套的机制,下面具体看看。

设计理念

设计目标

  • 操作简单:隔离服务应该操作简单,容易安装、部署和使用。
  • 重用已存在的组件:隔离服务应该尽可能的重用已经存在的组件和服务;
  • 与资源管理服务集成:与资源管理服务集成,将状态信息反馈到资源管理服务中,以便更准确的了解资源状态;

服务组件

  • 资源管理服务
    • 负责启用了HA资源的生命周期管理;持久化每个资源的有限状态机(FSM)。实现时,集成到CloudStack的核心组件中。
  • HA提供者
    • 提供具体方法实现某类资源HA相关的操作(如:判断、检测、恢复)。因为集群中存在很多不同类的资源,所以,会有很多不同的HA提供者。在实现上,会采用插件的形式。

实现方案

资源管理服务

资源管理服务会为每个资源维护一个有限状态机,资源可能的状态如下:

  • DISABLED:HA操作禁用了或对应的资源没有启用HA操作;
  • AVAILABLE:如果一个资源的状态是好的,而且满足HA管理的条件,那么它的状态会变为AVAILABLE.
  • INELIGIBLE:如果一个资源HA状态是好的,但是不支持HA检查、恢复等操作,那么它的状态会变为INELIGIBLE.
  • SUSPECT:如果一个资源最近的健康检查没有通过,CloudStack会对其启动失效检测;如果若干次检测之后,仍然没有恢复,资源的状态会转变为FENCED。
  • DEGRADED:如果一个资源仍然可以为客户提供服务,但是不能够被控制平面管理,那么它的状态会变为DEGRADED。
  • CHECKING:如果管理服务正在对某个资源执行存活检测,那么资源的状态会变为checking。如果检测次数没有超过最大的失效次数,那么状态变为RECOVERING,触发恢复操作。根据检测情况,资源也可能变为DEGRADED状态,或变为SUSPECT状态,再次触发检查操作。
  • RECOVERING:恢复操作是使资源重新恢复为健康的状态,如果成功了,资源会重新初始化。如果失败了,资源状态变为FENCED。
  • FENCED:该状态的资源无法自动恢复,需要管理员介入调查和恢复。因为这个状态不是幂等的,后续会分为FENCING和FENCED。

为了维护资源的状态,资源管理服务内部会维护如下的一下队列:

  • INELIGIBLE:临时、易失性的队列,用于跟踪INELIGIBLE的资源;
  • HEALTH CHECK:临时、易失性的队列,用于跟踪那些处于INITIALIZATING, AVAILABLE, SUSPECT, DEGRADED,或FENCED状态的资源
  • Activity Check:临时、易失性的队列,用于跟踪那些HA状态为CHECKING状态的资源;
  • Recovery:持久化的队列,跟踪那些等待恢复的资源;
  • Fence:持久化的队列,跟踪那些HA状态为SUSPECT及RECOVERING的资源;

为了实现宿主机HA,管理服务会提供如下的管理API:

  • listHostHAConfigurations:列举所有的HA相关的配置;
  • configureHAForHost:为宿主机配置HA相关的参数;
  • enableHAForHost:启用HA操作;
  • disableHAForHost:禁用HA操作;

HA提供者

HA资源管理服务维护资源的状态机,并决定什么时候进行评估。HA提供者则通过下面的接口来决定状态转换是否应该发生。

  • isEligible:判断HA提供者是否能够对资源执行HA相关的操作;
  • isHealthy:判断资源的连通性并尝试通过API对其进行操作;
  • hasActivity:检测是否功能正常,但是不能通过API进行操作;
  • recover:执行改变状态的操作(如:通过IPMI重置电源状态)
  • fence:执行操作隔离那些不能恢复的资源(如:通过IPMI将主机关机),防止错误蔓延;

HA提供者提供了如下的参数来控制HA相关的操作:

  • Minimum Recovery Time:恢复成功最少需要多长时间;
  • Recovery Timeout:恢复操作最长需要多长时间;
  • Maximum Recovery Attempts:最多尝试多少次恢复操作;
  • Minimum Fence Time:隔离成功最少需要多长时间;
  • Fence Timeout:隔离操作最长需要多长时间;
  • Activity Check Interval:Activity检查周期;
  • Health Check Timeout:健康检查超时时间;

KVM HA提供者

KVM HA提供者采用STONITH(Shoot the Other Node in the Head)隔离模式。KVM HA提供者会跨越整个集群进行操作。 如果检测到宿主机没有磁盘活动,宿主机就会变为DOWN。HA提供者通过查询存储子系统来判断主机的磁盘活动;

参考文档