使用Systemd在Moonbeam上运行节点¶
概览¶
在基于Moonbeam的网络运行一个全节点使您能够连接至网络,与bootnode节点同步,获得RPC端点的本地访问,在平行链上创建区块,以及更多其他不同的功能。
在本指南中,您将学习如何使用Systemd启动Moonbeam节点,以及如何维护和清理您的节点。
如果您有兴趣自己编译二进制文件(请注意这个过程可能需要超过30分钟并需要32GB内存)您可以查看手动编译Moonbeam二进制文件指南。
查看先决条件¶
以下小节将介绍使用二进制以及作为systemd服务运行Moonbeam全节点的操作流程。开始之前,您需要: - 确认您的Ubuntu版本为18.04,20.04,或22.04。Moonbeam也可能与其他Linux版本相兼容,但目前我们仅测试了Ubuntu版本。 - 确保您的系统满足基本要求。连接至Kusama上的Moonriver或是Polkadot上的Moonbeam,通常需要几天时间来完成中继链内嵌的同步。
下载最新版二进制文件¶
使用wget
快速获取最新发布的二进制文件:
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.1/moonbeam
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.1/moonbeam
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/v0.37.1/moonbeam
您可以在您的终端运行sha256sum
命令来确认您所下载的是否为正确版本,您应该看到以下输出:
dab06bcf32095fdd4f7b8196171dc9ae2a998bb8850e1c147b21fd2f21b7f50e
dab06bcf32095fdd4f7b8196171dc9ae2a998bb8850e1c147b21fd2f21b7f50e
dab06bcf32095fdd4f7b8196171dc9ae2a998bb8850e1c147b21fd2f21b7f50e
运行服务¶
通过以下指令完成所有与服务运行相关的设置:
-
首先,创建一个服务账户
adduser moonbeam_service --system --no-create-home
adduser moonriver_service --system --no-create-home
adduser moonbase_service --system --no-create-home
-
创建一个目录来存储二进制文件和数据(您可能需要
sudo
):mkdir /var/lib/moonbeam-data
mkdir /var/lib/moonriver-data
mkdir /var/lib/alphanet-data
-
将上一小节所创建的二进制文件复制到创建的文件夹中(可能需要
sudo
):mv ./moonbeam /var/lib/moonbeam-data
mv ./moonbeam /var/lib/moonriver-data
mv ./moonbeam /var/lib/alphanet-data
-
在存储链上数据的本地目录设置相应的权限:
sudo chown -R moonbeam_service /var/lib/moonbeam-data
sudo chown -R moonriver_service /var/lib/moonriver-data
sudo chown -R moonbase_service /var/lib/alphanet-data
创建配置文件¶
接下来,创建systemd配置文件。如果您设定的是收集人节点,请确认您使用的是收集人的代码段。
首先您需要创建一个名为/etc/systemd/system/moonbeam.service
的文件来储存配置信息。
请注意,在以下的启动配置中,您需要:
- 将
INSERT_YOUR_NODE_NAME
改成您选择的节名名字。您需要在两个地方更改这个数值:平行链一个,中继链一次 - 用服务器实际RAM的50%替换
INSERT_RAM_IN_MB
。例如服务器有32 GB RAM,这里则应配置为16000
. 内存配置最低值为2000
,但这将低于推荐配置 - 再次检查确认二进制文件是否位于以下正确路径 (ExecStart)
- 如果您使用不同目录,请再次检查基本路径
有关以下启动命令中使用的标志的概述,以及其他常用标志,请参阅我们文档的Flags页面。
全节点¶
[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
--state-pruning=archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
--state-pruning=archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/moonriver-data \
--chain moonriver \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
--state-pruning=archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/alphanet-data \
--chain alphanet \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
允许外部访问您的节点¶
如果您想要运行一个RPC节点,连接至Polkadot.js程序,或是运行您自己的程序,您可以使用--unsafe-rpc-external
参数来运行全节点,这会允许外部程序访问RPC端口。
Moonbeam启动命令实例
[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
--state-pruning=archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "INSERT_YOUR_NODE_NAME" \
--unsafe-rpc-external \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
在前端使用SQL后台¶
Moonbeam节点预装的Frontier 数据库可以修改为使用SQL的后端。Frontier 数据库是 Moonbeam 节点的标准配置,包含以太坊的相关元素,例如交易、区块和日志。由于 eth_getLogs 方法非常耗费资源,与默认的 RocksDB 数据库相比,SQL 后端旨在为索引和查询以太坊日志提供更高性能的选择。
要启动一个使用 Frontier SQL 后端的节点,您需要在启动命令中添加 --frontier-backend-type sql
标志。
您可以使用其他标志来配置 SQL 后端,例如数据池的大小、查询超时等;有关更多信息,请参阅Flags 页面。
Moonbeam启动命令实例
[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
--state-pruning=archive \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "INSERT_YOUR_NODE_NAME" \
--frontier-backend-type sql \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
收集人¶
[Unit]
Description="Moonbeam systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbeam_service
SyslogIdentifier=moonbeam
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonbeam-data/moonbeam \
--collator \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/moonbeam-data \
--chain moonbeam \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonriver systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonriver_service
SyslogIdentifier=moonriver
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/moonriver-data/moonbeam \
--collator \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/moonriver-data \
--chain moonriver \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
[Unit]
Description="Moonbase Alpha systemd service"
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=moonbase_service
SyslogIdentifier=moonbase
SyslogFacility=local7
KillSignal=SIGHUP
ExecStart=/var/lib/alphanet-data/moonbeam \
--collator \
--trie-cache-size 1073741824 \
--db-cache INSERT_RAM_IN_MB \
--base-path /var/lib/alphanet-data \
--chain alphanet \
--name "INSERT_YOUR_NODE_NAME" \
-- \
--name="INSERT_YOUR_NODE_NAME (Embedded Relay)"
[Install]
WantedBy=multi-user.target
运行服务¶
注册并启动服务:
systemctl enable moonbeam.service
systemctl start moonbeam.service
最后,验证服务是否正在运行:
systemctl status moonbeam.service
您也可以执行以下命令检查日志:
journalctl -f -u moonbeam.service
在同步过程中,您既会看到镶嵌中继链([Relaychain])的日志也会看到平行链([🌗])的日志。日志展示了目标区块(实时网络中的state)与最好区块(本地网络同步state)。
注意事项
同步相应的内嵌中继链需要数天的时间,请注意您的系统符合要求。
如果出于任何原因需要停止服务,可以运行:
systemctl stop moonbeam.service
维护您的系统¶
随着Moonbeam网络不断发展,有时需要升级节点软件。升级版本发布后,我们将通过Discord channel通知节点运营者,并告知这些升级是否为必要升级(一些客户端升级为可选操作)。升级过程简单直接,并且对于全节点及收集人,其升级过程一样。
如果您想要更新您的客户端,您可以保持现有的链数据原封不动,只需按照以下步骤更新二进制文件:
-
停止systemd服务
sudo systemctl stop moonbeam.service
-
移除二进制文件的旧版本
rm /var/lib/moonbeam-data/moonbeam
rm /var/lib/moonriver-data/moonbeam
rm /var/lib/alphanet-data/moonbeam
-
从Moonbeam GitHub Release页面获取Moonbeam的最新版本
-
更新版本
wget https://github.com/moonbeam-foundation/moonbeam/releases/download/INSERT_NEW_VERSION_TAG/moonbeam
-
将二进制文件移动到数据目录:
mv ./moonbeam /var/lib/moonbeam-data
mv ./moonbeam /var/lib/moonriver-data
mv ./moonbeam /var/lib/alphanet-data
Note
如果您使用的是手动编译二进制文件,您需要将文件从
./target/release/moonbeam
移至数据目录。 -
更新权限:
chmod +x moonbeam chown moonbeam_service moonbeam
chmod +x moonbeam chown moonriver_service moonbeam
chmod +x moonbeam chown moonbase_service moonbeam
-
启动您的服务
systemctl start moonbeam.service
您可以运行这些命令来查看节点的状态或日志。
清除节点¶
如果您需要Moonbeam节点的新实例,您可以通过删除相关联的数据目录来清除您的节点。
首先,您需要停止systemd服务:
sudo systemctl stop moonbeam
您可以运行以下命令清除您的平行链和中继链数据:
sudo rm -rf /var/lib/moonbeam-data/*
sudo rm -rf /var/lib/moonriver-data/*
sudo rm -rf /var/lib/alphanet-data/*
仅为指定链移除平行链数据,您可运行以下命令:
sudo rm -rf /var/lib/moonbeam-data/chains/*
sudo rm -rf /var/lib/moonriver-data/chains/*
sudo rm -rf /var/lib/alphanet-data/chains/*
同样地,仅移除中继链数据,您可运行以下命令:
sudo rm -rf /var/lib/moonbeam-data/polkadot/*
sudo rm -rf /var/lib/moonriver-data/polkadot/*
sudo rm -rf /var/lib/alphanet-data/polkadot/*
现在您的链数据已被清除,您可以使用新的数据目录启动一个新节点。您可以通过重复本教程的步骤安装最新版本。确保您所使用的是最新可用标签,您可以在Moonbeam GitHub Release 页面上找到该标签。
注意事项
根据需要,Moonbase Alpha可能被会清除和重置。在这些情况下,您需要清除平行链数据和中继链数据。如果需要清除,将通过Discord channel提前通知节点运营商。
| Created: December 2, 2021