Actualizar su Nodo
Cosmovisor
El SDK de Cosmos proporciona un gestor de procesos conveniente que envuelve el binario crossfid
y puede intercambiar automáticamente nuevos binarios tras una propuesta de actualización de gobernanza exitosa. Cosmovisor es altamente recomendado para operaciones de validador ya que permite:
- Actualizaciones automáticas: Cambia sin problemas a nuevos binarios durante actualizaciones de gobernanza
- Actualizaciones sin tiempo de inactividad: Minimiza el tiempo de inactividad del validador durante actualizaciones de red
- Gestión de respaldos: Respalda automáticamente binarios antiguos (configurable)
- Capacidad de reversión: Puede revertir a versiones anteriores si es necesario
- Integración con systemd: Funciona perfectamente con gestores de servicios del sistema para reinicios automáticos
Para operaciones de validador, Cosmovisor combinado con systemd asegura MTTR (Tiempo Medio de Recuperación) < 2 minutos, lo cual es crítico para mantener alta disponibilidad del validador y evitar penalidades de slashing.
Más información puede encontrarse en documentos de cosmos.network y cosmos-sdk/cosmovisor/readme.
Configuración
Instalar Cosmovisor
- Instale la última versión de Cosmovisor:
# Instalar desde fuente
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
# Verificar instalación
cosmovisor version - Nota: Asegúrese de tener Go 1.19+ instalado para la última versión.
Establecer Variables de Entorno
- Configure las variables de entorno de Cosmovisor:
# Agregar a su perfil de shell (~/.bashrc, ~/.zshrc, o ~/.profile)
echo "# Setup 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 cambios
source ~/.profile - Variables de Entorno Explicadas:
DAEMON_RESTART_AFTER_UPGRADE=true
: Reiniciar automáticamente después de actualizacionesDAEMON_ALLOW_DOWNLOAD_BINARIES=false
: Deshabilitar descargas automáticas de binarios (recomendado por seguridad)UNSAFE_SKIP_BACKUP=false
: Mantener respaldos de binarios antiguos
Crear Estructura de Directorios
- Configure la estructura de directorios requerida de Cosmovisor:
# Crear directorios
mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
mkdir -p $DAEMON_HOME/cosmovisor/upgrades
# Copiar binario actual
cp $(which crossfid) $DAEMON_HOME/cosmovisor/genesis/bin/
# Verificar configuración
cosmovisor version
ls -la $DAEMON_HOME/cosmovisor/ - La estructura de directorios debe verse así:
~/.crossfi/cosmovisor/
├── current -> genesis or upgrades/<name>
├── genesis
│ └── bin
│ └── crossfid
└── upgrades
└── <upgrade_name>
└── bin
└── crossfid
Probar Cosmovisor
- Pruebe que Cosmovisor puede ejecutar su nodo:
# Probar cosmovisor (debe mostrar la misma versión que crossfid)
cosmovisor version
# Iniciar nodo con cosmovisor (para prueba)
cosmovisor run start --help - ⚠️ Importante: No ejecute
cosmovisor run start
aún si planea usar systemd - lo configuraremos a continuación.
Preparar una Actualización
Cosmovisor monitoreará continuamente el $DAEMON_HOME/data/upgrade-info.json
para nuevas instrucciones de actualización. Cuando una actualización esté lista, los operadores de nodos pueden descargar el nuevo binario y colocarlo bajo $DAEMON_HOME/cosmovisor/upgrades//bin
donde `` es el nombre codificado en URI de la actualización según se especifica en el plan del módulo de actualización.
Es posible que Cosmovisor descargue automáticamente el nuevo binario. Para hacer esto establezca la siguiente variable de entorno.
export DAEMON_ALLOW_DOWNLOAD_BINARIES=true
Cosmovisor con systemd
Para operaciones de validador en producción, es esencial ejecutar Cosmovisor como un servicio del sistema para asegurar reinicios automáticos y mantener alta disponibilidad.
¿Por qué systemd + Cosmovisor?
🔄 Recuperación Automática
- Reinicia el nodo inmediatamente después de caídas
- Mantiene MTTR < 2 minutos
- Reduce el riesgo de slashing por tiempo de inactividad
- Funciona durante reinicios del sistema
⚙️ Beneficios de Producción
- Gestión profesional de servicios
- Registro integrado con journald
- Aplicación de límites de recursos
- Gestión de dependencias
Configuración del Servicio systemd
Crear Archivo de Servicio
- Cree un archivo de servicio systemd para su validador CrossFi:
sudo nano /etc/systemd/system/crossfid.service
- Agregue la siguiente configuración (reemplace
<username>
con su nombre de usuario 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 Servicio
- Opciones de Configuración Clave:
Restart=always
: Siempre reiniciar el servicio si se detieneRestartSec=3
: Esperar 3 segundos antes de reiniciarLimitNOFILE=4096
: Establecer límite de descriptor de archivoAfter=network-online.target
: Esperar conectividad de red
- Variables de Entorno:
DAEMON_ALLOW_DOWNLOAD_BINARIES=false
: Mejor práctica de seguridadDAEMON_RESTART_AFTER_UPGRADE=true
: Auto-reiniciar después de actualizacionesDAEMON_LOG_BUFFER_SIZE=512
: Optimizar rendimiento de registro
Habilitar e Iniciar Servicio
- Habilite e inicie el servicio CrossFi:
# Recargar configuración de systemd
sudo systemctl daemon-reload
# Habilitar servicio para iniciar en el arranque
sudo systemctl enable crossfid.service
# Iniciar el servicio
sudo systemctl start crossfid.service
# Verificar estado del servicio
sudo systemctl status crossfid.service
Monitorear y Gestionar
- Comandos esenciales de monitoreo:
# Ver registros en vivo
sudo journalctl -u crossfid.service -f
# Ver registros recientes
sudo journalctl -u crossfid.service --since "1 hour ago"
# Verificar estado del servicio
sudo systemctl status crossfid.service
# Reiniciar servicio (si es necesario)
sudo systemctl restart crossfid.service
# Detener servicio
sudo systemctl stop crossfid.service
Probar Reinicio Automático
Probar Recuperación de Proceso
- Termine el proceso crossfid para probar el reinicio automático:
# Encontrar el ID del proceso crossfid
ps aux | grep crossfid
# Terminar el proceso (reemplace PID con el ID de proceso real)
sudo kill -9 <PID>
# Verificar que systemd lo reinicie en segundos
sudo systemctl status crossfid.service - Comportamiento esperado: El servicio debe reiniciarse dentro de 3 segundos.
Monitorear Tiempo de Recuperación
- Monitoree los registros para confirmar recuperación rápida:
# Observar registros en tiempo real durante la prueba
sudo journalctl -u crossfid.service -f - Debe ver:
- Terminación de proceso registrada
- Reinicio automático iniciado
- Nodo reanudando operaciones
- Tiempo de inactividad total < 10 segundos
Probar Persistencia de Reinicio
- Verifique que el servicio inicie automáticamente después del reinicio del sistema:
# Verificar si el servicio está habilitado
sudo systemctl is-enabled crossfid.service
# Debe devolver: enabled - Después de un reinicio del sistema, verifique que el servicio inicie automáticamente:
sudo systemctl status crossfid.service
Configuración Avanzada
Límites de Recursos
Para validadores de alto rendimiento, considere límites de recursos adicionales:
[Service]
# Límites de memoria (ajustar basado en su sistema)
MemoryMax=8G
MemoryHigh=6G
# Límites de CPU (opcional)
CPUQuota=200%
# Límites de I/O (opcional)
IOWeight=500
# Límites de proceso
LimitNPROC=32768
LimitNOFILE=65536
Configuración de Registro
Configure opciones avanzadas de registro:
[Service]
# Registrar a archivo específico (opcional)
StandardOutput=journal+console
StandardError=journal+console
# Variables de entorno adicionales
Environment="DAEMON_LOG_BUFFER_SIZE=1024"
Environment="DAEMON_LOG_LEVEL=info"
Endurecimiento de Seguridad
Para mayor seguridad, agregue estas opciones:
[Service]
# Ejecutar con privilegios restringidos
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/home/<username>/.crossfi
# Restricciones de red
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
Solución de Problemas
- 🚫 El Servicio No Inicia
- ⏱️ Tiempos de Reinicio Lentos
- 📊 Gestión de Registros
Problemas comunes y soluciones:
- Problemas de permisos: Asegúrese de que el usuario tenga acceso a todas las rutas
- Binario no encontrado: Verifique que cosmovisor y crossfid estén en PATH
- Variables de entorno: Verifique que todas las variables requeridas estén establecidas
# Depurar inicio del servicio sudo systemctl status crossfid.service -l sudo journalctl -u crossfid.service --since "10 minutes ago"
Si los tiempos de reinicio exceden 10 segundos:
- Reducir
RestartSec
a 1 segundo (mínimo recomendado) - Verificar rendimiento de I/O del sistema
- Asegurar suficiente RAM disponible
- Monitorear uso de CPU durante reinicio
# Monitorear recursos del sistema htop iostat -x 1 free -h
Gestionar almacenamiento y rotación de registros:
# Limitar tamaño del journal (agregar a /etc/systemd/journald.conf) SystemMaxUse=1G SystemMaxFileSize=100M SystemMaxFiles=10 # Aplicar cambios sudo systemctl restart systemd-journald # Limpiar registros antiguos sudo journalctl --vacuum-time=7d
Para validadores de misión crítica, considere configurar alertas de monitoreo que le notifiquen si el servicio se reinicia frecuentemente, indicando posibles problemas subyacentes.
Actualización Manual de Software
Primero, detenga su instancia de crossfid
. A continuación, actualice el software:
cd gaia
git fetch --all && git checkout
make install
¡Su nodo completo ha sido actualizado limpiamente! Si no hay cambios que rompan la compatibilidad, entonces puede simplemente reiniciar el nodo ejecutando:
crossfid start
Actualizar Archivo Genesis
Para actualizar el archivo genesis, puede obtenerlo de una fuente confiable o exportarlo localmente.
Obtener de una Fuente Confiable
Si se está uniendo a la mainnet, obtenga el genesis del repositorio mainnet. Si se está uniendo a una testnet pública, obtenga el genesis de la testnet apropiada en el repositorio testnet. De lo contrario, obténgalo de su fuente confiable.
Guarde el nuevo genesis como new_genesis.json
. Luego reemplace el genesis.json
antiguo con new_genesis.json
cd $HOME/.crossfi/config
cp -f genesis.json new_genesis.json
mv new_genesis.json genesis.json
Exportar Estado a un Nuevo Genesis Localmente
Si estaba ejecutando un nodo en la versión anterior de la red y quiere construir su nuevo genesis localmente desde un estado de esta red anterior, use el siguiente comando:
cd $HOME/.crossfi/config
crossfid export --for-zero-height --height=<export-height> > new_genesis.json
El comando anterior toma un estado a cierta altura <export-height>
y lo convierte en un nuevo archivo genesis que puede usarse para iniciar una nueva red.
Luego, reemplace el genesis.json
antiguo con new_genesis.json
.
cp -f genesis.json new_genesis.json
mv new_genesis.json genesis.json
En este punto, es posible que quiera ejecutar un script para actualizar el genesis exportado a un genesis que sea compatible con su nueva versión. Por ejemplo, los atributos de un tipo Account
cambiaron, un script debería consultar la cuenta codificada del almacén de cuentas, desenmascararlas, actualizar su tipo, re-enmascarar y re-almacenarlas. Puede encontrar un ejemplo de tal script aquí.
Restablecer Datos
crossfid unsafe-reset-all
. Nunca debe usar este comando si no está cambiando chain-id
. :::priv_validator.json
único. No copie el priv_validator.json
de un nodo antiguo a múltiples nodos nuevos. Ejecutar dos nodos con el mismo priv_validator.json
causará que sea penalizado por doble firma! :::Primero, remueva los archivos desactualizados y restablezca los datos. Si está ejecutando un nodo validador, asegúrese de entender lo que está haciendo antes de restablecer.
crossfid unsafe-reset-all
Su nodo ahora está en un estado prístino mientras mantiene el priv_validator.json
y config.toml
originales. Si tenía nodos centinela o nodos completos configurados antes, su nodo seguirá intentando conectarse a ellos, pero puede fallar si no han sido actualizados también.