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à.
Risoluzione della sincronizzazione della coda sospesa di RabbitMQ
In un'implementazione cluster Amazon MQ per RabbitMQ, i messaggi pubblicati in ogni coda vengono replicati su tre nodi del broker. Questa replica, denominata mirroring, fornisce alta disponibilità per i broker RabbitMQ. Le code in un'implementazione cluster sono costituite da una replica principale su un nodo e uno o più mirror. Ogni operazione applicata a una coda sottoposta a mirroring, inclusi i messaggi di accodamento, viene prima applicata alla coda principale e quindi replicata attraverso i relativi mirror.
Ad esempio, si consideri una coda sottoposta a mirroring replicata su tre nodi: il nodo principale (main
) e due mirror (mirror-1
e mirror-2
). Se tutti i messaggi in questa coda sottoposta a mirroring vengono propagati correttamente a tutti i mirror, la coda viene sincronizzata. Se un nodo (mirror-1
) diventa non disponibile per un dato intervallo di tempo, la coda è comunque operativa e può continuare ad accodare i messaggi. Tuttavia, per sincronizzare la coda, i messaggi pubblicati in main
mentre mirror-1
non è disponibile devono essere replicati in mirror-1
.
Per ulteriori informazioni sul mirroring classico, consultare Code classiche sottoposte a mirroring
Manutenzione e sincronizzazione delle code
Durante le finestre di manutenzione, Amazon MQ esegue tutti i lavori di manutenzione su un nodo alla volta per garantire che il broker rimanga operativo. Di conseguenza, potrebbe essere necessario sincronizzare le code quando ogni nodo riprende l'operazione. Durante la sincronizzazione, i messaggi che devono essere replicati nei mirror vengono caricati in memoria dal volume Amazon Elastic Block Store (Amazon EBS) corrispondente per essere elaborati in batch. L'elaborazione dei messaggi in batch consente alle code di sincronizzarsi più velocemente.
Se le code vengono mantenute brevi e i messaggi sono piccoli, le code si sincronizzano correttamente e riprendono l'operazione come previsto. Tuttavia, se la quantità di dati in un batch si avvicina al limite di memoria del nodo, il nodo genera un allarme di memoria elevata, sospendendo la sincronizzazione della coda. È possibile confermare l'utilizzo della memoria confrontando i parametri del nodo del broker RabbitMemUsed e RabbitMqMemLimit in CloudWatch. La sincronizzazione non può essere completata finché i messaggi non vengono consumati o eliminati o il numero di messaggi nel batch non viene ridotto.
Nota
La riduzione delle dimensioni del batch di sincronizzazione della coda può comportare un numero maggiore di transazioni di replica.
Per risolvere una sincronizzazione della coda in pausa, attenersi alla procedura descritta in questo tutorial, in cui viene illustrata l'applicazione di una policy ha-sync-batch-size
, quindi riavviare la sincronizzazione della coda.
Argomenti
Prerequisiti
Per questo tutorial, è necessario disporre di un utente per il broker Amazon MQ per RabbitMQ con autorizzazioni di amministratore. È possibile utilizzare l'utente amministratore creato al momento della creazione del broker o un altro utente che potrebbe essere stato creato successivamente. Nella tabella seguente vengono forniti i tag dell'utente amministratore necessari e le autorizzazioni come modelli di espressione regolare (regexp).
Tag | Lettura di regexp | Configurazione di regexp | Scrittura di regexp |
---|---|---|---|
administrator |
.* |
.* |
.* |
Per ulteriori informazioni sulla creazione di utenti RabbitMQ e sulla gestione di tag e autorizzazioni degli utenti, consultare Amazon MQ per gli utenti del broker RabbitMQ.
Fase 1: applicare una policy ha-sync-batch-size
Nelle procedure seguenti viene illustrato l'aggiunta di una policy applicabile a tutte le code create nel broker. È possibile utilizzare la console Web RabbitMQ o l'API di gestione RabbitMQ. Per ulteriori informazioni, consultare Plugin di gestione
Applicazione di una policy ha-sync-batch-size
utilizzando la console Web RabbitMQ
-
Accedere alla console Amazon MQ
. -
Nel pannello di navigazione a sinistra selezionare Brokers (Broker).
-
Nell'elenco dei broker, scegliere il nome del broker a cui si desidera applicare la nuova policy.
-
Alla pagina de broker, nella sezione Connections (Connessioni), scegliere l'URL della console Web RabbitMQ. La console Web RabbitMQ si apre in una nuova scheda o finestra del browser.
-
Accedi alla console Web RabbitMQ con le credenziali di accesso dell'amministratore del broker.
-
Nella console Web RabbitMQ, nella parte superiore della pagina, selezionare Admin (Amministratore).
-
Alla pagina Admin (Amministratore), nel pannello di navigazione destro, selezionare Policies (Policy).
-
Alla pagina Policies (Policy), comparirà un elenco delle policy dell'utente connesso del broker. Sotto User policies (Policy utente), espandere Add / update a policy (Aggiungere/aggiornare una policy).
Nota
Per impostazione predefinita, i cluster Amazon MQ per RabbitMQ vengono creati con una policy del broker iniziale denominata
ha-all-AWS-OWNED-DO-NOT-DELETE
. Amazon MQ gestisce questa policy per garantire che ogni coda del broker venga replicata su tutti e tre i nodi e che le code vengano sincronizzate automaticamente. -
Per creare una nuova policy del broker, in Add / update a policy (Aggiungere/aggiornare una policy), effettua le seguenti operazioni:
-
Per Name (Nome), immettere un nome per la policy, ad esempio
batch-size-policy
. -
Per Pattern (Modello), inserisci il modello regexp
.*
in modo che la policy corrisponda a tutte le code nel broker. -
Per Apply to (Applica a), scegliere Exchanges and queues (Scambi e code) dall'elenco a discesa.
-
Per Priority (Priorità), immettere un numero intero maggiore di tutte le altre policy applicate al vhost. È possibile applicare esattamente un set di definizioni di policy alle code e agli scambi di RabbitMQ in qualsiasi momento. RabbitMQ sceglie la policy corrispondente al valore di priorità più alto. Per ulteriori informazioni sulle priorità delle policy e su come combinare le policy, consultare Policy
nella documentazione del server RabbitMQ. -
Per Definition (Definizione), aggiungere le seguenti coppie chiave-valore:
-
ha-sync-batch-size
=100
. Scegliere Number (Numero) dall'elenco a discesa.Nota
Potrebbe essere necessario regolare e calibrare il valore di
ha-sync-batch-size
in base al numero e alle dimensioni dei messaggi non sincronizzati nelle code. -
ha-mode
=all
. Scegliere String (Stringa) dall'elenco a discesa.Importante
La definizione
ha-mode
è necessaria per tutte le policy correlate all'alta disponibilità. L'omissione si traduce in un errore di convalida. -
ha-sync-mode
=automatic
. Scegliere String (Stringa) dall'elenco a discesa.Nota
La definizione
ha-sync-mode
è necessaria per tutte le policy personalizzate. Se omessa, Amazon MQ aggiunge automaticamente la definizione.
-
-
Scegliere Add / update policy (Aggiungi/aggiorna policy).
-
-
Verificare che la nuova policy sia visualizzata nell'elenco delle policy dell'utente.
Applicazione di una policy ha-sync-batch-size
utilizzando l'API di gestione RabbitMQ
-
Accedere alla console Amazon MQ
. -
Nel pannello di navigazione a sinistra selezionare Brokers (Broker).
-
Nell'elenco dei broker, scegliere il nome del broker a cui si desidera applicare la nuova policy.
-
Alla pagina del broker, nella sezione Connections (Connessioni), prendere nota dell'URL della Console Web RabbitMQ. Questo è l'endpoint del broker che si utilizza in una richiesta HTTP.
-
Aprire un nuovo terminale o una finestra della riga di comando a scelta.
-
Per creare una nuova policy del broker, inserisci il seguente comando
curl
. Questo comando presuppone una coda sul vhost predefinito/
, che è codificato come%2F
.Nota
Sostituisci
nome utente
epassword
con le credenziali di accesso dell'amministratore del broker. Potrebbe essere necessario regolare e calibrare il valore diha-sync-batch-size
(100
) in base al numero e alle dimensioni dei messaggi non sincronizzati nelle code. Sostituire l'endpoint del broker con l'URL annotato in precedenza.curl -i -u
username
:password
-H "content-type:application/json" -XPUT \ -d '{"pattern":".*", "priority":1, "definition":{"ha-sync-batch-size":100
, "ha-mode":"all", "ha-sync-mode":"automatic"}}' \ https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com
/api/policies/%2F/batch-size-policy
-
Per confermare che la nuova policy sia stata aggiunta alle policy dell'utente del broker, inserisci il comando
curl
per elencare tutte le policy del broker.curl -i -u
username
:password
https://b-589c045f-f8ln-4ab0-a89c-co62e1c32ef8.mq.us-west-2.amazonaws.com
/api/policies
Fase 2: riavviare la sincronizzazione della coda
Dopo aver applicato una nuova policy ha-sync-batch-size
al broker, riavviare la sincronizzazione della coda.
Riavvio della sincronizzazione della coda utilizzando la console Web RabbitMQ
Nota
Per aprire la console Web RabbitMQ, consultare le istruzioni precedenti della fase 1 di questo tutorial.
-
Nella console Web RabbitMQ, nella parte superiore della pagina, selezionare Queues (Code).
-
Alla pagina Queues (Code), in All queues (Tutte le code), individuare le code sospese. Nella colonna Features (Caratteristiche), la coda dovrebbe elencare il nome della nuova policy creata (ad esempio
batch-size-policy
). -
Per riavviare il processo di sincronizzazione con una dimensione batch ridotta, scegliere Restart sync (Riavvia sincronizzazione).
Nota
Se la sincronizzazione si interrompe e non viene completata correttamente, provare a ridurre il valore ha-sync-batch-size
e riavviare nuovamente la sincronizzazione della coda.
Fasi successive
-
Una volta sincronizzata correttamente la coda, è possibile monitorare la quantità di memoria utilizzata dai nodi RabbitMQ visualizzando il parametro Amazon CloudWatch
RabbitMQMemUsed
. È inoltre possibile visualizzare il parametroRabbitMQMemLimit
per monitorare il limite di memoria di un nodo. Per ulteriori informazioni, consulta Accesso ai CloudWatch parametri per Amazon MQ e CloudWatch Metriche disponibili per i broker Amazon MQ for RabbitMQ. -
Per impedire la sincronizzazione delle code sospese, si consiglia di mantenere le code brevi ed elaborare i messaggi. Per carichi di lavoro con messaggi di dimensioni maggiori, si consiglia inoltre di aggiornare il tipo di istanza del broker a una dimensione dell'istanza maggiore con più memoria. Per ulteriori informazioni sui tipi di istanza del broker e sulla modifica delle preferenze del broker, consultare Amazon MQ per i tipi di istanza RabbitMQ e Modifica delle preferenze del broker.
-
Quando crei un broker Amazon MQ per RabbitMQ, Amazon MQ applica un set predefinito di policy e limiti dell'host virtuale per ottimizzare le prestazioni del broker. Se il broker non dispone di policy e limiti predefiniti consigliati, consigliamo di crearli tu stesso. Per ulteriori informazioni sulla creazione di policy e limiti vhost predefiniti, consultare Impostazioni predefinite del broker Amazon MQ per RabbitMQ.
Risorse correlate
-
UpdateBrokerInput: utilizzare questa proprietà del broker per aggiornare un tipo di istanza del broker utilizzando l'API Amazon MQ.
-
Parametri e policy
(Documentazione del server RabbitMQ): ulteriori informazioni sui parametri e sui policy di RabbitMQ sul sito Web di RabbitMQ. -
API HTTP di gestione RabbitMQ
: ulteriori informazioni sull'API di gestione RabbitMQ.