1 votes

Réinitialisation intermittente de la connexion 104 par un pair dans GCP us-east4

CONTEXTE

J'ai un robot discord qui fonctionne depuis longtemps (plus de 3 ans) écrit en anglais. discord.py qui a toujours fonctionné sur GCP, zone us-east4-a. Le robot fonctionne en k8s en utilisant discord.py 1.7.2 et Python 3.9.

PROBLÈME

Au cours des deux derniers mois, j'ai commencé à voir un nombre croissant d'interruptions de connexion, [Error 104] Connexion réinitialisée par l'homologue. Les réinitialisations ne sont pas directement liées à la quantité d'activité du robot. Elles se produisent de manière intermittente tout au long de la journée en production (toutes les quelques minutes en moyenne).

Ces réinitialisations provoquent des échecs aléatoires de l'API HTTP de discord et entraînent un niveau élevé de déconnexions sur le WebSocket. Un grand nombre de ces déconnexions de shard peuvent reprendre, mais beaucoup (~200 par jour) finissent par donner lieu à un appel IDENTIFY comme une nouvelle connexion et déclenchent parfois des attentes prolongées de backoff et des pannes partielles.

EXEMPLE

Voici un exemple de déconnexion :

Traceback (most recent call last):
  File "/opt/venv/lib/python3.9/site-packages/discord/shard.py", line 187, in reconnect
    self.ws = await asyncio.wait_for(coro, timeout=60.0)
  File "/usr/local/lib/python3.9/asyncio/tasks.py", line 481, in wait_for
    return fut.result()
  File "/opt/venv/lib/python3.9/site-packages/discord/gateway.py", line 305, in from_client
    gateway = gateway or await client.http.get_gateway()
  File "/opt/venv/lib/python3.9/site-packages/discord/http.py", line 967, in get_gateway
    data = await self.request(Route('GET', '/gateway'))
  File "/opt/venv/lib/python3.9/site-packages/discord/http.py", line 192, in request
    async with self.__session.request(method, url, **kwargs) as r:
  File "/opt/venv/lib/python3.9/site-packages/aiohttp/client.py", line 1117, in __aenter__
    self._resp = await self._coro
  File "/opt/venv/lib/python3.9/site-packages/aiohttp/client.py", line 544, in _request
    await resp.start(conn)
  File "/opt/venv/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 890, in start
    message, payload = await self._protocol.read()  # type: ignore
  File "/opt/venv/lib/python3.9/site-packages/aiohttp/streams.py", line 604, in read
    await self._waiter
aiohttp.client_exceptions.ClientOSError: [Errno 104] Connection reset by peer 

UNE EXPÉRIENCE POUR ISOLER LE PROBLÈME

J'ai réalisé une expérience pour isoler la cause du problème. J'ai déployé un conteneur avec mon bot dans une VM (pas de k8s ) et je l'ai isolé de façon à ce qu'il ne communique qu'avec discord (pas de base de données extérieure) et lui envoie automatiquement des commandes pour simuler le comportement et la charge des utilisateurs (j'envoie environ 60 commandes par minute dans le même serveur - bien en dessous de ma charge de production). J'exécute ceci pendant 20 minutes ou jusqu'à ce que j'observe si des réinitialisations de connexion se produisent, et je vois ce qui suit :

  • Sur us-east4-a Je suis capable de reproduire des réinitialisations intermittentes de la connexion.
  • Sur us-east4-b Je suis capable de reproduire des réinitialisations intermittentes de la connexion.
  • Sur us-east4-c Je suis capable de reproduire des réinitialisations intermittentes de la connexion.
  • Sur us-central1-a Je suis je n'arrive pas à reproduire les réinitialisations de connexion (même après 3 heures -- pas de déconnexion de shard du tout).
  • Sur us-east1-b Je suis je n'arrive pas à reproduire les réinitialisations de connexion .
  • Sur mon ordinateur portable (internet résidentiel sur la côte est), je suis je n'arrive pas à reproduire les réinitialisations de connexion .

Toutes les expériences utilisent le même récipient, le même type de machine et la même procédure de test.

J'ai répété l'expérience en us-east4-a avec plusieurs types de machines jusqu'à 8 vCPU et avec les niveaux de réseau premium et standard, et je vois toujours des réinitialisations. J'ai également essayé une autre machine virtuelle dans un projet différent, mais les problèmes de connexion persistent toujours en us-east4 .

J'ai ouvert un dossier d'assistance auprès de GCP car il semble s'agir d'un problème spécifique à une région.

Y a-t-il des expériences supplémentaires que je pourrais fournir pour tenter de réduire la cause de ce problème ? Y a-t-il des problèmes courants de configuration des BPC qui pourraient entraîner ce problème ?

À moins de déménager dans une autre région, j'ai l'impression d'être à court d'options.

0 votes

Pouvez-vous confirmer si votre problème est résolu ou si vous êtes toujours confronté à un problème ?

0voto

Comme mentionné dans le Groupes Google L'équipe de Google Cloud Compute Engine enquête déjà sur ce problème régional survenu sur 'us-east4'. Vous pouvez vous attendre à une autre mise à jour concernant le RCA (le cas échéant) dans le rapport public de suivi des problèmes. N'hésitez pas à faire des commentaires à ce sujet." Comme mentionné dans la mise à jour d'un autre canal de support, la progression de ce problème peut être suivie par le biais du problème public. tracker .

0voto

Pepe T. Points 103

J'ai examiné le suivi du problème public mentionné dans la réponse précédente, mais il est déjà fermé car il manque d'éléments pour reproduire le problème.

En outre, comme nous ne connaissons pas votre configuration VPC ou vos règles de pare-feu, il semble un peu difficile de résoudre le problème avec les informations données.

Ce n'est peut-être pas la solution à votre problème mais je vous recommande de ouvrir un ticket de support avec le support GCP pour que votre problème soit mieux traité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X