Tempo Limite de Inatividade do Relay no Mastodon: Como Detectar Conexões Obsoletas
🔍 WiseChecker

Tempo Limite de Inatividade do Relay no Mastodon: Como Detectar Conexões Obsoletas

Relays do Mastodon podem parar de encaminhar novas postagens após um período de inatividade. Quando uma conexão de relay fica ociosa, o servidor remoto pode fechar o socket TCP sem aviso. Sua instância Mastodon continua mostrando o relay como conectado no painel de administração, mas nenhum novo conteúdo é transmitido. Este artigo explica como detectar conexões obsoletas de relay e restaurá-las.

Um tempo limite de inatividade ocorre quando o servidor relay fecha uma conexão HTTP ou WebSocket inativa após um período definido. Relays do Mastodon usam conexões de longa duração para enviar postagens públicas de uma instância para outra. Se nenhum dado for trocado por vários minutos, o servidor remoto derruba a conexão. A instância local nem sempre detecta essa queda, deixando o relay em um estado zumbi.

Este guia aborda a causa raiz dos tempos limite de inatividade, os comandos exatos para verificar o status da conexão e as etapas para forçar uma reconexão. Você também aprenderá a monitorar a saúde do relay automaticamente.

Principais Conclusões: Detectando e Corrigindo Conexões Obsoletas de Relay no Mastodon

  • Administração > Relays > Editar relay: Mostra o último push bem-sucedido para um relay. Um relay obsoleto exibirá uma data anterior a 10 minutos.
  • Inspeção da fila do Sidekiq: Use RAILS_ENV=production bundle exec sidekiqmon para ver se os jobs PushRelayWorker estão travados ou falhando.
  • Reconexão manual via console Rails: Execute Relay.find_each(&:subscribe) para forçar todos os relays a restabelecerem suas conexões.

ADVERTISEMENT

Por que as Conexões de Relay do Mastodon Ficam Obsoletas

Relays do Mastodon usam um modelo de push. Quando sua instância publica uma postagem pública, o PushRelayWorker a envia para cada endpoint de relay configurado. O relay então distribui a postagem para todas as instâncias conectadas. Esse push ocorre via HTTP com um cabeçalho keep-alive que instrui ambos os lados a manter a conexão aberta para requisições futuras.

O problema é que muitos servidores relay, especialmente aqueles atrás de balanceadores de carga ou CDNs, impõem tempos limite de inatividade de 30 a 60 segundos. Se sua instância não produzir uma postagem pública dentro dessa janela, o servidor remoto fecha a conexão. O processo local do Mastodon que lida com o push pode não receber o pacote TCP RST ou FIN, então continua acreditando que a conexão está ativa.

Quando a próxima postagem pública chega, o worker tenta enviá-la pelo socket fechado. Isso falha silenciosamente em muitos casos porque o worker não tenta novamente o push. O relay efetivamente para de funcionar até que um administrador faça uma nova inscrição manualmente.

Passos para Detectar e Reconectar Relays Obsoletos do Mastodon

  1. Abra o painel de administração do Mastodon
    Faça login na sua instância Mastodon com uma conta de administrador. Navegue até Preferências > Administração > Relays. Esta página lista todos os relays configurados e mostra a última vez que sua instância enviou com sucesso uma postagem para cada relay.
  2. Verifique o timestamp do último push
    Observe a coluna Último push para cada relay. Se o timestamp for anterior a 10 minutos e sua instância estiver publicando postagens públicas durante esse período, a conexão está obsoleta. Um relay saudável deve mostrar um timestamp dos últimos minutos.
  3. Verifique o status do relay no painel do Sidekiq
    Acesse /sidekiq na sua instância. Clique em Filas e procure pela fila push. Se a fila tiver um acúmulo de jobs ou mostrar jobs PushRelayWorker com alta latência, a conexão do relay pode estar falhando. Uma profundidade de fila acima de 10 é um forte indicador de problema.
  4. Verifique os logs do sistema para erros de conexão
    Conecte-se via SSH ao seu servidor Mastodon. Execute journalctl -u mastodon-sidekiq -n 50 --no-pager e procure por linhas contendo PushRelayWorker ou relay. Procure por mensagens como Connection refused ou Timeout. Elas confirmam uma conexão de relay obsoleta ou quebrada.
  5. Force uma reconexão a partir do console Rails
    Execute cd /home/mastodon/live && RAILS_ENV=production bundle exec rails c. No prompt do Rails, digite Relay.find_each(&:subscribe) e pressione Enter. Este comando dispara uma nova requisição de inscrição para cada relay. Saia do console com exit. Verifique o painel de administração novamente após 30 segundos. O timestamp Último push deve ser atualizado.
  6. Reinicie o Sidekiq se a reconexão falhar
    Se o comando do console Rails não restaurar o relay, reinicie o serviço Sidekiq: sudo systemctl restart mastodon-sidekiq. Isso limpa quaisquer processos worker travados e força uma nova tentativa de conexão na próxima postagem pública.

ADVERTISEMENT

Se os Relays Ainda Desconectarem Após a Reconexão

O servidor relay impõe um tempo limite muito curto

Alguns operadores de relay configuram tempos limite de inatividade tão baixos quanto 15 segundos. Se sua instância publicar menos de uma postagem pública a cada 15 segundos, a conexão será derrubada. A única solução é entrar em contato com o operador do relay e solicitar um tempo limite maior, ou mudar para um relay com uma configuração mais tolerante.

Sua instância está atrás de um proxy reverso que encerra o keep-alive

Nginx ou Apache podem ser configurados para derrubar conexões inativas precocemente. Verifique sua configuração de proxy para diretivas como proxy_read_timeout ou keepalive_timeout. Aumente proxy_read_timeout para 300 segundos e keepalive_timeout para 120 segundos. Em seguida, recarregue o proxy: sudo systemctl reload nginx.

O endpoint do relay mudou ou não está mais ativo

Operadores de relay às vezes movem seu serviço para uma nova URL sem atualizar o endpoint antigo. Remova o relay de Administração > Relays clicando no botão Excluir. Em seguida, adicione o relay novamente usando a URL correta fornecida pelo operador.

Relay do Mastodon vs Federação Direta: Comportamento da Conexão

Item Relay Federação Direta
Tipo de conexão Push HTTP persistente para o servidor relay HTTPS POST de curta duração por destino de entrega
Impacto do tempo limite de inatividade Conexão cai silenciosamente; sem nova tentativa Cada entrega é independente; nenhuma conexão persistente a perder
Método de detecção Verificar timestamp Último push no painel de administração Verificar jobs com falha no Sidekiq ou logs de entrega
Recuperação Reconexão manual via console Rails ou reinicialização Nova tentativa automática pelo Sidekiq com backoff exponencial
Melhor para Instâncias pequenas que desejam ver todas as postagens públicas de um tópico Instâncias que precisam de entrega confiável para usuários remotos específicos

Agora você pode identificar conexões obsoletas de relay do Mastodon verificando o timestamp Último push no painel de administração e inspecionando a fila de push do Sidekiq. Use o comando do console Rails Relay.find_each(&:subscribe) para forçar uma reconexão sem reiniciar serviços. Para prevenção de longo prazo, considere adicionar um cron job que execute o comando de reconexão a cada cinco minutos para se recuperar automaticamente de tempos limite de inatividade antes que causem atrasos visíveis.

ADVERTISEMENT