Come posso risolvere l'errore "psycopg2.OperationalError: SSL connection has been closed unexpectedly error" in Amazon MWAA?
Desidero risolvere l'errore "psycopg2.OperationalError: SSL connection has been closed unexpectedly" in Flusso di lavoro gestito da Amazon per Apache Airflow (Amazon MWAA).
Breve descrizione
Quando esegui il grafo aciclico diretto (DAG) e un'operazione ha esito negativo, potresti ricevere i seguenti messaggi di errore nel log dell'attività:
- "psycopg2.OperationalError: SSL connection has been closed unexpectedly".
- "sqlalchemy.exc.OperationalError: (psycopg2.errors.ConnectionException) Timed-out waiting to acquire database connection".
I messaggi di errore precedenti si verificano quando il worker è sovraccarico o perde la connessione al database dei metadati oppure quando l'attività tenta di riutilizzare una connessione al database chiusa.
Per risolvere il problema, intraprendi le seguenti azioni:
- Riduci l'utilizzo della CPU e della memoria.
- Controlla le configurazioni dei worker.
- Utilizza operatori differibili.
- Rimuovi il codice di primo livello.
- Non utilizzare le variabili Apache Airflow.
- Semplifica il DAG.
- Crea un file .airflowignore e aggiungilo alla cartella DAG principale in Amazon Simple Storage Service (Amazon S3).
Risoluzione
Riduci l'utilizzo della CPU e della memoria
Un pianificatore, un worker o un server web sovraccarico potrebbe non essere in grado di mantenere le connessioni al database attive. Il timeout di connessione inattiva predefinito per i metadati di Amazon Relational Database Service (Amazon RDS) per Apache Airflow è di 30 minuti. Se un'attività o un processo rimane inattivo o non risponde per un periodo di tempo superiore al suddetto periodo, il database potrebbe chiudere la connessione. Per ulteriori informazioni, consulta IdleClientTimeout.
Per verificare le metriche di utilizzo della CPU e della memoria, completa i seguenti passaggi:
- Apri la console Amazon CloudWatch.
- Scegli il namespace AWS/MWAA.
- Nella scheda Tutte le metriche, scegli Cluster.
- Scegli CPUUtilization, quindi Includi nel grafico tutti i risultati di ricerca.
- Scegli la scheda Parametri definiti per visualizzare le metriche delle prestazioni.
- Ripeti i passaggi 1–3, quindi scegli MemoryUtilization.
- Scegli Includi nel grafico tutti i risultati di ricerca, quindi scegli la scheda Parametri definiti per visualizzare le metriche delle prestazioni.
Nota: devi selezionare Massimo per Statistica e 1 minuto per Periodo.
Per ulteriori informazioni, consulta Metriche di container, code e database per Amazon MWAA.
Se l'utilizzo della CPU e della memoria dei worker è costantemente superiore al 90%, ciò significa che i worker sono sovraccarichi o che le attività sono troppo pesanti. L'uso intensivo della CPU e della memoria potrebbe causare problemi con i report sullo stato delle attività, la comunicazione del database dei metadati e le nuove attività.
Per ridurre l'utilizzo della CPU e della memoria dei worker, intraprendi le seguenti azioni:
- Poiché i worker richiedono più risorse durante le fasi iniziali della creazione delle attività, distribuiscine le pianificazioni.
- Restringi le importazioni alle sole attività che le richiedono e rimuovi le importazioni globali che non sono necessarie.
- Utilizza Apache Airflow e Amazon MWAA come strumenti principali. Pianifica le attività rimanenti su servizi come Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Container Service (Amazon ECS) o AWS Glue.
Nota: non elaborare grandi volumi di dati sui worker perché hanno risorse limitate. Utilizza servizi progettati per elaborare grandi volumi di dati. - Riduci i dati trasmessi tra le attività. Quando possibile, suddividi i dati in modo che quelli a valle non cambino a causa di sovraccarichi di lavoro in Amazon MWAA.
Nota: se devi trasferire grandi volumi di dati tra le attività, archivia i dati esternamente e importali secondo necessità. Alcuni operatori utilizzano XCOM. Per ulteriori informazioni, consulta XCOM sul sito web Apache Airflow. - Pulisci regolarmente il database dei metadati.
Nota: l'utilizzo elevato della CPU o la scarsa disponibilità di memoria potrebbe causare l'esito negativo delle query o aumentare la latenza con conseguente errore di eccezione SSL.
Nota: se non riesci a ridurre l'utilizzo della CPU, utilizza una classe di ambiente più ampia con più risorse per i worker oppure ottimizza ulteriormente i worker.
Controlla le configurazioni dei worker
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Ogni versione di Apache Airflow ha valori predefiniti per le configurazioni dei worker. Tuttavia, potresti dover personalizzare le configurazioni in base alle specifiche esigenze.
Imposta le configurazioni di Apache Airflow
Utilizza la console Amazon MWAA, il comando AWS CLI update-environment o una chiamata API UpdateEnvironment per personalizzare le seguenti configurazioni:
- La configurazione celery.worker_autoscale controlla il numero massimo e minimo di attività che possono essere eseguite contemporaneamente su un worker. Riduci il numero massimo di connessioni al database dal worker. Quindi assegna più risorse a ogni attività per un numero minore di attività con le stesse risorse del worker.
- Imposta core.execute_tasks_new_python_interpreter su True per creare un nuovo interprete Python per ogni attività e isolare la connettività del database.
Nota: imposta la configurazione su True solo se l'errore "psycopg2.OperationalError" si ripresenta. - Utilizza la funzionalità di rdimensionamento automatico di Amazon MWAA per aumentare il numero massimo di worker.
Nota: imposta i valori max-workers e celery.worker_autoscale per adattarli al carico di lavoro.
Per ulteriori informazioni, consulta Utilizzo delle opzioni di configurazione di Apache Airflow su Amazon MWAA.
Controlla i log del worker, del pianificatore e del server web
Negli ambienti di produzione, la registrazione dettagliata utilizza risorse non necessarie e aumenta l'utilizzo della CPU. È consigliabile impostare i log del worker, del pianificatore e del server web almeno su AVVERTENZA. Nella maggior parte dei casi, i log INFO non sono necessari.
Utilizza operatori differibili
Utilizza operatori differibili quando le attività inviano processi a sistemi o servizi esterni e attendi che si verifichino eventi, come la creazione di un cluster EMR. Gli operatori differibili liberano gli slot dei worker e aumentano la capacità di carico di lavoro. Per ulteriori informazioni, consulta Deferrable Operators & Triggers (Operatori differibili e trigger) sul sito web Apache Airflow.
Rimuovi il codice di primo livello
Rimuovi il codice di primo livello che utilizza risorse non necessarie dal pianificatore. Inoltre, modifica la configurazione dag_processor.min_file_process_interval in base al caso d'uso. Per ulteriori informazioni, consulta min_file_process_interval e Best practices (Best practice) sul sito web Apache Airflow.
Non utilizzare le variabili Apache Airflow
Non utilizzare le variabili Apache Airflow nel codice Python di primo livello. Quando recuperi le variabili, devi eseguire una query sul database e la query viene eseguita su ogni ciclo di analisi.
Nota: se devi utilizzare variabili, opta per il caching delle variabili. Per ulteriori informazioni, consulta use_cache sul sito web Apache Airflow.
Semplifica il DAG
Semplifica il DAG e testane il codice per la versione Python specifica dell'ambiente Amazon MWAA.
Utilizza la mappatura dinamica delle attività quando necessario. Per ulteriori informazioni, consulta Dynamic Task Mapping (Mappatura dinamica delle attività) sul sito web Apache Airflow.
Crea un file .airflowignore e aggiungilo alla cartella DAG principale in Amazon S3
Il pianificatore Apache Airflow sincronizza il contenuto della cartella DAG tra Amazon S3 e ciascun worker. Il pianificatore analizza inoltre periodicamente i file in Amazon S3 per aggiornare l'interfaccia utente. Quando analizza, il pianificatore esegue i file e genera i DAG.
Utilizza il file .airflowignore per specificare le cartelle e i file dalla cartella DAG in Amazon S3. Devi utilizzare modelli regex e glob. Ignora i file non DAG durante il processo di analisi per ridurre il carico sul pianificatore e migliorare l'efficienza del DAG. Per ulteriori informazioni, consulta .airfowignore sul sito web Apache Airflow.
- Argomenti
- Application Integration
- Lingua
- Italiano
