Skip to main content

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操作;


2.2 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:健康檢查超時時間;

2.2.1 KVM HA提供者
KVM HA提供者採用STONITH(Shoot the Other Node in the Head)隔離模式。KVM HA提供者會跨越整個集群進行操作。如果檢測到宿主機沒有磁盤活動,宿主機就會變為DOWN。HA提供者通過查詢存儲子系統來判斷主機的磁盤活動;