为主网上线做准备:一文速览Libra节点运行指南
本文作者为Libra协会成员之一区块链架构公司Bison Trails。在这篇文章中,Bison Trails分享了Libra节点运作者可以为运行验证者和全节点所做的准备,并给出了三个建议。
作为Libra协会的成员,Bison Trails获得了在Libra测试网上运行首个非Calibra验证者节点的深入体验。在这篇文章中,我们详细介绍了从实践中获得的经验教训,并就如何优化节点性能为其他验证节点运作者提供了建议。
为运行验证节点做准备(简化版)
在详细介绍我们学到的一些经验之前,我们建议你下载并运行Libra网络软件。Libra项目团队在 GitHub上 提供了这个开源软件,并在Libra项目开发人员的站点上提供了优秀的文档。文档内容是Libra区块链的指南,对Move编程语言进行了介绍,详细说明了如何构建和运行验证节点。在这篇文章中,我们不会深入讨论,但是通过Docker运行一个节点的简化版就像检查源代码一样简单,可以参照以下两种形式:
1. 参考 Libra core测试网分类 中“Docker”目录的说明,通过Docker在本地运行
2. 使用Terraform在AWS上运行网络,同样的,可以参考Libra core测试网分类中“Terraform”目录的说明
无论是哪一种情况,你都应该使用代码的测试网分类,因为这更稳定,而且是Libra区块链开发者文档推荐的。
使用上述任何一种方法运行验证节点都比较简单。我们建议你首先通过Docker在本地运行,了解节点的配置,使用Docker logs命令查看其日志,并了解验证节点是如何发现彼此的。一旦你适应了本地环境,Terraform部署将启动一个更逼真的验证者网络,这些验证节点可以通过互联网相互通信。
对于那些已经尝试过使用这两种方法来运行软件的人来说,我们下面的建议将很有意义。
为主网做准备,有这三个方法
接下来,我们将根据我们运行Libra节点的经验和我们之前使用其他区块链网络的经验,给出三个建议。
1. 持久化区块链
当Libra网络启动时,随着账户数量的增加,账本状态将随时间增长,验证交易的执行将创建新的账本状态。存储账本状态的数据库也将相应地增长。重要的是,验证者和全节点能够在重新启动验证者进程的情况下快速恢复——无论出于何种原因。在最坏的情况下,从理论上讲,一个节点总是可以从创世区块开始重新同步整个历史记录,但是这种昂贵且耗时的同步可以通过将区块链存储在一个持久化卷(persistent volume)上来避免。
按照惯例,Libra验证者通常配置为将区块链数据存储在目录“/opt/ Libra /data”中;你可以通过更改/opt/libra/etc/node.config.toml的存储部分来在其他地方存储区块链数据。但是我们建议你使用默认位置。
图1. 推荐的存储配置来自node.config.toml
dir = "/opt/libra/data"
无论你的节点使用哪个系统目录来存储区块链,你都需要在目录树中的特定位置挂载(mount)一个持久化卷。当通过Docker运行时(我们推荐使用Docker),这就像使用—volume(卷)或—mount(挂载)标记来指定挂载细节一样简单。例如,假设你在主机/data上挂载了几个T的持久卷,并且你的配置文件在一个安全卷/libra-config上可用,你可以调用Docker来使用该卷,如下所示:
图2. 使用卷标志进行持久化
$ docker run -v /data:/opt/libra/data -v /config:/opt/libra/etc libra_e2e
实际上,Libra区块链源代码中提供的Terraform模板使用这样的配置将Libra区块链数据存储在一个EBS(弹性块存储)卷中。
在Bison Trails,我们也有专门的系统定期快照区块链数据,如果我们失去了一个卷或者一个特定的数据中心变得不可用(在全世界运行着成千上万的区块链节点,这并不罕见),我们可以快速地用一个新卷启动一个新节点或在一个不同的位置启动一个新节点。也就是说,我们自己的Libra验证节点所做的第一件事就是将区块链目录存储在一个持久的位置,它与这些高级设置的系统是分离的。
2. 指标和警报
在Bison Trails,我们习惯了在运行区块链软件的同时添加一个监控层,这样我们就可以预见并采取网络正常发展所需的任何行动,并可以对所有预料之外的事件做出反应。
以Libra区块链为例,核心开发团队为所有验证者提供了一个有利的开端,他们已经通过Prometheus(普罗米修斯)发布了非常有用的标准。Prometheus是一个非常好的时间序列数据解决方案,正在成为开发团队的黄金度量标准,并可以发出警报。体验这些指标的最佳方法是在开始运行验证者时,通过上面描述的Terraform方法运行验证者网络。正如以下截图所示,它提供了一个即开即用的仪表板,其中包含许多针对个人和网络节点的关键指标。
图3. 附带运作指标和示例仪表板的Libra core
通过在很多网络上运行节点的经验,我们建立了一个相当全面和严格的方法来监控我们的节点。我们在三个大概分类中查看度量指标:
- 系统指标,例如CPU/内存/磁盘利用率
- 区块链节点,例如进程健康状态、节点连接状况、数据传输
- 区块链应用,例如出块速度、交易速率以及验证数据
3. 保护你的密钥
我们给出的最后一个建议和Libra节点的密钥管理有关。首先,要注意的是:验证者密钥管理的操作在不断演变,所以我们在这里所指出的并不能直接用于主网,而是为协会成员和其他节点运作者提供密钥管理的思路。下述方法肯定会变,因为一些关于密钥、密钥循环(key rotation)、HSMs和其他安全问题的操作问题将在未来几个月解决。
Libra验证者目前运行的三个密钥对存储在两个配置文件中:
- 一个存储在/opt/libra/etc/consensus_keypair.config.toml的共识密钥
- 存储在/opt/libra/etc/network_keypair.config.toml的网络身份和签名密钥
1. 限制密钥文件权限:无论用户是谁,验证者进程是唯一需要读取这些文件的进程,并且没有进程需要对它们进行写入,所以我们建议将权限模式设置为“400”,这意味着用户可以读取,而其他人不能读取或写入。
2. 不要接触磁盘:我们建议您至少为Docker图像使用tmpfs卷,并包含引导代码以使配置文件在tmpfs卷上可用。
如果你只是在本地测试验证节点,那么就不需要保护密钥,但是一定要注意区分开发模式和你在生产环境中的活动,以便为启动主网做好准备。