Cosmovisor

Cosmovisor 是一个为基于 Cosmos SDK 的区块链设计的进程管理器,简化了二进制(链)升级的管理。本文提供了逐步的说明,帮助您为 Injective 网络节点设置 Cosmovisor。

Note: 这些说明假设您已经拥有现有的链二进制文件(例如 injectived)以及一个正常工作的 Go 环境,如果您选择从源代码安装 Cosmovisor。根据您的具体设置,调整名称和路径。


目录


安装

通过Go安装

如果您已安装 Go,可以使用以下命令安装 Cosmovisor:

go install cosmossdk.io/tools/cosmovisor/cmd/[email protected]

Tip: 确保您的 Go 二进制安装路径(通常是 $GOPATH/bin 或 $HOME/go/bin)已添加到系统的 PATH 中。您可以通过运行以下命令来验证安装:

which cosmovisor

环境变量

设置以下环境变量,以便 Cosmovisor 知道要运行哪个二进制文件以及在哪里找到它:

  • DAEMON_NAME 您的链二进制文件的名称(例如,injectived)。

  • DAEMON_HOME 您的节点的主目录(例如,~/.injectived)。

您可以在 shell 配置文件中设置这些变量(如 ~/.bashrc~/.profile),或者直接在终端会话中导出它们:

export DAEMON_NAME=injectived
export DAEMON_HOME=~/.injectived

目录结构

Cosmovisor 期望在您的节点主目录中具有特定的文件夹结构:

  1. 创建 Genesis 目录 此目录存放初始(genesis)二进制文件。

mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
  1. 复制当前二进制文件 将当前的链二进制文件(例如,injectived)放入 genesis 文件夹中。确保文件名与 DAEMON_NAME 值匹配(见下节)。

cp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectivedcp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectived

运行 Cosmovisor

不要直接运行链的二进制文件,而是通过执行以下命令启动您的节点:

cosmovisor run start

Cosmovisor 将会:

  • $DAEMON_HOME/cosmovisor/genesis/bin(或适当的升级文件夹)中查找二进制文件。

  • 使用该二进制文件启动您的节点。

  • 监控任何链上的升级信号,并在需要时自动切换二进制文件。


处理链升级

当链上宣布升级时,准备新二进制文件,以便 Cosmovisor 可以自动切换到它:

  1. 创建升级目录 使用链上提供的升级名称(例如,v1.14.0):

mkdir -p $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
  1. 放置新二进制文件 编译或下载新二进制文件,然后将其复制到升级目录中。确保二进制文件名与 DAEMON_NAME 匹配。

cp /path/to/new/injectived $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
cp /path/to/new/libwasmvm.x86_64.so $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin

TIP: 如果您从 GitHub 下载了 injectived 二进制包,我们会将 libwasmvm.x86_64.so 复制到升级 bin 目录。稍后将向 systemd 服务添加一个环境变量,将此目录添加到 LD_LIBRARY_PATH 中。

  1. 升级过程 当达到升级高度时,Cosmovisor 会检测到计划的升级,并自动切换到相应升级文件夹中的二进制文件。

当链上宣布升级时,准备新二进制文件,以便 Cosmovisor 可以自动切换到它。


将 Cosmovisor 作为 Systemd 服务运行

在生产环境中,通常将节点作为 systemd 服务运行。以下是一个示例服务文件。

  1. 创建服务文件

    创建一个文件(例如,/etc/systemd/system/injectived.service),并添加以下内容。根据实际情况调整路径和 <your_username>

[Unit]
Description=Injective Daemon managed by Cosmovisor
After=network-online.target

[Service]
User=<your_username>
ExecStart=/home/<your_username>/go/bin/cosmovisor run start
Restart=always
RestartSec=3
Environment="DAEMON_NAME=injectived"
Environment="DAEMON_HOME=/home/<your_username>/.injectived"
Environment="PATH=/usr/local/bin:/home/<your_username>/go/bin:$PATH"
Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="LD_LIBRARY_PATH=/home/<your_username>/.injectived/cosmovisor/current/bin"

[Install]
WantedBy=multi-user.target
  1. 启用并启动服务

    sudo systemctl daemon-reload
    sudo systemctl enable injectived.service
    sudo systemctl start injectived.service
  2. 检查日志

    确认您的服务运行顺利:

    journalctl -u injectived.service -f

Last updated