Pular para o conteúdo principal

Atualize seu nó

Cosmovisor​

O Cosmos SDK fornece um gerenciador de processos conveniente que envolve o binário crossfid e pode substituir automaticamente por novos binários após uma proposta de atualização de governança bem-sucedida. O Cosmovisor é altamente recomendado para operações de validador, pois permite:

  • Atualizações automáticas: muda suavemente para novos binários durante atualizações de governança
  • Atualizações sem tempo de inatividade: Minimiza o tempo de inatividade do validador durante atualizações de rede
  • Gerenciamento de backups: Faz backup automático dos binários antigos (configurável)
  • Capacidade de rollback: Pode reverter para versões anteriores, se necessário
  • Integração com o systemd: Funciona perfeitamente com gerenciadores de serviços do sistema para reinicializações automáticas
info

Por que usar o Cosmovisor? Para operações de validador, o Cosmovisor em conjunto com o systemd garante MTTR (Tempo Médio de Recuperação) < 2 minutos, o que é crucial para manter alta disponibilidade do validador e evitar penalidades de slashing.

Mais informações podem ser encontradas na cosmos.network docs e cosmos-sdk/cosmovisor/readme.

Configuração​

Instalar Cosmovisor

  • Instale a versão mais recente do Cosmovisor:

    # Instalar a partir da fonte
    go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest

    # Verificar instalação
    cosmovisor version
  • Observação: Certifique-se de ter o Go 1.19+ instalado para a versão mais recente.

Configurar Variáveis de Ambiente

  • Configurar as variáveis de ambiente do Cosmovisor:

    # Adicionar ao seu perfil de shell (~/.bashrc, ~/.zshrc, ou ~/.profile)
    echo "# Configurar Cosmovisor" >> ~/.profile
    echo "export DAEMON_NAME=crossfid" >> ~/.profile
    echo "export DAEMON_HOME=$HOME/.crossfi" >> ~/.profile
    echo "export DAEMON_RESTART_AFTER_UPGRADE=true" >> ~/.profile
    echo "export DAEMON_ALLOW_DOWNLOAD_BINARIES=false" >> ~/.profile
    echo "export UNSAFE_SKIP_BACKUP=false" >> ~/.profile

    # Aplicar alterações
    source ~/.profile
  • Explicação das Variáveis de Ambiente:

    • DAEMON_RESTART_AFTER_UPGRADE=true: Reiniciar automaticamente após atualizações
    • DAEMON_ALLOW_DOWNLOAD_BINARIES=false: Desativar downloads automáticos de binários (recomendado pela segurança)
    • UNSAFE_SKIP_BACKUP=false: Manter backups dos binários antigos

Criar Estrutura de Diretórios

  • Configurar a estrutura de diretórios necessária do Cosmovisor:

    # Criar diretórios
    mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
    mkdir -p $DAEMON_HOME/cosmovisor/upgrades

    # Copiar binário atual
    cp $(which crossfid) $DAEMON_HOME/cosmovisor/genesis/bin/

    # Verificar configuração
    cosmovisor version
    ls -la $DAEMON_HOME/cosmovisor/
  • A estrutura de diretórios deve parecer com:

    ~/.crossfi/cosmovisor/
    ├── atual -> genesis ou upgrades/<nome>
    ├── genesis
    │ └── bin
    │ └── crossfid
    └── upgrades
    └── <upgrade_name>
    └── bin
    └── crossfid

Teste o Cosmovisor

  • Teste se o Cosmovisor consegue rodar seu nó:

    # Teste o cosmovisor (deve mostrar a mesma versão que o crossfid)
    cosmovisor version

    # Inicie o nó com o cosmovisor (para teste)
    cosmovisor run start --help
  • ⚠️ Importante: não execute cosmovisor run start ainda se você planeja usar systemd - vamos configurar isso a seguir.

Preparando uma atualização​

O Cosmovisor ficará monitorando continuamente o $DAEMON_HOME/data/upgrade-info.json à procura de novas instruções de atualização. Quando uma atualização estiver pronta, os operadores do nó poderão baixar o novo binário e colocá-lo em $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin, onde <upgrade_name> é o nome codificado em URI da atualização, conforme especificado no plano do módulo de atualização.

É possível fazer o Cosmovisor baixar automaticamente o novo binário. Para isso, defina a seguinte variável de ambiente.

export DAEMON_ALLOW_DOWNLOAD_BINARIES=true

Cosmovisor com systemd​

Para operações de validadores em produção, é essencial rodar o Cosmovisor como um serviço do sistema para garantir reinicializações automáticas e manter alta disponibilidade.

Por que systemd + Cosmovisor?​

🔄 Recuperação Automática

  • Reinicia o nó imediatamente após falhas
  • Mantém MTTR < 2 minutos
  • Reduz o risco de slashing por tempo de inatividade
  • Funciona durante reinicializações do sistema

⚙️ Benefícios de Produção

  • Gerenciamento profissional de serviços
  • Log registrado com journald
  • Aplicação de limites de recursos
  • Gerenciamento de dependências

Configuração de Serviço do systemd​

Criar Arquivo de Serviço

  • Crie um arquivo de serviço systemd para o seu validador CrossFi:

    sudo nano /etc/systemd/system/crossfid.service
  • Adicione a seguinte configuração (substitua <username> pelo seu nome de usuário real):

    [Unit]
    Description=CrossFi Daemon (Cosmovisor)
    After=network-online.target
    Wants=network-online.target

    [Service]
    Type=exec
    User=<username>
    Group=<username>
    ExecStart=/home/<username>/go/bin/cosmovisor run start
    Restart=always
    RestartSec=3
    LimitNOFILE=4096
    Environment="DAEMON_NAME=crossfid"
    Environment="DAEMON_HOME=/home/<username>/.crossfi"
    Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
    Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
    Environment="DAEMON_LOG_BUFFER_SIZE=512"
    Environment="UNSAFE_SKIP_BACKUP=false"

    [Install]
    WantedBy=multi-user.target

Configurar Serviço

  • Opções-chave de Configuração
    • Restart=always: Sempre reinicie o serviço se ele parar
    • RestartSec=3: Aguarde 3 segundos antes de reiniciar
    • LimitNOFILE=4096: Definir o limite de descritores de arquivos
    • After=network-online.target: Aguarde conectividade de rede
  • Variáveis de Ambiente
    • DAEMON_ALLOW_DOWNLOAD_BINARIES=false: Segurança como prática recomendada
    • DAEMON_RESTART_AFTER_UPGRADE=true: Reinicialização automática após atualizações
    • DAEMON_LOG_BUFFER_SIZE=512: Otimizar desempenho de registro

Habilitar e Iniciar o Serviço

  • Habilite e inicie o serviço CrossFi:

    # Recarregar a configuração do systemd
    sudo systemctl daemon-reload

    # Habilitar o serviço para iniciar na inicialização
    sudo systemctl enable crossfid.service

    # Iniciar o serviço
    sudo systemctl start crossfid.service

    # Verificar o status do serviço
    sudo systemctl status crossfid.service

Monitorar e Gerenciar

  • Comandos essenciais de monitoramento

    # Visualizar logs em tempo real
    sudo journalctl -u crossfid.service -f

    # Visualizar logs recentes
    sudo journalctl -u crossfid.service --since "há 1 hora"

    # Verificar o status do serviço
    sudo systemctl status crossfid.service

    # Reiniciar o serviço (se necessário)
    sudo systemctl restart crossfid.service

    # Parar o serviço
    sudo systemctl stop crossfid.service

Teste de Reinicialização Automática​

Teste de Recuperação de Processo

  • Mate o processo crossfid para testar a reinicialização automática:

    # Encontrar o ID do processo crossfid
    ps aux | grep crossfid

    # Mata o processo (substitua PID pelo ID real do processo)
    sudo kill -9 <PID>

    # Verifique se o systemd o reinicia dentro de alguns segundos
    sudo systemctl status crossfid.service
  • Comportamento esperado: O serviço deve reiniciar dentro de 3 segundos.

Monitorar Tempo de Recuperação

  • Monitore os logs para confirmar a recuperação rápida:
    # Visualizar logs em tempo real durante o teste
    sudo journalctl -u crossfid.service -f
  • Você deve ver:
    • Terminação do processo registrada
    • Reinicialização automática iniciada
    • Nó retomando operações
    • Tempo total de inatividade < 10 segundos

Teste de Persistência da Reinicialização

  • Verifique se o serviço inicia automaticamente após a reinicialização do sistema:

    # Verificar se o serviço está habilitado
    sudo systemctl is-enabled crossfid.service

    # Deve retornar: enabled
  • Após a reinicialização do sistema, verifique se o serviço inicia automaticamente:

    sudo systemctl status crossfid.service

Configuração Avançada​

Limites de Recursos​

Para validadores de alto desempenho, considere limites adicionais de recursos:

[Service]
# Limites de memória (ajuste conforme o seu sistema)
MemoryMax=8G
MemoryHigh=6G

# Limites de CPU (opcional)
CPUQuota=200%

# Limites de I/O (opcional)
IOWeight=500

# Limites de processo
LimitNPROC=32768
LimitNOFILE=65536

Configuração de Registro​

Configure opções avançadas de registro:

[Service]
# Registrar para arquivo específico (opcional)
StandardOutput=journal+console
StandardError=journal+console

# Variáveis adicionais de ambiente
Environment="DAEMON_LOG_BUFFER_SIZE=1024"
Environment="DAEMON_LOG_LEVEL=info"

Fortalecimento de Segurança​

Para maior segurança, adicione estas opções:

[Service]
# Executar com privilégios restritos
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/home/&lt;username&gt;/.crossfi

# Restrições de rede
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6

Solução de Problemas​

Problemas comuns e soluções:

  • Questões de permissão: Certifique-se de que o usuário tem acesso a todos os caminhos
  • Binário não encontrado: Verifique se o cosmovisor e o crossfid estão no PATH
  • Variáveis de ambiente: Verifique se todas as variáveis obrigatórias estão definidas
# Depuração da inicialização do serviço sudo systemctl status crossfid.service -l sudo journalctl -u crossfid.service --since "há 10 minutos"
dica

Recomendação de Produção Para validadores críticos, considere configurar alertas de monitoramento que informem se o serviço reiniciar com frequência, indicando possíveis problemas subjacentes.

Atualização manual de software​

Primeiro, pare sua instância de `