#! https://zhuanlan.zhihu.com/p/458412538
现有的 hyperledger fabric 只提供了单机的测试网络,多个节点共享同一个主机的资源,无法满足硕士研究课题的实验要求。而网上现有的搭建多主机的教程,多是基于 hyperledger fabric 1.x 版本,版本差异大,亦不满足需求。
- 本项目基于 fabric-sample 提供的 test-network 进行修改,在原有基础上为每个组织拓展了两个 peer 节点
- 证书部分目前只使用了 cryptogen 工具生成方式并移除了 CA 方式相关的脚本
- fabric 相关的二进制文件对应的版本是 2.2.0
- 本项目仅代表实验环境的搭建过程,旨在提供便捷的实验环境,不代表生产环境
- 使用之前请先食用 fabric-sample 项目及 hyperledger fabric 官方文档
- 项目地址: https://github.com/Tiansir-wg/hyperledger-fabric-on-swarm
├── README.md
├── applications
├── bin
├── bootstrap.sh
├── clear_volumes.sh
├── config
├── configtx
├── copy_id.sh
├── docker
├── firewall.sh
├── network.sh
├── organizations
├── rsync.sh
├── scripts
└── swarm
以上文件中
- applications 直接复制于 fabric-samples
- bin 目录存放 fabric 相关的二进制可执行文件,版本是 2.2.0(未进行托管)
- bootstrap.sh 用于下载 2.2.0 版本的 fabric 可执行文件及相关镜像文件
- clear_volumes.sh 用于清理容器相关的卷,搭建网络如果失败,需要在每个节点上执行该脚本
- config 和 configtx 都是基于 fabric-sample 中相关部分进行修改的
- copy_id.sh 用于配置 ssh 免密登录
- docker 该目录存放 fabric 容器运行相关的文件
- firewall.sh 用于关闭防火墙
- network.sh 项目的启动脚本,会调用 scripts 目录的脚本
- organizations 存放 cryptogen 需要的配置文件以及生成的证书材料
- rsync.sh 用于实现不同主机之间的增量复制
- swarm 存放构建 docker swarm 集群所需的脚本文件
- 集群中一共六个节点,包括一个 swarm master 节点和五个 swarm slave 节点
- 包括两个组织,每个组织各两个 peer 节点,一个 orderer 节点(以 raft 方式运行)和两个客户端节点
- orderer 运行在 swarm master 节点上
- 虚拟机资源分配情况如下:
集群角色 | 域名 | 虚拟机地址 | 配置 |
---|---|---|---|
swarm slave | 10_245_150_86 | 10.245.150.86 | 1 核、2G RAM、50G HDD |
swarm slave | 10_245_150_87 | 10.245.150.87 | 1 核、2G RAM、50G HDD |
swarm slave | 10_245_150_88 | 10.245.150.88 | 1 核、2G RAM、50G HDD |
swarm slave | 10_245_150_89 | 10.245.150.89 | 1 核、2G RAM、50G HDD |
swarm slave | 10_245_150_90 | 10.245.150.90 | 4 核、8G RAM、50G HDD |
swarm master | 10_245_150_84 | 10.245.150.84 | 1 核、2G RAM、50G HDD |
分配各类硬件资源和 IP 地址
设置域名,例如:
hostnamectl set-hostname 10_245_150_84
添加 host 设置,将上述表格中所有的域名及其 IP 地址对应上
由于后续需要将84上执行生成的文件拷贝到其他文件,因此需要配置免密登录。通过在机器84上执行copy_id.sh脚本即可实现
包括 docker、fabric 相关的镜像和可执行文件、go 环境等
其中 docker 环境需要在所有节点上安装,fabric 相关的镜像和可执行文件和 go 环境只需要在 orderer 节点上安装
git clone [email protected]:Tiansir-wg/hyperledger-fabric-on-swarm.git
将 2 中下载的二进制文件放到项目的 bin 目录下
在 orderer 节点上,进入到 swarm 目录运行 setup-swarm-cluster.sh 脚本,将生成的 token 在其他每个节点上运行一次,以将其他节点加入到集群。然后在 orderer 节点上运行 setup-docker-network.sh 脚本,在集群之上构建一个 overlay 网络
在 orderer 节点上运行以下命令
./network.sh generateCrypto
只需首次搭建网络时运行,后续如果不删除则不用重新运行
在 orderer 节点上运行以下命令
./network.sh deployDocker
在 orderer 节点上运行以下命令
./network.sh createChannel
在 orderer 节点上运行以下命令
./network.sh deployCC -ccn basic -ccp ./applications/asset-transfer-basic/chaincode-go -ccl go
进入到applications/asset-transfer-basic/application-go目录,执行go run assetTransfer.go,即可执行应用程序
在84上执行./network.sh down即可销毁hyperledger fabric相关的服务,关闭并清理相关容器
当然为了不对下次运行造成影响,还需要在每个节点上执行./clear_volumes.sh脚本,将产生的数据一并清除