实操指南6:FISCO BCOS 多服务器分布式部署

本文作者为FISCO BCOS社区成员——林滨,FISCO BCOS开源社区获原作者转载授权

作者:厦门哈希科技有限公司CTO

原文首发地址:https://www.cnblogs.com/linbin524/p/11089873.html

以下为作者原文:

一、准备工作

前面几章,我们通过单机部署,在单台服务器上搭建四个节点,完成FISCO BCOS底层搭建、相关合约开发、sdk 开发。

本次,我们将通过多态服务器的形式,实现多机构、多节点分布式部署。

备注:本文以下采用一键部署方式,但是想要了解分布式部署等原理的,还是要了解深层次的每个细节,详细情况请看以下官方

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/enterprise_quick_start.html

(很重要,里面介绍了一条链,链证书、机构证书、节点证书使用,以及各节点是如何保证p2p通信,身份认证等)

一键部署

首先,先附上官方教程详细地址

由于官方教程是在单机上部署,模拟多服务器分布式,其实有些细节上还是有很大差距,对于小白,如果没有比较扎实的区块链底层改造实力,可能就会陷入卡壳状态。

第一部分 基础底层搭建

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服务器不一致。

 

2、搭建机构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

查看节点进程:

ps -ef | grep fisco

查看节点log:

tail -f log/*

 3、搭建机构B部署

3.1 将机构A中one_click 文件夹下agencyB 里面的node copy到机构B服务器中

 

2、启动机构B节点

在node目录下,执行以下命令

bash ./start_all.sh 

此时有可能出现权限问题,主要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目录下,执行以下命令

bash ./start_all.sh 

4、两个机构、多个节点共识等校验

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/*

打印输出:

 命令解释
# +++即为节点正常共识

 5.搭建控制台

由于控制台需要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

修改配置:

sudo vi /etc/profile
#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 

执行命令,立即生效:

source /etc/profile
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
在终端输入,出现版本号则表示安装成功
java -version

 5.5 机构A、B下载控制台程序

./generator --download_console ./

配置A机构控制台:

拷贝控制台至对应机构A:

cp -rf ./console ./one_click/agencyA/console

配置机构A控制台对应文件,控制台启动时需要相关证书、私钥以及控制台配置文件:

cp ./one_click/agencyA/sdk/* ./one_click/agencyA/console/conf
启动控制台程序
cd ./one_click/agencyA/console && bash ./start.sh 1

配置B机构控制台:

同样在node 同等级目录下载 依照机构A方式下载

 

从机构A中one_click 目录下 agencyB 的sdk 里面的配置和证书copy 到机构B的fisco目录下的console 中的conf 文件中,然后运行如下命令:

bash ./start.sh 1

 6、成果校验

6.1 先在机构A和机构B的控制台查看 

查看区块命令:

getBlockNumber

机构A和机构B 结果为0

6.2 部署测试合约(该合约是控制台自带的)

在机构B中部署测试合约,再用命令查看 ,此时区块为1

 相同的,在机构A中查看,发现区块高度也变为1,所以可能证明两个机构是共识的。

6.3 将机构A的sdk 里面的证书等copy 给sdk项目中

 

sdk项目中的放到resources 文件夹下

 对如下配置文件进行修改,改为指定的服务器外网地址:

 6.4 通过sdk的单元测试校验成果

 获得区块高度

 部署自定义合约,并进行测试,成功返回结果

 以上就是笔者本次操作记录。

猜你喜欢

转载自www.cnblogs.com/FISCO-BCOS/p/11160386.html