第六章 Fisco Bcos 多服务器分布式部署
想了解相关区块链开发,技术提问,请加QQ群:538327407
前提概要
前面几章,我们通过单机部署,在单台服务器上搭建四个节点,完成FISCO BCOS 底层搭建,并完成相关合约开发、sdk 开发。
本次,我们将通过多态服务器的形式,多机构、多节点分布式部署。
备注:本文以下采用一键部署方式,但是想要了解分布式部署等原理的,还是要了解深层次的每个细节,详细情况请看以下官方
(很重要,里面介绍了一条链,链证书、机构证书、节点证书使用,以及各节点是如何保证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 多服务器分布式部署的更多相关文章
- Fisco bcos 区块链-分布式部署
Fisco bcos 区块链-分布式部署 前置条件:mysql配置成功. 节点搭建 cat > ipconf << EOF 127.0.0.1:1 agencyA 1 127.0.0 ...
- 第五章 FISCO BCOS 区块链浏览器的部署
想了解相关区块链开发,技术提问,请加QQ群:538327407 前提 前面我们已经通过底层部署.sdk调测.自定义智能合约编写与部署.联合单元测试调测,已经初步对FISCO BCOS的区块链底层和实际 ...
- 第二章FISCO BCOS sdk下载和配置是使用
想了解相关区块链开发,技术提问,请加QQ群:538327407 前提: 1.已经搭建好了一个底层,并且可以正常运行 2.确定外部是否可以连接,如果是云上的服务器,要保证外网可以访问 正式流程 1.下载 ...
- 第六章:Django 综合篇 - 19:部署 Django
补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...
- CentOS6安装各种大数据软件 第六章:HBase分布式集群的配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- 第一章 区块链系列 联盟链FISCO BCOS 底层搭建
想了解相关区块链开发,技术提问,请加QQ群:538327407 FISCO BCOS 基础安装教程:https://fisco-bcos-documentation.readthedocs.io/zh ...
- 第六章SignalR的服务器广播
第六章SignalR的服务器广播 1.概述: VS可以通过 Microsoft.AspNet.SignalR.Sample NuGet包来安装一个简单的模拟股票行情应用.在本教程的第一部分,您将从头开 ...
- 与http协作的web服务器、http首部(第五章、第六章)
第五章 与http协作的web服务器 1.用单台虚拟主机实现多个域名 通过域名访问主机,经过DNS解析成ip地址,反向代理,可以代理多台服务器,正向代理则相反,代理客户端 2.通信数据转化程序:代理. ...
- 第七章 手动部署Fisco Bcos 区块链并完成新增群组,在原有群组中新增机构
鉴于笔者以前各大博客教程都有很多人提问,早期建立一个技术交流群,里面技术体系可能比较杂,想了解相关区块链开发,技术提问,请加QQ群:538327407 目标 1.新增群组搭建完整联盟链 2.根据群组新 ...
随机推荐
- libcurl 支持 openssl 交叉编译 mips rt5350
By admin | 11月18日 0 Comment Advertisement 历经半个月终于把libcurl库编译出来,参考网上很多博客,最终把自己要的库编译出来. 首先说明一下,我要这个库的目 ...
- 精装友好联络算法实现借壳和RI
精装友好联络会 注册算法分析: 1. 许可证由三部分组成. 2. 的登记号的第一部分是顺序编号0x6d模 3. 登记代码的第二部分: 先将订单号与0XB25F1异或,将异或后的结果转换成十进制字符串 ...
- WPF 控件的内容属性
WPF的内容属性不应定都是content, 例如TextBlock的内容属性是Text Panel的内容属性是Children ListBox的内容属性是Items
- Bootstrap路径导航
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- Ionic3开发环境搭建-VS Code
原文:Ionic3开发环境搭建-VS Code 一.Ionic3在VS Code中的开发环境搭建 1.全局安装Ionic包 npm install -g cordova ionic 使用 ionic ...
- 【shell】编译脚本
#!/bin/bash #设置环境变量 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export JRE_HOME=${JAVA_HOME}/ ...
- C# 开机自动启动
if (ConfigurationManager.AppSettings["IsBoot"].ToString().Trim().ToUpper() == "TRUE&q ...
- GRPC 1.3.4 发布,Google 高性能 RPC 框架(Java C++ Go)
GRPC 1.3.4 发布了,GRPC 是一个高性能.开源.通用的 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架. GRPC ...
- SQLSERVER 数据库备份脚本-支持多库备份
原文:SQLSERVER 数据库备份脚本-支持多库备份 <pre name="code" class="sql">--变量定义 DECLARE @b ...
- SynchronizationContext笔记
SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文. 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为.此模型 ...