想了解相关区块链开发,技术提问,请加QQ群:538327407

前提概要

前面几章,我们通过单机部署,在单台服务器上搭建四个节点,完成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服务器不一致。

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---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--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..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..0_211/bin/java  //这里也是要改成指定的位置
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1..0_211/bin/javac
在终端输入,出现版本号则表示安装成功
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 

配置B机构控制台:

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

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

bash ./start.sh 

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的单元测试校验成果

获得区块高度

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

读后感觉不错,有收获可以微信请作者喝杯咖啡,读后有疑问请加微信,拉群研讨,注明来意

第六章 Fisco Bcos 多服务器分布式部署的更多相关文章

  1. Fisco bcos 区块链-分布式部署

    Fisco bcos 区块链-分布式部署 前置条件:mysql配置成功. 节点搭建 cat > ipconf << EOF 127.0.0.1:1 agencyA 1 127.0.0 ...

  2. 第五章 FISCO BCOS 区块链浏览器的部署

    想了解相关区块链开发,技术提问,请加QQ群:538327407 前提 前面我们已经通过底层部署.sdk调测.自定义智能合约编写与部署.联合单元测试调测,已经初步对FISCO BCOS的区块链底层和实际 ...

  3. 第二章FISCO BCOS sdk下载和配置是使用

    想了解相关区块链开发,技术提问,请加QQ群:538327407 前提: 1.已经搭建好了一个底层,并且可以正常运行 2.确定外部是否可以连接,如果是云上的服务器,要保证外网可以访问 正式流程 1.下载 ...

  4. 第六章:Django 综合篇 - 19:部署 Django

    补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...

  5. CentOS6安装各种大数据软件 第六章:HBase分布式集群的配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  6. 第一章 区块链系列 联盟链FISCO BCOS 底层搭建

    想了解相关区块链开发,技术提问,请加QQ群:538327407 FISCO BCOS 基础安装教程:https://fisco-bcos-documentation.readthedocs.io/zh ...

  7. 第六章SignalR的服务器广播

    第六章SignalR的服务器广播 1.概述: VS可以通过 Microsoft.AspNet.SignalR.Sample NuGet包来安装一个简单的模拟股票行情应用.在本教程的第一部分,您将从头开 ...

  8. 与http协作的web服务器、http首部(第五章、第六章)

    第五章 与http协作的web服务器 1.用单台虚拟主机实现多个域名 通过域名访问主机,经过DNS解析成ip地址,反向代理,可以代理多台服务器,正向代理则相反,代理客户端 2.通信数据转化程序:代理. ...

  9. 第七章 手动部署Fisco Bcos 区块链并完成新增群组,在原有群组中新增机构

    鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 目标 1.新增群组搭建完整联盟链 2.根据群组新 ...

随机推荐

  1. phpstorm 删除空行

    思路: 用正则把所有空行找到,然后一键全部替换. 步骤:首先把 Regex 打上勾ctrl+f 搜索框就填写正则规则:^\nctrl+r 匹配到所有空行之后,点击[Replace all]即可

  2. 安德鲁斯Launcher得到的装在手机的应用程序列表

    Launcher最基本的是让所有的应用程序和入口图标的列表.有两种方法来获得,一般: PackageInfo ResolveInfo 执行获取全部APP的Launcher而且同意进行点击事件,进入到应 ...

  3. ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目 - macOS 环境 对于任何语言和 ...

  4. WPF 窗体中获取键盘和鼠标无操作时的超时提示

    原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 , , );            timer.Tic ...

  5. sql service 游标和触发器的使用

    一. 定义游标 使用游标相当于C#里面的集合. ) DECLARE My_Cursor CURSOR --定义游标 FOR (select autoid from U_VoucherItems whe ...

  6. 【Quartz】定时器初步实验(一)

    原文:[Quartz]定时器初步实验(一)     以前就了解了Quartz这个定时框架,但是一直没有认真的去关注他,最近忽然看到已经更新到3.0.4支持异步操作了所以就写个简单的小例子看看好用不. ...

  7. WPF数据模板和控件模板

     WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...

  8. redis 从0到1 linux下的安装使用 数据类型 以及操作指令 一

    安装 redis 到 /usr/目录下 我这里安装的是redis-3.2.9.tar.gz tar zxvf  redis-3.2.9.tar.gz  -C  /usr 然后进行 执行编译命令 mak ...

  9. 查看安卓APK源码破解

    原文:查看安卓APK源码破解 工具准备: <1>.android4me的AXMLPrinter2工具 <2>dex2jar <3>jd-gui 工具下载:http: ...

  10. WPF 窗体边框处理

    一般做wpf窗口时都不会使用默认的标题栏等,会把他隐藏掉 此时设置以下属性 WindowStyle.AllowsTransparency.ResizeMode 中的两个或三个都能达到目的. 有一种场景 ...