想了解相关区块链开发,技术提问,请加QQ群:538327407html
前面几章,咱们经过单机部署,在单台服务器上搭建四个节点,完成Fisco Bcos 底层搭建,并完成相关合约开发、sdk 开发。java
本次,咱们将经过多态服务器的形式,多机构、多节点分布式部署。node
备注:本文如下采用一键部署方式,可是想要了解分布式部署等原理的,仍是要了解深层次的每一个细节,详细状况请看如下官方linux
(很重要,里面介绍了一条链,链证书、机构证书、节点证书使用,以及各节点是如何保证p2p通讯,身份认证等)github
首先 先附上 官方教程 详细地址:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/enterprise_tools/enterprise_quick_start.htmlweb
因为官方教程是在单机上部署,模拟多服务器分布式,其实有些细节上仍是有很大差距,对于小白,若是没有比较扎实的区块链底层改造实力,可能就会陷入卡壳状态。ubuntu
其中 将测试服务器1 做为机构A,同时也是生成创世区块的机构,测试服务器2 做为机构B,两个机构 分别表明两台服务器,每台服务器 又分别生成两个节点。bash
机构 | 节点 | 所属群组 | 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服务器不一致。
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git && cd ./generator
node_deployment.ini
当咱们下载文件,经过winscp 直观查看到底层项目,进入one_click,里面分别有agencyA和AgencyB,一开始时候,里面只有 node_deployment.ini 配置文件。
机构A的配置,机构B只要把对应的p2p和rpc的ip 修改成服务器2 的就能够了。
执行命令:
bash ./one_click_generator.sh ./one_click
ls ./one_click
咱们能够看到 生成对应的结构证书和对应的generator 文件,包括对应的sdk 等生成
执行脚本命令
bash ./one_click/agencyA/node/start_all.sh
查看节点进程:
ps -ef | grep fisco
查看节点log:
tail -f log/*
在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
到 各自机构下查看节点创世区块,发现哈希值基本一致
机构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
在各自节点 查看日志:
ubuntu@VM-16-14-ubuntu:~/generator/one_click/agencyA/node/node_172.27.16.14_30301$ tail -f log/*
打印输出:
命令解释
# +++即为节点正常共识
因为控制台须要java 环境,因此先要搭建java
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update
sudo apt install openjdk-8-jre-headless
地址以下:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
新建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
./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
查看区块命令:
getBlockNumber
机构A和机构B 结果为0
在机构B中部署测试合约,再用命令查看 ,此时区块为1
相同的,在机构A中查看,发现区块高度也变为1,因此可能证实两个机构是共识的。
sdk项目中的放到resources 文件夹下
对以下配置文件进行修改,改成指定的服务器外网地址:
得到区块高度
部署自定义合约,并进行测试,成功返回结果