本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
作用中/作用中 AWS IoT Greengrass V2 元件
在此設定中,您會使用自訂 OCF (開放式叢集架構) 資源代理程式,透過 Pacemaker 管理 AWS IoT Greengrass V2 元件。這可讓 Pacemaker 監控 AWS IoT Greengrass V2 元件的運作狀態,並在元件進入中斷狀態時觸發復原動作。
重要
在繼續先決條件和叢集設定之前,請先完成 中的所有步驟,但 DRBD 設定步驟除外。此設定不使用 DRBD。請改為在每個執行個體上安裝 AWS IoT Greengrass V2 至本機路徑。 AWS IoT Greengrass V2 必須在所有執行個體上佈建和執行 。本教學課程假設 AWS IoT Greengrass V2 已安裝在 /greengrass/v2。如果您選擇不同的路徑,請相應地更新 OCF 指令碼中的GG_CLI變數。
建立自訂 OCF 資源代理程式
在所有執行個體上建立自訂資源代理程式目錄和指令碼。此範例會管理名為 的元件PythonWebServer。
sudo mkdir -p /usr/lib/ocf/resource.d/custom
/usr/lib/ocf/resource.d/custom/gg-webserver 使用下列內容在 建立資源代理程式指令碼。
#!/bin/bash # OCF Resource Agent for Greengrass Web Server component . /usr/lib/ocf/lib/heartbeat/ocf-shellfuncs GG_CLI="/greengrass/v2/bin/greengrass-cli" COMPONENT="PythonWebServer" STATE_FILE="/run/gg-webserver.ocf-state" case "$1" in meta-data) cat <<EOF <?xml version="1.0"?> <resource-agent name="gg-webserver"> <version>1.0</version> <longdesc lang="en">Greengrass webserver component agent</longdesc> <shortdesc lang="en">GG Webserver</shortdesc> <parameters> </parameters> <actions> <action name="start" timeout="60"/> <action name="stop" timeout="10"/> <action name="monitor" timeout="5" interval="10"/> <action name="meta-data" timeout="5"/> </actions> </resource-agent> EOF ;; start) touch "$STATE_FILE" systemctl restart greengrass if [ $? -eq 0 ]; then exit $OCF_SUCCESS else rm -f "$STATE_FILE" exit $OCF_ERR_GENERIC fi ;; stop) rm -f "$STATE_FILE" exit $OCF_SUCCESS ;; monitor) # Check state file first — if absent, resource is stopped [ ! -f "$STATE_FILE" ] && exit $OCF_NOT_RUNNING # Check if the Greengrass service is running if ! systemctl is-active --quiet greengrass; then exit $OCF_NOT_RUNNING fi STATE=$($GG_CLI component details -n=$COMPONENT 2>/dev/null | grep '^[[:space:]]*State:' | awk '{print $2}') if [[ -z "$STATE" ]]; then ocf_log warn "Component $COMPONENT state is empty — component may not be deployed" exit $OCF_SUCCESS elif [[ "$STATE" == "BROKEN" ]]; then exit $OCF_ERR_GENERIC else exit $OCF_SUCCESS fi ;; *) echo "Usage: $0 {start|stop|monitor|meta-data}" exit $OCF_ERR_UNIMPLEMENTED ;; esac
讓指令碼可執行:
sudo chmod +x /usr/lib/ocf/resource.d/custom/gg-webserver
注意
start 動作會重新啟動整個 AWS IoT Greengrass V2 服務,這會重新啟動執行個體上的所有元件,而不只是 PythonWebServer。這是唯一的實際復原路徑,因為 AWS IoT Greengrass V2 不支援重新啟動個別元件。stop 動作刻意為無操作,因為此代理程式是監控包裝函式 – AWS IoT Greengrass V2 服務生命週期是由系統化而非此代理程式管理。如果元件持續存在 BROKEN(例如,由於部署錯誤),Pacemaker 最多會重試 migration-threshold 次,然後禁止該節點上的資源,直到 failure-timeout過期為止。您必須修正根本原因 (例如重新部署有效的元件版本),才能停止重試週期。
連接資源
使用自訂 OCF 代理程式建立 Pacemaker 資源。
sudo pcs property set stonith-enabled=false
警告
STONITH 會在此處停用,以簡化本教學課程。在生產環境中,您必須啟用 STONITH 並設定圍欄代理程式 (例如,fence_aws針對 Amazon EC2 執行個體),以防止大腦分割和資料損毀。
sudo pcs resource create gg-webserver ocf:custom:gg-webserver \ op monitor interval=30s \ op start timeout=60s \ meta migration-threshold=3 failure-timeout=60s \ clone
驗證復原
-
檢查初始狀態。確認元件 AWS IoT Greengrass V2 在所有執行個體上執行且運作狀態良好。
sudo pcs status -
模擬元件故障。刪除元件的程序以模擬暫時性故障。 AWS IoT Greengrass V2 可能會先嘗試內部復原。如果元件進入
BROKEN狀態,則 Pacemaker 會偵測到它並觸發服務重新啟動。如果 在內部 AWS IoT Greengrass V2 復原元件,則 Pacemaker 不會採取任何動作。sudo pkill -f "PythonWebServer" # Wait 30-60 seconds, then check the component state sudo /greengrass/v2/bin/greengrass-cli component details -n=PythonWebServer -
驗證復原。Pacemaker 偵測到元件運作狀態不佳,並執行自訂 OCF 指令碼中定義的復原步驟。不需要容錯移轉 — Pacemaker 會在相同的執行個體上重新啟動服務。
其他 服務,例如 HAProxy AWS IoT Greengrass V2 ,並繼續在所有執行個體上正常運作。待命執行個體上的應用程式會繼續接收請求,而不會中斷。
sudo pcs status當復原的執行個體恢復時,負載平衡器會加以識別,並視需要分配用戶端請求。