기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
활성/활성 AWS IoT Greengrass V2 구성 요소
이 설정에서는 사용자 지정 OCF(Open Cluster Framework) 리소스 에이전트를 사용하여 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 작업은 의도적으로 no-op입니다. 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복구된 인스턴스가 다시 백업되면 로드 밸런서는 인스턴스를 식별하고 필요에 따라 클라이언트 요청을 배포합니다.