想了解相关区块链开发,技术提问,请加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. Cache memory power reduction techniques

    Methods and apparatus to provide for power consumption reduction in memories (such as cache memories ...

  2. 简述WPF中的图像像素格式(PixelFormats)

    原文:简述WPF中的图像像素格式(PixelFormats) --------------------------------------------------------------------- ...

  3. PYC文件简介

    PYC文件简介¶ 不说废话,这里说的pyc文件就是 Python 程序编译后得到的字节码文件 (py->pyc). 基本格式¶ pyc文件一般由3个部分组成: 最开始4个字节是一个Maigc i ...

  4. 构建自己的PHP框架(MVC)

    完整项目地址:https://github.com/Evai/Aier 规划文件夹 新建 MFFC/app 文件夹,在 app 中创建 controllers.models.views 三个文件夹,开 ...

  5. ng-alain 复用标签相关设置

    排除复用 import { ReuseTabMatchMode, ReuseTabService } from '@delon/abc'; export class StartupService { ...

  6. WPF DataGrid 触发器

    <DataGrid.RowHeaderStyle> <Style TargetType="DataGridRowHeader"> <Style.Tri ...

  7. 利用FR导出PDF汉字乱码的处理

    利用FR导出pdf,然后在unigui中显示,发现汉字乱码,改成gb2312,不乱码,但不自动折行,最后是改成DefaultCharSet搞定.FR版本:5.4.6 后记:有的浏览器中还是乱码,把字体 ...

  8. 漫谈 JVM —— 内存

    JVM 是什么呢?说的直白点就是 Java 代码运行的地方,全称 Java Virtural Machine,Java 虚拟机.有的人就会奇怪了,为什么 Java 程序员需要了解这个东西?毕竟大多数情 ...

  9. 使用委托实现c#,窗体与窗体之间的传值

    主界面: Form1中的代码: namespace _06委托练习_窗体传值{    public partial class Form1 : Form    {        public Form ...

  10. 获取同时间段不同的时间 php

    /** * 根据指定日期返回经过的年月 * @param string $sDay 开始日期 * @param string $eDay 结束日期 * @returnse multitype:stri ...