tendermint networks

Tendermint多节点部署的三种方式

  1. 本地部署Tendermint网络
  2. 使用Docker在本地部署Tendermint网络
  3. 远程云部署Tendermint网络

本地部署Tendermint网络

1.建立host映射(在/etc/hosts文件中加入如下映射)

192.167.10.2 node0
192.167.10.3 node1
192.167.10.4 node2
192.167.10.5 node3

2.生成配置文件
使用如下命令可以一键在当前目录下生成4个节点(node0、node1、node2、node3)的配置文件:

tendermint testnet --v 4

3.修改各节点的rpc端口和p2p端口
可以将四节点的rpc端口号设置为:26657、26661、26663、26665
可以将四节点的p2p端口号设置为:26656、26659、26662、26664
4.修改配置文件中[p2p]的persistent_peers字段

persistent_peers = “f429cff611611bd0e1922b16ce9e4bdf6ca9ecba@node0:26656,804284b394087406481f0815d4597294b3432964@node1:26659,707a2791c4b100a79939d48dbd697e92529440aa@node2:26662,805178e480c0132aa1d1655b84b24d3c8a4d6ea7@node3:26664”

5.启动节点
进入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

使用Docker在本地部署Tendermint网络

若要使用ClevelDB可先安装ClevelDB

sudo apt-get update
sudo apt install build-essential

sudo apt-get install libsnappy-dev

wget https://github.com/google/leveldb/archive/v1.20.tar.gz && \
  tar -zxvf v1.20.tar.gz && \
  cd leveldb-1.20/ && \
  make && \
  sudo cp -r out-static/lib* out-shared/lib* /usr/local/lib/ && \
  cd include/ && \
  sudo cp -r leveldb /usr/local/include/ && \
  sudo ldconfig && \
  rm -f v1.20.tar.gz

修改配置文件,数据库后端设置为cleveldb

db_backend = “cleveldb”

build tendermint 支持cleveldb

CGO_LDFLAGS="-lsnappy" make install TENDERMINT_BUILD_OPTIONS=cleveldb

1.使用如下命令在build目录下生成tendermint二进制文件

make build-linux

2.使用如下命令建立tendermint/localnode image(此项可选择,启动网络时会自动建立docker image)

make build-docker-localnode

Makefile入门:
Makefile与Cmake的联系与区别:
Cmake是一种跨平台编译工具,比make方便
CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库
在这里插入图片描述

Makefile文件中的命令有一定规范,一旦该文件编写好以后在Linux命令行中执行一条make命令即可自动编译整个工程。make命令和Makefile文件:
make命令:make -C转到目录
make命令会读取makefile文件的内容,make命令会根据makefile文件来确定目标文件的创建顺序以及正确的规则调用顺序。
Makefile文件中的命令:
$(CURDIR) 是一个 GNU Make 内置的 Makefile 变量,用于获取当前工作目录的绝对路径。
定义$(MAKE)宏变量的意思是,也许我们的make需要一些参数,所以定义成一个变量比较有利于维护。两个例子意思都是先进入"subdir"目录,然后执行make命令

  • 变量:$ 符号表示取变量的值
  • 变量赋值:
    “=”赋值
    “:=”表示直接赋值,赋予当前位置的值。
    "?="表示如果该变量没有被赋值,赋值予等号后面的值。
    "+="和平时写代码的理解是一样的,表示将符号后面的值添加到前面的变量上
  • 回显问题,Makefile中的命令都会被打印出来。如果不想打印命令部分 可以使用@去除回显
@echo "clean done!"

  • 伪目标.PHONY
    伪目标只是一个标签,伪目标的作用:(1)避免命令与目录下的文件名重复;(2)make的并行和递归执行过程中;(3)生成多个应用程序
  • 嵌套执行Makefile

Docker知识:

  1. docker build
    //从Dokcerfile文件建立镜像,寻找Dockerfile文件,Dockerfile是一个文本格式的配置文件,可以使用Dockerfile来快速创建自定义的镜像,包含一条条的指令。Dockerfile结构大致分为四个部分:基础镜像信息、维护者信息、构建镜像的指令信息、容器启动时执行指令信息
    Dockerfile常用指令:
    from:基础镜像 run:RUN command为shell命令 RUN
    [“executable”, “param1”, “param2”] executable为可执行程序,param1,param2分别为参数
    CMD:CMD [“executable”,“param1”,“param2”] (首选形式) CMD command param1
    param2 (shell命令形式) 在Dockerfile中,只能有一条CMD指令,如果出现多个CMD命令,则只有最后一个命令会生效。
    LABEL:使用LABEL指令来添加镜像的作者信息等
    EXPOSE:EXPOSE [/…]
    EXPOSE指令通知Docker容器在运行时监听指定的网络端口,可以指定端口的协议(TCP/UDP),如果不指定默认为TCP协议
    COPY:docker默认会在上下文目录的根目录去找Dockerfile文件
    ENTRYPOINT:ENTRYPOINT [“executable”, “param1”, “param2”]
    ENTRYPOINT command param1 param2
    Docker运行时,可以使用–entrypoint来覆盖ENTRYPOINT指令
    VOLUME:[ /tendermint ]
    Docker运行会在宿主机生成数据卷并挂载VOLUME指令指定的位置。
    WORKDIR:/tendermint
    WORKDIR指令为任意的RUN、CMD、ENTRYPOINT、ADD、COPY指令设置工作目录。如果指定的目录不存在,将会被默认创建。
    2.使用Dockerfile构建项目镜像
    上下文目录:发出docker build指令所在目录就是上下文目录。默认情况下,docker会在当前目录中寻找Dockerfile文件,我们也可以使用-f参数来指定Dockerfile的位置。无论Dockerfile处于什么位置,上下文目录以及子目录的所有内容都会被发送到Docker daemon中。

:Z 命令是用于设置 SELinux 安全上下文的选项,它在 Docker 中用于提高容器中数据的安全性。

docker run --rm/如果容器存在的话自动移除容器
docker run -v /
docker build --tag tendermint/localnode localnode //创建docker image标签
docker-compose up //创建和开启容器
docker-compose down//停止和移除容器和网络

tendermint test命令参数:
--config /etc/tendermint/config-template.toml: 使用指定路径下的 config-template.toml 配置文件来配置 Tendermint 节点
--o .: 将生成的测试网络配置文件输出到当前目录(.)中,以便将其用于启动测试网络
--starting-ip-address 192.167.10.2: 指定测试网络的起始 IP 地址,用于为测试网络中的节点分配 IP 地址

make build-docker-localnode
执行流程如下:
(1)如果以前开启过网络,则会执行localnet-stop关闭网络,(2)然后执行build-docker-localnode,通过Docker建立网络,build-docker-localnode命令先进入networks/local目录下,然后执行make命令,makefile文件中的命令“docker build --tag tendermint/localnode localnode”(3) 通过[ -f build/node0/config/genesis.json ]判断build/node0/config/genesis.json是否存在,若不存在,执行“docker run --rm -v $(CURDIR)/build:/tendermint:Z tendermint/localnode”,用 Docker 运行一个名为 tendermint/localnode 的镜像,并将当前目录下的 build 目录挂载到容器中的 /tendermint 目录下,并设置挂载路径为可共享(shared)模式,最后启动一个新的容器来执行 tendermint/localnode 镜像中的命令。(4)执行“testnet --config /etc/tendermint/config-template.toml --o . --starting-ip-address 192.167.10.2”命令启动tendermint网络,若没有指定节点数量,默认生成4个验证节点。(5)执行“docker-compose up”创建和开启容器。首先,Docker Compose 会检查当前目录下是否存在 docker-compose.yaml 配置文件,根据配置文件创建所需的容器。

# Run a 4-node testnet locally
localnet-start: localnet-stop build-docker-localnode
	@if ! [ -f build/node0/config/genesis.json ]; then docker run --rm -v $(CURDIR)/build:/tendermint:Z tendermint/localnode testnet --config /etc/tendermint/config-template.toml --o . --starting-ip-address 192.167.10.2; fi
	docker-compose up
.PHONY: localnet-start

3.启动四节点网络(首先要启动docker),会在build目录下生成node0-3四个节点文件

make localnet-start

如本地部署Tendermint网络,修改相应节点配置文件中的rpc、p2p端口号和篇p2p.persistent_peers字段,配置docker-compose.yaml文件

远程云部署Tendermint网络

使用Terraform and Ansible 部署Tendermint网络
1.Install Terraform and Ansible on a Linux machine.

cleveldb部署问题:

nhl@harry:~/workspace/tendermint$ CGO_LDFLAGS="-lsnappy" make install TENDERMINT_BUILD_OPTIONS=cleveldb
CGO_ENABLED=1 go install -mod=readonly -ldflags "-X github.com/tendermint/tendermint/version.TMCoreSemVer=v0.34.24 -s -w " -trimpath -tags tendermint cleveldb ./cmd/tendermint
package cleveldb is not in GOROOT (/home/nhl/env/go/src/cleveldb)
make: *** [Makefile:69: install] Error 1

问题2:docker部署的多节点IP地址在哪里修改

问题3:tendermint-exporter具体运作逻辑?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值