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 期望在您的节点主目录中具有特定的文件夹结构:
创建 Genesis 目录 此目录存放初始(genesis)二进制文件。
mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin
复制当前二进制文件 将当前的链二进制文件(例如,
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 可以自动切换到它:
创建升级目录 使用链上提供的升级名称(例如,
v1.14.0
):
mkdir -p $DAEMON_HOME/cosmovisor/upgrades/<upgrade_name>/bin
放置新二进制文件 编译或下载新二进制文件,然后将其复制到升级目录中。确保二进制文件名与
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
中。
升级过程 当达到升级高度时,Cosmovisor 会检测到计划的升级,并自动切换到相应升级文件夹中的二进制文件。
当链上宣布升级时,准备新二进制文件,以便 Cosmovisor 可以自动切换到它。
将 Cosmovisor 作为 Systemd 服务运行
在生产环境中,通常将节点作为 systemd
服务运行。以下是一个示例服务文件。
创建服务文件
创建一个文件(例如,
/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
启用并启动服务
sudo systemctl daemon-reload sudo systemctl enable injectived.service sudo systemctl start injectived.service
检查日志
确认您的服务运行顺利:
journalctl -u injectived.service -f
Last updated