区块链系列教程(6)
Fisco Bcos 多服务器分布式部署
哈希科技作为一家区块链技术服务商,有责任也有义务为推广区块链贡献一份力量。计划连续推出区块链教程,欢迎大家交流。
哈希科技拥有全面的区块链能力,支持Hyperledger Fabric、Ethereum、FISCO BCOS及腾讯Trust SQL等主流框架。
FISCO BCOS是微众银行、腾讯等联合推出的,安全可控、适用于金融行业且开源的区块链底层平台。哈希科技与微众区块链团队进行过深度对接合作,也得到了微众团队童鞋们的鼎力支持和帮助,在此一并感谢!
本教程作者为哈希科技CTO林滨,这是一位才华在线颜值担当的90后有为青年,推荐大家关注。
前提
前面几章,我们通过单机部署,在单台服务器上搭建四个节点,完成Fisco Bcos 底层搭建,并完成相关合约开发、sdk 开发。
本次,我们将通过多态服务器的形式,多机构、多节点分布式部署。
备注:本文以下采用一键部署方式,但是想要了解分布式部署等原理的,还是要了解深层次的每个细节,详细情况请看以下官方:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/enterprise_quick_start.html
(很重要,里面介绍了一条链,链证书、机构证书、节点证书使用,以及各节点是如何保证p2p通信,身份认证等)
一键部署
首先 先附上 官方教程 详细地址:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/enterprise_tools/enterprise_quick_start.html
由于官方教程是在单机上部署,模拟多服务器分布式,其实有些细节上还是有很大差距,对于小白,如果没有比较扎实的区块链底层改造实力,可能就会陷入卡壳状态。
一、基础底层搭建
1、先准备两台测试服务器
其中 将测试服务器1 作为机构A,同时也是生成创世区块的机构,测试服务器2 作为机构B,两个机构 分别代表两台服务器,每台服务器 又分别生成两个节点。
机构
|
节点
|
所属群组
|
P2P地址
|
RPC/channel监听地址
|
机构A
|
节点0
|
群组1
|
172.27.16.14:30300
|
172.27.16.14:8545/:20200
|
|
节点1
|
群组1
|
172.27.16.14:30301
|
172.27.16.14:8546/:20201
|
机构B
|
节点2
|
群组1
|
172.27.16.17:30302
|
172.27.16.17:8547/:20202
|
|
节点3
|
群组1
|
172.27.16.17:30303
|
172.27.16.17:8548/:20203
|
官方的关于端口配置讲解:
https://mp.weixin.qq.com/s/IiHsPlxmvEEBTC84n27I9A
建议使用内网地址,笔者调测p2p 使用外网地址 或者0.0.0.0 都失败了。
针对云服务器中的vps服务器,RPC监听地址需要写网卡中的真实地址(如内网地址或127.0.0.1),可能与用户登录的ssh服务器不一致。
二、搭建机构A 部署
2.1 下载
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git && cd ./generator
2.2 配置各个机构配置文件 node_deployment.ini
当我们下载文件,通过winscp 直观查看到底层项目,进入one_click,里面分别有agencyA和AgencyB,一开始时候,里面只有 node_deployment.ini 配置文件。
机构A的配置,机构B只要把对应的p2p和rpc的ip 修改为服务器2 的就可以了。
2.3 搭建节点
执行命令:
bash ./one_click_generator.sh ./one_click
ls ./one_click
我们可以看到 生成对应的结构证书和对应的generator 文件,包括对应的sdk 等生成
2.4 启动节点
执行脚本命令
bash ./one_click/agencyA/node/start_all.sh
查看节点进程:
查看节点log:
三、搭建机构B部署
3.1 将机构A中one_click 文件夹下agencyB 里面的node copy到机构B服务器中
3.2 启动机构B节点
在node目录下,执行以下命令
此时有可能出现权限问题,主要node文件夹下面两个节点中fisco-bcos 会有权限问题
授权文件权限(指定的命令要根据当前自己的目录位置动态调整)
sudo chmod u+rwx node_172.27.16.17_30300/fisco-bcos
sudo chmod u+rwx node_172.27.16.17_30301/fisco-bcos
在node目录下,执行以下命令
四、两个机构、多个节点共识等校验
4.1 创世区块查看
到 各自机构下查看节点创世区块,发现哈希值基本一致
机构A,创世区块
ubuntu@VM-16-14-ubuntu:~/generator/one_click/agencyA/node/node_172.27.16.14_30300$ cat log/* |grep Report
info|2019-07-02 18:17:21.672828|[g:1][CONSENSUS][PBFT]^^^^^^^^Report,num=0,sealerIdx=0,hash=63ab4477...,next=1,tx=0,nodeId
机构B
root@VM-16-17-ubuntu:/home/ubuntu/node/node_172.27.16.17_30300# cat log/* |grep Report
info|2019-07-03 09:33:37.319783|[g:1][CONSENSUS][PBFT]^^^^^^^^Report,num=0,sealerIdx=0,hash=63ab4477...,next=1,tx=0,nodeId
4.2 查看共识
在各自节点 查看日志:
ubuntu@VM-16-14-ubuntu:~/generator/one_click/agencyA/node/node_172.27.16.14_30301$ tail -f log/*
打印输出:
命令解释
# +++即为节点正常共识
五、搭建控制台
由于控制台需要java 环境,所以先要搭建java
5.1 添加ppa源
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
5.2 安装openjdk
sudo apt install openjdk-8-jre-headless
5.3 下载jdk 1.8.211
地址如下:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
5.4 解压文件,并配置环境
新建software 文件夹,将 jdk-8u211-linux-x64.tar.gz 放置其中
在/usr/lib/ 新建jdk 文件夹,执行解压命令
sudo tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/lib/jdk
修改配置:
#set java env
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_211 //这里是要指定的文件位置
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
执行命令,立即生效:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk1.8.0_211/bin/java 300 //这里也是要改成指定的位置
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1.8.0_211/bin/javac 300
在终端输入,出现版本号则表示安装成功