本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Active/active 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 服务生命周期由 systemd 管理,而不是由此代理管理。如果某个组件持续存在BROKEN(例如,由于部署不当),Pacemaker 最多会重试migration-threshold几次,然后在该节点上禁止该资源直到到期。failure-timeout您必须修复根本原因(例如,重新部署有效的组件版本)才能停止重试周期。
附加资源
使用自定义 OCF 代理创建 Pacemaker 资源。
sudo pcs property set stonith-enabled=false
警告
为了简化本教程,此处禁用 STONITH。在生产环境中,您必须启用 STONITH 并配置隔离代理(例如,用于 Amazon EC2 实例),fence_aws以防止大脑分裂和数据损坏。
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恢复的实例恢复后,负载均衡器会识别该实例,并根据需要分发客户端请求。