Description
Nous avons observé un incident de démarrage ponctuel dans n8n sur Google Cloud Run avec PostgreSQL sur Cloud SQL (connexion par socket Unix).
Environnement
Version de n8n : 2.32.5
Runtime : Google Cloud Run (Gen2)
Région : europe-west3
Base de données : PostgreSQL sur Cloud SQL
Méthode de connexion : Socket Unix sous /cloudsql
Ce qui s’est passé
Lors d’une fenêtre de démarrage, n8n a enregistré à plusieurs reprises :
Error: timeout exceeded when trying to connect
des traces de pile pointant vers les chemins d’acquisition de connexion pg-pool, @n8n/typeorm et @n8n/db.
Durant cette même fenêtre :
le point de terminaison racine a pu retourner 200
certains appels API ont retourné 500 / latence élevée
les tâches de fond dépendantes de la base de données ont signalé des défaillances
Un redéploiement manuel a été effectué.
Peu de temps après le redéploiement, le service s’est stabilisé et fonctionne normalement depuis.
Bonjour @rgrzesk
« timeout exceeded when trying to connect » provient du délai d’attente d’acquisition de pg-pool, donc le pool n’a jamais fourni de client dans DB_POSTGRESDB_CONNECTION_TIMEOUT, plutôt que la socket Cloud SQL soit inaccessible. DB_POSTGRESDB_POOL_SIZE par défaut à 2, et sur une seule instance Cloud Run, les requêtes de démarrage plus le trafic entrant font la queue derrière ces deux connexions, c’est pourquoi le point de terminaison racine est resté 200 tandis que les appels soutenus par la base de données sont passés à 500. Augmentez les deux sur la révision :
Puis plaquez la concurrence du conteneur Cloud Run à à peu près ce que le pool peut servir (10 à 20), pour qu’une rafale ne puisse pas le dépasser à nouveau. Cloud Run permet 100 connexions par instance à Cloud SQL, donc 10 reste bien en deçà de cela.
Merci ! Je vais configurer CloudRun de cette façon.
Cependant, ce qui m’inquiète — c’est arrivé tout d’un coup et l’instance fonctionne depuis 6 mois, sans aucun problème jusqu’à présent.
Un délai d’expiration d’acquisition pg-pool vous indique qu’aucun client n’est devenu disponible avant l’échéance. Cela ne prouve pas que le pool était trop petit. Parce que cela s’est produit une fois après six mois stables, augmenter le pool peut seulement déplacer la pression vers Cloud SQL.
Alignez la révision affectée avec le graphique de connexion Cloud SQL et le journal de démarrage Cloud Run pour cet horodatage. Si les deux connexions existantes étaient occupées tandis que les requêtes étaient en file d’attente, un pool plus grand ou une concurrence de conteneur plus faible est raisonnable. Si les nouvelles connexions expiraient, la taille du pool n’est pas la cause première.
Modifiez une limite à la fois et gardez la valeur précédente enregistrée. Sinon, l’incident suivant ne vous indiquera pas quel changement a aidé.