在Ubuntu上进行Tendermint多节点测试

一、设置Ubuntu软件源。

清华源的设置可以参考如下网址。设置软件镜像源是为了加速一些软件的下载。
Ubuntu设置清华源_ubuntu清华源_there2belief的博客-CSDN博客

二、Golang安装

  1. 下载安装包,目前使用的是go1.19.2版本,用更旧的版本是否会发生错误暂时未知。
    mkdir ~/download
    cd ~/download
    wget https://golang.google.cn/dl/go1.19.2.linux-amd64.tar.gz
    tar -zxvf ./go1.19.2.linux-amd64.tar.gz
  2. 解压go安装包
    mkdir ~/env
    mkdir ~/env/gobin
    mkdir ~/env/gopath
    mv ~/download/go ~/env/
  3. 配置~/.bashrc文件,在文件最后加入如下三行代码(##是注释部分)
    ## 配置须为绝对路径,将yourname改为自己的用户名
    GOROOT=/home/yourname/env/go
    GOBIN=/home/yourname/env/gobin
    export PATH=$PATH:$GOROOT/bin:$GOBIN
    然后使用source ~/.bashrc激活配置文件。
  4. go环境变量配置
    依次执行以下四条命令
    ## 配置须为绝对路径,将yourname改为自己的用户名
    go env -w GOBIN=/home/yourname/env/gobin
    go env -w GOPATH=/home/yourname/env/gopath
    go env -w GOPROXY=https://goproxy.cn,direct
    go env -w GO111MODULE=on
    其中GOPROXY是镜像源,有些go语言包在外网中,直接go get可能会失败。
    GO111MODULE是是否使用go mod配置环境。
    可以通过go env查看上述配置是否成功。

三、建立host映射

使用命令sudo vi /etc/hosts进入hosts文件,输入i可以进入编辑模式,可以按照下图格式设置IP地址映射关系。编辑结束后点击退出键(Esc)退出编辑模式,:wq(保存退出),:q(不保存退出)。
host映射
如果使用上图的映射,ping node0可以测试映射是否建立成功。

四、Visual Studio Code 安装:此步自行完成

五、Tendermint部署

首先设置工作目录
mkdir ~/workspace
进入该目录下:
cd ~/workspace
拉取Tendermint源码:
git clone https://github.com/tendermint/tendermint.git
接着进入Tendermint项目目录:
cd ~/workspace/tendermint
选择合适的分支:
git checkout v0.34.24

六、Tendermint的编译

进入项目目录:
cd ~/workspace/tendermint
编译:make install
编译文件会出现在$GOBIN路径下(如果按照上文配置,这个路径就是/home/yourname/env/gobin)。

七 tm-load-test工具安装

直接拉取相关源码,tm-load-test的版本目前来看影响不大。
git clone https://github.com/informalsystems/tm-load-test.git

  • 编译
    进入目录
    cd tm-load-test/cmd/tm-load-test
    编译
    go build
  • 书写自己的tm-load-test:目录tm-load-test/pkg/loadtest下,参考client_kvstore.go书写,需要实现如下接口:
    tm-load-test接口

八、单节点测试(以kvstore为例)

  1. 配置与启动节点
    初始化:
    tendermint init
    此时会出现文件夹~/.tendermint,其中包含两个文件夹:config和data。config存储配置文件,包括创世区块、addressbook、config.coml等,data存储数据库文件。
    通过以下命令启动单机测试:
    tendermint start --proxy_app=kvstore
    Tendermint命令行有home参数,可以设置目录文件夹,如tendermint init --home ~/tmtest可以在~/tmtest文件夹下创建config和data两个文件夹(无则创建一个tmtest文件夹)。此时,使用命令tendermint start --proxy_app=kvstore --home=~/tmtest可以在对应目录下启动Tendermint。
  2. 其它配置
    共识参数:
  • **create_empty_blocks和create_empty_blocks_interval:**tendermint默认允许产生空块,如果希望tendermint在无交易时不产生区块,则将config.toml文件的406行create_empty_blocks项改为false。create_empty_blocks_interval项在create_empty_blocks项为真时,表明每隔多少时间产生一个空块。
  • **timeout_propose:**propose阶段的超时参数。该项设置较大时,一般不容易出现多个round。
  • **timeout_propose_delta:**每个round的timeout_propose的增量,一般不需要修改。
  • **timeout_prevote:**prevote阶段的超时参数。该项设置较大时,一般不容易出现多个round。
  • **timeout_prevote_delta:**每个round的timeout_prevote的增量,一般不需要修改。
  • **timeout_precommit:**precommit阶段的超时参数。该项设置较大时,一般不容易出现多个round。
  • **timeout_precommit_delta:**每个round的timeout_precommit的增量,一般不需要修改。
  • **timeout_commit:**提交区块后,等待所有节点precommit消息的时间,即使已经有超过2/3的precommit消息,也会继续等待。可以适当减小这个时间。

共识参数
mempool参数

  • **version:**mempool的版本,v0是先进先出内存池,v1是具有优先级的内存池。v1内存池中,旧交易优先级低于新交易,如果mempool已满,会导致mempool一直删除旧交易,所以v1暂时不适合负载测试。
  • **recheck:**每个区块提交后,节点会重新检验内存池中交易是否合法,该选项用以开关该功能。
  • **broadcast:**是否允许peer节点间的内存池广播交换交易。
  • **size:**内存池中最大的交易数量。
  • **max_txs_bytes:**内存池最大字节容量。目前是1GB,已经足够使用。
  • cache_size:缓冲区大小,缓冲区的作用是方式交易重放,在broadcast开启时该项不宜过小,否则会导致相同的交易重复广播于各节点间并重复进入区块。
  • **keep-invalid-txs-in-cache:**不合法交易是否被cache记录。该项为false,表明client可以重新提交相同的交易。
    mempool

3.查询

  • 广播交易:通过如下语句向本机节点广播一个交易。
    curl -s 'localhost:26657/broadcast_tx_commit?tx="abc"'
    一般来说会出现类似如下的命令行
    tendermint命令行
    如果交易被成功包含进区块,会返回以下文本,文本中
    deliver_tx
    字段中有内容。
    成功提交区块
  • **查询账户:**可以通过如下命令查询kvstore中,对应的key中的内容:
    curl -s 'localhost:26657/abci_query?data="abc"'

九、多节点测试

  1. 配置文件生成
    使用如下命令可以一键在当前目录下生成4个节点的配置文件:
    tendermint testnet --v 4
    配置文件存储在mytestnet文件夹中,目录下有四个文件夹,分别名为node0,node1,node2,node3。
    如果向配置其它节点数量,只要修改对应数值即可。
  2. 修改监听端口
    mytestnet/node0/config地址下有文件config.coml,通过该文件可以配置区块链节点的一些参数。 一般情况下,至少需要修改RPC的监听地址和P2P的监听地址以及Peer节点地址。
    (1)在文件的91行可以设置rpc地址,client广播交易等均需通过该地址。127.0.0.1表示仅监听本机tcp消息,0.0.0.0表示监听全网段tcp消息,如果多机测试,务必将监听范围设置成0.0.0.0。
    默认的监听端口是26657,如果是单机四节点测试的话,可以将四个节点的配置文件中该项分别设置为26657、26658、26659、26660,其它情况以此类推。
    RPC端口设置
    (2)文件202行可以设置P2P地址监听端口,该端口用于共识过程中,对等节点间的通信。默认监听地址范围就是0.0.0.0,一般来说,不建议修改该网段。
    默认的监听端口是26656。如果是单机四节点测试的话,可以将该项分别修改为26656、36656、46656、56656,其它情况自行调整。
    P2P端口设置
    (3)此外,由于P2P端口被修改了,相应的Peer节点信息也需要修改。
    文件215行记录了Peer节点的ID、IP地址以及端口。第三节介绍了hosts的映射方式,node0、node1、node2、node3即为IP映射,读者若想采用自己的IP映射,须记住节点和IP的对应关系,以免出错。
    如若上述(2)步,修改了P2P的监听端口,须记住节点与端口的对应情况,将对应节点的端口修改为(2)步中的结果。
    此外,建议将node0的Peer节点中的node0(即自身)去掉,否则node0宕机后,会向自身询问新的区块,造成不必要的麻烦。
    Peer节点信息
  3. 其它配置
    八.2节。
  4. 启动节点
    首先进入mytestnet目录(mytestnet所在位置根据自身修改):
    cd ~/mytestnet
    分别在对应节点上运行以下命令启动节点:
    tendermint start --proxy_app=kvstore --home=./node0
    tendermint start --proxy_app=kvstore --home=./node1
    tendermint start --proxy_app=kvstore --home=./node2
    tendermint start --proxy_app=kvstore --home=./node3

十、负载测试

进入tm-load-test目录:
cd tm-load-test/cmd/tm-load-test
如果没有可执行文件tm-load-test,则需要编译一次
go build
接着可以进行负载测试:
./tm-load-test -c 1 -T 60 -r 6000 --broadcast-tx-method async --endpoints ws://node0:26657/websocket,ws://node1:26658/websocket,ws://node2:26659/websocket,ws://node3:26660/websocket --stats-output result.csv
参数含义

  • c : 每个节点的连接数
  • T : 总时长
  • r :每秒、每节点、每个连接上的负载大小。也就是说,tm-load-test向区块链中每个节点施加的负载大小为c*r。
  • broadcast-tx-method : 有三种方式可选,async(不等待任何消息)、sync(等待CheckTx结果)、commit(等待CheckTx结果与DeliverTx结果)。不推荐使用commit方法,因为每个节点最多允许100个RPC订阅消息。
  • endpoints : 节点地址,必须以ws://开头,以/websocket结尾,中间部分node0:26657为节点IP和端口。
  • stats-output : 输出结果的记录位置,不过不需要记录结果则不用写这个标签。输出结果是mempool相应请求的速度,并不是交易实际上链的速度。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值