区块链技术应用研究与软件开发实践:分布式共享的超级账本部署网络拓扑结构体系

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分布式共享的超级账本部署

网络结构拓扑体系

1 准备超级账本运行环境

本节介绍多种构建超级账本运行环境的方法,然后介绍如何编译超级账本的镜像文件。

1.1 超级账本运行环境

链码依赖于Docker才能启动运行,超级账本的各节点也推荐运行在Docker容器中,方便系统的运维管理。在开发的过程中,有多种运行方式可以选择:基于Vagrant的运行环境、基于Virtualbox的运行环境和基于Docker的运行环境。

1.基于Vagrant的运行环境Vagrant用一致的工作流程提供了易于配

置、可重复、便携的工作

环境,让开发人员可以快速地创建和销毁虚拟机,帮助团队最大限度地提高生产力和灵活性。图1-1是基于Vagrant的运行环境示意图,Vagrant同时支持Linux、MacOS或Windows等不同的平台,通过相同的配置文件Vagrantfile启动Virtuabox虚拟机。虚拟机的操作系统是Ubuntu 16.04,启动的过程会调用脚本devenv/setup.sh安装所需要的软件并做相应配置,包括安装Docker、Docker Compose、Golang、Node.js、OpenJDK、Gradle等,还会修改系统的文件描述符数等,这样统一用同一套配置运行相同的程序,就不会再有“我的环境有问题”的借口了,也不会存在工作习惯划分出不同阵营的情况,非常适合工作团队合作。图1-1是基于Vagrant的运行环境示意图。

图1-1 基于Vagrant的运行环境示意图

(1)配置文件Vagrantfile 我们先来看一下配置文件Vagrantfile的内容。

SRCMOUNT = "/hyperledger"

LOCALDEV = "/local-dev"

$script = <

set -x

echo "127.0.0.1 couchdb" | tee -a /etc/hosts

export DOCKER_STORAGE_BACKEND="#{ENV['DOCKER_STORAGE_BACKEND']}"

cd //{SRCMOUNT}/devenv

./setup.sh

SCRIPT

Vagrant.require_version ">= 1.7.4"

Vagrant.configure('2') do |config|

config.vm.box = "ubuntu/xenial64" // 基础镜像

work :forwarded_port, guest: 7050, host: 7050, id: "orderer", host_ip: "localhost", auto_correct: true // 排序服务

work :forwarded_port, guest: 7051, host: 7051, id: "peer",

host_ip:

"localhost", auto_correct: true // Peer节点

work :forwarded_port, guest: 7053, host: 7053, id: "peer_event", host_ip: "localhost", auto_correct: true // 事件服务

work :forwarded_port, guest: 7054, host: 7054, id: "ca", host_ip: "localhost", auto_correct: true // fabric-ca

work :forwarded_port, guest: 5984, host: 15984, id: "couchdb", host_ip: "localhost", auto_correct: true // CouchDB

config.vm.synced_folder "..", "#{SRCMOUNT}" // 同步目录

config.vm.synced_folder "..", "/opt/gopath/src//hyperledger/fabric" //同步目录

config.vm.synced_folder ENV.fetch('LOCALDEVDIR', ".."), "#{LOCALDEV}" // 同步目

if File.exist?("../../fabric-ca")

config.vm.synced_folder "../../fabric-ca", "/opt/gopath/src// hyperledger/ fabric-ca" end

config.vm.provider :virtualbox do |vb|

= "hyperledger" // 虚拟机名称

vb.customize ['modifyvm', :id, '--memory', '4096'] // 内存大小 vb.cpus = 2 // CPU storage_backend = ENV['DOCKER_STORAGE_BACKEND'] case storage_backend

when nil,"","aufs","AUFS"

// 不需要额外的操作 when "btrfs","BTRFS"

// 添加一个btrfs 的卷

IO.popen("VBoxManage list systemproperties") { |f|

success = false

while line = f.gets do

// 查找虚拟机文件存储目录

machine_folder = line.sub(/^Default machine folder:\s*/,"") if line != machine_folder

btrfs_disk = File.join(machine_folder, ,

'btrfs.vdi')

unless File.exist?(btrfs_disk)

// 创建btrfs 磁盘

vb.customize ['createhd', '--filename', btrfs_disk, '--format', 'VDI', '--size', 20 * 1024]

'--medium', btrfs_disk]

end

end

// 添加磁盘到虚拟机

vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd',

success = true break

} else

end

raise Vagrant::Errors::VagrantError.new, "Could not provision btrfs disk" if !success

end

end raise Vagrant::Errors::VagrantError.new, "Unknown storage backend type: {storage_backend}"

config.vm.provision :shell, inline: $script end

Vagrant.require_version“>=1.7.4”是对Vagrant 本身版本的要求,这里 定义的版本必须大于等于1.7.4。config.vm.box 定义了基础镜像的名称和 版本,work 定义了与宿主机之间的端口转发,预留端口间 的对应关系如表1-1所示。实际用途可以自己定义,也可以修

相关文档
最新文档