在Ubuntu上进行Tendermint多节点测试

一、设置Ubuntu软件源。

清华源的设置可以参考如下网址。设置软件镜像源是为了加速一些软件的下载。
Ubuntu设置清华源_ubuntu清华源_there2belief的博客-CSDN博客
配置好清华源后,使用如下命令激活配置文件:
source /etc/apt/sources.list

二、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 init --proxy_app=kvstore
    Tendermint命令行有home参数,可以设置目录文件夹,如tendermint init --home ~/tmtest可以在~/tmtest文件夹下创建config和data两个文件夹(无则创建一个tmtest文件夹)。此时,使用命令tendermint init --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 :每秒、每节点、每个连接上的负载大小。
  • broadcast-tx-method : 有三种方式可选,async(不等待任何消息)、sync(等待CheckTx结果)、commit(等待CheckTx结果与DeliverTx结果)。不推荐使用commit方法,因为每个节点最多允许100个RPC订阅消息。
  • endpoints : 节点地址,必须以ws://开头,以/websocket结尾,中间部分node0:26657为节点IP和端口。
  • stats-output : 输出结果的记录位置,不过不需要记录结果则不用写这个标签。输出结果是mempool相应请求的速度,并不是交易实际上链的速度。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容