12. 多机部署
12.1. 概述
通过本文你将可以搭建起长安链多节点集群,并使用命令行工具/管理台完成长安链多机部署。
通过源码搭建长安链并且上链查数据需要以下步骤,本文将一一演示
命令行创建集中式多节点链
命令行创建分布式多节点链
管理台创建集中式多节点链
启动多节点集群
使用CMC工具安装、调用、查询一个合约
使用GO SDK验证合约
使用管理台验证合约
12.2. 环境依赖
请查看:【快速入门】
12.3. 多机部署
部署按照
PermissionedWithCert
模式进行搭建
名词 | 说明 |
---|---|
多机 | 多台机器部署同一条链 |
集中式 | 使用不同根证书在一个服务器(组织)上生成各个节点、组织、用户证书 |
分布式 | 使用不同根证书在不同服务器(组织)上生成各个节点、组织、用户证书 |
12.3.1. 命令行多机部署-集中式
适用于
Linux
、MacOS
代码部署、编译参考通过命令行搭建链
12.3.1.1. 证书生成
# 进入脚本目录
$ cd ../scripts
# 生成单链4节点集群的证书和配置
$ ./prepare.sh 4 1
begin check params...
begin generate certs, cnt: 4
input consensus type (0-SOLO,1-TBFT(default),3-HOTSTUFF,4-RAFT,5-DPOS):
input log level (DEBUG|INFO(default)|WARN|ERROR):
enable docker vm (YES|NO(default))
begin generate node1 config...
begin generate node2 config...
begin generate node3 config...
begin generate node4 config...
# 查看生成好的节点证书和配置
$ tree -L 3 ../build/
../build/
├── config
│ ├── node1
│ │ ├── certs
│ │ ├── chainconfig
│ │ ├── chainmaker.yml
│ │ └── log.yml
│ ├── node2
│ │ ├── certs
│ │ ├── chainconfig
│ │ ├── chainmaker.yml
│ │ └── log.yml
│ ├── node3
│ │ ├── certs
│ │ ├── chainconfig
│ │ ├── chainmaker.yml
│ │ └── log.yml
│ └── node4
│ ├── certs
│ ├── chainconfig
│ ├── chainmaker.yml
│ └── log.yml
├── crypto-config
│ ├── wx-org1.chainmaker.org
│ │ ├── ca
│ │ ├── node
│ │ └── user
│ ├── wx-org2.chainmaker.org
│ │ ├── ca
│ │ ├── node
│ │ └── user
│ ├── wx-org3.chainmaker.org
│ │ ├── ca
│ │ ├── node
│ │ └── user
│ └── wx-org4.chainmaker.org
│ ├── ca
│ ├── node
│ └── user
└── crypto_config.yml
12.3.1.2. 修改节点内部chainmaker.yml文件
修改
build/config/nodeN
中所有的chainmaker.yml
如:build\config\node1\chainmaker.yml
net:
provider: LibP2P
listen_addr: /ip4/0.0.0.0/tcp/11301
seeds:
- "/ip4/127.0.0.1/tcp/11301/p2p/QmeSqRL6N4ZB4YwYho4eBXX3YzHZbtjTh2jashqLZmSPw7"
- "/ip4/127.0.0.1/tcp/11302/p2p/QmNwkeUaJ4153by2Uf1GDsjHw9W25B8gRjkruoMuCjAGdB"
- "/ip4/127.0.0.1/tcp/11303/p2p/QmcTJ231F9gTwrNGK8Pm4raSZLWLD1GR7Ura8YoEdeBzMr"
- "/ip4/127.0.0.1/tcp/11304/p2p/QmSAqwDyHDo9RqTB75ZkKiyRGh1T1onHgJdnXhQKxp79Sx"
将net.seeds下 /ip4/127.0.0.1/tcp/11301/p2p/QmeSqRL6N4ZB4YwYho4eBXX3YzHZbtjTh2jashqLZmSPw7
修改为部署机器的ip/域名和port
eg:
- "/ip4/192.168.0.1/tcp/11301/p2p/QmeSqRL6N4ZB4YwYho4eBXX3YzHZbtjTh2jashqLZmSPw7"
- "/dns/cm-node1.com/tcp/11301/p2p/QmeSqRL6N4ZB4YwYho4eBXX3YzHZbtjTh2jashqLZmSPw7"
12.3.1.3. 编译及安装包制作
生成证书(prepare.sh脚本)后执行
build_release.sh
脚本,将编译chainmaker-go
模块,并打包生成安装,存于路径chainmaker-go/build/release
中
$ ./build_release.sh
$ tree ../build/release/
../build/release/
├── chainmaker-v2.0.0-wx-org1.chainmaker.org-20210406194833-x86_64.tar.gz
├── chainmaker-v2.0.0-wx-org2.chainmaker.org-20210406194833-x86_64.tar.gz
├── chainmaker-v2.0.0-wx-org3.chainmaker.org-20210406194833-x86_64.tar.gz
├── chainmaker-v2.0.0-wx-org4.chainmaker.org-20210406194833-x86_64.tar.gz
└── crypto-config-20210406194833.tar.gz
12.3.1.4. 启动节点
通过scp复制节点到部署的机器上,进入部署机器进行解压,然后启动节点内部
bin
目录下start.sh
脚本
$ scp ./xxx.tar.gz username@ip:/路径
$ tar -zxvf xxx.tar.gz
$ cd xxx/bin && ./start.sh
若需要关闭节点,在部署机器上的节点bin目录下启动
stop.sh
脚本:
$ ./stop.sh
12.3.1.5. 查看节点启动使用正常
查看进程是否存在
$ ps -ef|grep chainmaker | grep -v grep
25261 2146 4 19:55 pts/20 00:00:01 ./chainmaker start -c ../config/wx-org1.chainmaker.org/chainmaker.yml
查看端口是否监听
$ netstat -lptn | grep 1230
tcp6 0 0 :::12301 :::*
检查节点是否有
ERROR
日志
# 进入节点部署的位置
$ cd /data/multiMachineDeployment/hainmaker-v2.2.1-wx-orgN.chainmaker.org
$ cat bin/panic.log
$ cat log/system.log
$ cat log/system.log |grep "ERROR\|put block\|all necessary"
12.3.2. 命令行分布式多机部署
适用于
Linux
、MacOS
代码部署、编译参考通过命令行搭建链
12.3.2.1. 证书生成, 修改节点内部chainmaker.yml文件
# 进入脚本目录
$ cd ../scripts
执行4次证书生成操作
# 生成次单链节点集群的证书和配置
$ ./prepare.sh 1 1
begin check params...
begin generate certs, cnt: 1
input consensus type (0-SOLO,1-TBFT(default),3-HOTSTUFF,4-RAFT,5-DPOS):0
input log level (DEBUG|INFO(default)|WARN|ERROR):
enable docker vm (YES|NO(default))
begin generate node1 config...
# 移出对应的config文件
$ mv chainmaker-go/build/config /data/tmp/node1/
$ mv chainmaker-go/build/crypto_config /data/tmp/node1/
进入到文件生成位置
/data/tmp/
,将4次文件生成的chainmaker.yml(chainmaker-go/build/config/node1)
进行整理,收集各个节点下的seeds,合并成一个,修改对应的ip和port,并放置全部部署机器上
net:
provider: LibP2P
listen_addr: /ip4/0.0.0.0/tcp/11301
seeds:
- "/ip4/127.0.0.1/tcp/11301/p2p/QmeSqRL6N4ZB4YwYho4eBXX3YzHZbtjTh2jashqLZmSPw7"
# 修改之后
net:
provider: LibP2P
listen_addr: /ip4/0.0.0.0/tcp/11301
seeds:
- "/ip4/192.168.0.170/tcp/11301/p2p/QmaMxoZbUaxeMSaSY5fsaUx9KFg9wJcQAcnSUxFtxGhMAv"
- "/ip4/192.168.0.171/tcp/11302/p2p/QmVRbLmQHcPU2oWpgubespZoL1gw7Z1UktRHnTiX7ENXnD"
- "/ip4/192.168.0.172/tcp/11303/p2p/QmSvgJ6UKJVasKZkbtu1xBnDfRPoY9wPmUWgWPY8PoSHRE"
- "/ip4/192.168.0.173/tcp/11304/p2p/QmNcjPyjZ1jRAwEj6uZ34pZGQ5jVtUBAd6hJt99YySwcJL"
12.3.2.2. 编译及安装包制作
复制之前移出的配置文件到对应的
config
和crypto_config
到chainmaker-go/build
目录下执行
build_release.sh
脚本,将编译chainmaker-go
模块,并打包生成安装,存于路径chainmaker-go/build/release
中
# 移出对应的config文件
$ cp -R /data/tmp/node1/config chainmaker-go/build/config
$ cp -R /data/tmp/node1/crypto_config chainmaker-go/build/crypto_config
# 移出对应的config文件
$ cp chainmaker-go/script
$ ./build_release.sh
$ tree -L 1 chainmaker-go/build/release
├── chainmaker-v2.2.1-wx-org.chainmaker.org
├── chainmaker-v2.2.1-wx-org.chainmaker.org-20220728121113-x86_64.tar.gz
└── crypto-config-20220728121113.tar.gz
12.3.2.3. 启动节点
通过scp复制节点到各个机器上,启动节点内部
bin
目录下start.sh
脚本
$ scp ./xxx.tar.gz username@ip:/路径
$ tar -zxvf xxx.tar.gz
$ cd xxx/bin && ./start.sh
12.3.2.4. 关闭节点
若需要关闭节点,在部署机器上的节点bin目录下启动
stop.sh
脚本:
$ ./stop.sh
12.3.3. 管理台多机部署-集中式
12.3.3.1. 构建组织、节点、用户证书
申请4个组织证书、4个节点证书、4个用户证书
12.3.3.2. 创建链
新建链, 选择多机部署
12.3.3.3. 部署链
对链进行下载
将链部署到机器上
# 进入下载目录
$ cd download
# 同步链到部署机器上
$ scp chain1.zip root@192.168.0.170:/data/multiMachineDeployment
...
# 进入链当前目录
$ ssh root@192.168.0.170
$ cd /data/multiMachineDeployment
# 解压
$ unzip chain1.zip
# 进入当前部署机器的节点,启动当前节点
$ cd cd release/wx-org1.chainmaker.org-node1/bin/ && sh start.sh
12.4. 功能验证
为了验证所搭建的链功能是否正常,可以通过cmc
命令行工具或sdk
的单元测试用例来进行验证。
12.4.1. cmc命令行工具验证
请参看:【命令行工具】
12.4.2. go sdk验证
12.4.2.1. 下载go sdk源码
在
chainmaker-go
工程同级目录,执行下面命令获取go sdk
$ git clone -b v2.2.1 https://git.chainmaker.org.cn/chainmaker/sdk-go.git
12.4.2.2. 关联证书
将通过
prepare.sh
工具生成的crypto-config
目录,软连接到sdk-go/testdata
目录
$ cd sdk-go/testdata
# 这里我们使用新生成的用户证书,请先将testdata已有的crypto-config移除
$ /bin/rm -rf crypto-config
# 软连接使用prepare.sh脚本生成的证书目录
$ ln -s ../../chainmaker-go/build/crypto-config/ .
12.4.2.3. 配置修改
修改sdk单元测试使用的配置文件:
sdk-go/testdata/sdk_config.yml
根据需要修改节点地址:
nodes:
- # 节点地址,格式为:IP:端口:连接数
node_addr: "127.0.0.1:12301"
如果证书路径有调整,修改对应的证书路径配置:
# 客户端用户私钥路径
user_key_file_path: "./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.key
# 客户端用户证书路径
user_crt_file_path: "./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.crt"
# 客户端用户交易签名私钥路径(若未设置,将使用user_key_file_path)
user_sign_key_file_path: "./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.key"
# 客户端用户交易签名证书路径(若未设置,将使用user_crt_file_path)
user_sign_crt_file_path: "./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.crt"
12.4.2.4. 执行存证合约example
该单测会进行存证合约的部署、调用和查询。
$ cd sdk-go/examples/user_contract_claim
$ go run main.go
看到success或OK等类似输出,说明功能验证成功。
12.4.3. 管理台验证
请查看:【管理台】
如果需要配置自拉起方式启动,请参考:【自拉起服务】