View a markdown version of this page

Active/active AWS IoT Greengrass V2 componente - AWS IoT Greengrass

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Active/active AWS IoT Greengrass V2 componente

In questa configurazione, gestisci un AWS IoT Greengrass V2 componente con Pacemaker utilizzando un agente di risorse OCF (Open Cluster Framework) personalizzato. Ciò consente a Pacemaker di monitorare lo stato di un AWS IoT Greengrass V2 componente e di attivare azioni di ripristino quando il componente entra in uno stato di guasto.

Importante

Completa tutti i passaggi Prerequisiti e configurazione del cluster prima di procedere, ad eccezione dei passaggi di configurazione DRBD. Questa configurazione non utilizza DRBD. Effettua invece AWS IoT Greengrass V2 l'installazione su un percorso locale su ogni istanza. AWS IoT Greengrass V2 deve essere fornito ed eseguito su tutte le istanze. Questo tutorial presuppone che AWS IoT Greengrass V2 sia installato su. /greengrass/v2 Se hai scelto un percorso diverso, aggiorna di conseguenza la GG_CLI variabile nello script OCF.

Crea un agente di risorse OCF personalizzato

Crea la directory e lo script personalizzati del Resource Agent su tutte le istanze. Questo esempio gestisce un componente denominatoPythonWebServer.

sudo mkdir -p /usr/lib/ocf/resource.d/custom

Crea lo script del resource agent all'indirizzo /usr/lib/ocf/resource.d/custom/gg-webserver con il seguente contenuto.

#!/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

Rendi eseguibile lo script.

sudo chmod +x /usr/lib/ocf/resource.d/custom/gg-webserver
Nota

L'startazione riavvia l'intero AWS IoT Greengrass V2 servizio, che riavvia tutti i componenti dell'istanza, non solo. PythonWebServer Questo è l'unico percorso di ripristino pratico perché non AWS IoT Greengrass V2 supporta il riavvio di singoli componenti. L'stopazione è intenzionalmente impossibile perché questo agente è un wrapper di monitoraggio: il ciclo di vita del AWS IoT Greengrass V2 servizio è gestito da systemd, non da questo agente. Se un componente persiste BROKEN (ad esempio, a causa di una distribuzione errata), Pacemaker riproverà più migration-threshold volte, quindi bloccherà la risorsa su quel nodo fino alla scadenza. failure-timeout È necessario correggere la causa principale (ad esempio, ridistribuire una versione valida del componente) per interrompere il ciclo di tentativi.

Allega la risorsa

Crea la risorsa Pacemaker utilizzando l'agente OCF personalizzato.

sudo pcs property set stonith-enabled=false
avvertimento

STONITH è disabilitato qui per semplificare questo tutorial. In un ambiente di produzione, è necessario abilitare STONITH e configurare un agente di fencing (ad esempio, per le istanze Amazon EC2) fence_aws per prevenire lo split-brain e il danneggiamento dei dati.

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

Verifica il ripristino

  1. Controlla lo stato iniziale. Verifica che il AWS IoT Greengrass V2 componente sia funzionante e integro su tutte le istanze.

    sudo pcs status
  2. Simula il guasto di un componente. Interrompi il processo del componente per simulare un guasto transitorio. AWS IoT Greengrass V2 potrebbe prima tentare il ripristino interno. Se il componente entra in uno BROKEN stato, Pacemaker lo rileva e avvia il riavvio del servizio. Se AWS IoT Greengrass V2 ripristina il componente internamente, Pacemaker non interviene.

    sudo pkill -f "PythonWebServer" # Wait 30-60 seconds, then check the component state sudo /greengrass/v2/bin/greengrass-cli component details -n=PythonWebServer
  3. Verifica il ripristino. Pacemaker rileva che il componente non è integro ed esegue le fasi di ripristino definite nello script OCF personalizzato. Non è necessario alcun failover: Pacemaker riavvia il servizio sulla stessa istanza.

    Altri servizi, come HAProxy, AWS IoT Greengrass V2 continuano a funzionare normalmente su tutte le istanze. L'applicazione sulle istanze di standby continua a ricevere richieste senza interruzioni.

    sudo pcs status

    Quando l'istanza ripristinata viene ripristinata, il sistema di bilanciamento del carico la identifica e distribuisce le richieste dei client in base alle esigenze.