部署步骤

📘

加入TG群组

节点升级、Proposal讨论表决、开发者答疑。代表选民参与Vision社区DAO第一线 。
https://t.me/visioncore_nodeupgrade_pa

描述
这里提供了vision底层链的节点搭建流程, 对于想自己搭建vision底层链节点的用户可以参考此处给出的流程方法.

环境

操作系统: Linux
运行环境和工具:

  1. git
  2. JDK1.8 (Oracle JDK1.8)
  3. gradle (gradle 4.10 及以上版本)
  4. ntp或者其他的时间同步服务

推荐配置

CPU:8核心或以上
内存:16G或以上
带宽:50M或以上
磁盘:推荐使用nvme协议的固态磁盘,容量在200G以上

节点部署

方式1: 源码编译部署

(1)创建代码目录

mkdir core

(2) 获取vision-core源码

cd core
git clone https://github.com/vision-consensus/vision-core.git

(3) 编译vision-core项目源码

# 获取源码成功后, 在当前目录下会多出一个名为vision-core 的目录

cd vision-core
gradle build -x test

📘

部署vpioneer 测试网节点

如果是希望部署vpioneer测试环境节点, 可以使用下述命令将源码分支切换到vpioneer再编译项目.

git checkout vpioneer

📘

FullNode.jar

顺利编译完vision-core项目之后, 在当前目录下会生成一个build目录, build目录下面的libs子目录中生成了我们接下来需要用到的核心文件, 该文件名为 FullNode.jar。

在 build/libs 目录下, 除了生成我们部署底层节点需要用到的 FullNode.jar 文件之外, 还会生成一些vision 底层能够使用的工具集文件。 这些文件在我们部署底层节点时并不需要使用到。 在这一节中我们可以忽略这些文件。

为了使整个部署过程的显得清晰和简洁。 强烈建议用户将 FullNode.jar 文件拷贝或者移动到一个专门的目录中。下面的部署步骤我会将 FullNode.jar 文件移动到 /vision/core 目录下。

(4) 运行fullnode节点

mkdir -p /vision/core
cp -a build/libs/FullNode.jar /vision/core/
cd /vision/core/
mkdir configs          # 用于存放待会我们需要获取的节点运行配置文件 
wget -P configs https://vision-mainnet-configs.s3.us-east-2.amazonaws.com/stage001/vision-mainnet.config
nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &

📘

我们可以使用 wget 命令来获取对应网络的配置文件, vision 网络的配置文件可以从如下位置中获取:

主网 :https://vision-mainnet-configs.s3.us-east-2.amazonaws.com/stage001/vision-mainnet.config

vpioneer测试网络 :https://vpioneer-backups.s3.us-east-2.amazonaws.com/configs/vision-vpioneer-fullnode.config

如果我们部署的是vpioneer测试网络节点, 那么我们在编译 vision-core 项目时要先切换到 vpioneer分支。然后在获取配置文件时选择vpioneer测试网络的配置文件. 其他的步骤没有区别.

vision 主网节点对于机器资源的消耗较大。 我们需要分配足够的内存以保证服务的稳定。 我们推荐使用独立的机器来运行visiion 主网节点。为JVM分配的可用内存为物理内存的 60% 到 80% 是一个比较合适的选择.

-XX:+UseConcMarkSweepGC 命令参数表示使用内存分配优化, 我们需要安装 Google 的tcmalloc 库来代替我们系统默认的 glibc maclloc 调用。 在文档的末尾我们给出了相关的实现步骤。

FV节点部署

📘

在vision 网络中, 我们把fullnode 节点称为全节点。 默认情况下, fullnode不会在网络中进行区块的生产, 它只是被动的从其他节点同步区块。

在vision网络中, 区块生产的任务是由FV(First Validator)节点来完成。 如果希望自己的节点承担区块生产的任务并且以此获取相应的奖励, 那么我们可以部署一个FV节点.

🚧

在 vision 网络中, 如果我们要部署一个 FV 节点的话, 那么我们首先必须要有一个 具有 witness 权限的账户。 然后我们在启动命令中将该账户地址对应的私钥作为参数传递给启动命令。我们可以在vision 官方上面链接我们的Vtimes钱包。申请当前登录账户成为 witness 账户。 该事务会燃烧掉该账户900个VS。

FV节点的部署步骤与上面描述的 fullnode 节点部署过程很相似。 它们只是在启动节点的命令中有一些区别。

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar --witness -p <privateKey> -c configs/vision-mainnet.config &

如果我们的FV账户地址设置了 witness_permission 权限并指定其他账户来完成它的产块动作。 那么我们必须在命令中使用 --witness-address 来指定FV账户的地址以及 -p 来指定FV代理账户的私钥。通常情况下我们只需要直接指定FV账户的私钥即可。

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar --witness -p <privateKey> --witness-address -c configs/vision-mainnet.config &

📘

是我们使用的具有 witness 权限的账户地址对应的私钥, 该私钥是一个为65个字符组成的十六进制字符串。 我们只要要用这个字符串替换掉 即可。 记得把尖括号也去掉.

在节点正常启动完成后, 在启动命令的当前目录下会另外生成有 logs, output-directory两个个文件夹, 它们的功能如下:

logs: 节点日志文件
output-directory: 节点的区块数据和当前状态存储位置, 即节点的数据库文件存放位置。

命令行选项参数描述

--witness: 启用节点的FV功能, 当且仅当我们想要运行一个 FV 节点才需要指定。
--witness-address: 指定 FV 节点的产块账户地址,当且仅当我们想要运行一个FV 节点才需要指定。
--log-config: 自定义日志文件存储位置。
-c: 指定节点运行所依赖的配置文件的文件系统路径。
-p: 指定 FV 账户的秘钥。 当且仅当部署 FV 节点才需要指定。

使用秘钥文件

在部署 FV 节点的时候, 如果我们不想使用明文的形式在命令当中指定我们 FV 账户的私钥, 那么我们可以选择使用秘钥文件来完成部署。

🚧

注意: 由于使用秘钥文件部署 FV 节点需要在启动时候输入我们秘钥文件对应的密码,所以我们不能再使用 nohup 后跟启动命令的形式。 推荐使用类似于 screen, tmux 等会话软件来完成部署。

(1) 首先我们需要在我们的配置文件中注释掉 localwitness 配置项, 然后将 localwitnesskeystore 配置项取消注释。 我们需要在 localwitnesskeystore 配置项后面指定我们的秘钥文件的位置。 请留意, 秘钥文件必须放置在我们运行节点启动命令的当前目录或者其子目录下。 比如: 当前工作目录为 /vision/core, 而秘钥文件放置位置为 /vision/core/keystore/localwitnessstore.json , 我们的配置项如下:
localwitnesskeystore = [
"keystore/localwitnesskeystore.json"
]

我们需要使用到 vision-wallet-client 工具中的 RegisterWalllet 命令来生成我们需要的秘钥文件和对应的密码。vision-wallet-client 项目地址: https://github.com/vision-consensus/vision-wallet-client.git

(2) 此时, 我们在启动命令中就不再需要使用 -p 来指定我们的 FV 账户的秘钥了。

java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar --witness -c configs/vision-mainnet.config

(3) 键入启动命令后, 控制台会提示我们输入密码, 此时我们需要键入我们配置的 FV 账户的秘钥文件对应的密码。

日志文件

我们可以修改日志模块的等级以控制日志的输出。 默认的日志模块等级为 INFO ,它可以被如下修改:

log.level = {
root = "DEBUG"
}

该配置项直接添加到配置文件的最外层。
可用的日志等级有: TRACE , DEBUG , INFO , WARN , ERROR

停止节点

ps aux | grep "java -Xmx.*g -XX:+UseConcMarkSweepGC -jar"
kill -15 PID

# 或者

kill -15 $(ps aux | grep "java -Xmx[[:digit:]]\+g -XX:+UseConcMarkSweepGC -jar" | awk '{print $2}')

📘

全节点与固化节点

(1)当前, vision-core集成了全节点与固化节点的功能, 不需要再去额外部署一个固化节点。

(2)可以使用最新的数据镜像来同步我们部署的节点, 这会比我们从头开始去同步节点要快得多。 详细过程请参阅后面的数据快照使用一节。

使用 tcmalloc 优化内存使用

为了优化系统的内存使用, 我们可以使用 Google 的 tcmalloc 库来替换系统默认的 glibc maclloc 库。

安装 tcmalloc , 然后再我们的启动脚本中加上下面列出的环境变量。 tcmalloc 库的路径在不同的Linux 系统分发版中会有所不同。 需要我们根据自己的系统来设定环境变量。

安装 tcmalloc
(1) ubuntu 20.04 LTS/ubuntu 18.04 LTS/ Debian stable

sudo apt-get install libgoogle-perftools4

对应的启动脚本

export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4"
export TCMALLOC_RELEASE_RATE=10

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &

(2) ubuntu 16.04 LTS

sudo apt-get install libgoogle-perftools4

对应启动脚本

export LD_PRELOAD="/usr/lib/libtcmalloc.so.4"
export TCMALLOC_RELEASE_RATE=10

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &

(3) Redhat8(Centos)
首先我们需要添加 epel 源 https://dl.fedoraproject.org/pub/epel/

sudo yum install gperftools-libs

对应启动脚本

export LD_PRELOAD="/usr/lib64/libtcmalloc.so.4"
export TCMALLOC_RELEASE_RATE=10

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &

🚧

启动脚本

启动脚本只是一个简单的 shell 脚本, 它的主要作用是设置我们上面提及到的两个环境变量。 环境变量的添加必须在我们启动节点命令之前, 格式如下(请根据节点的类型和部署方式对应调整服务启动命令):

#!/bin/bash
#
export LD_PRELOAD="/usr/lib64/libtcmalloc.so.4"
export TCMALLOC_RELEASE_RATE=10

nohup java -Xmx12g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c configs/vision-mainnet.config &