树莓派arm64下搭建fabric1.4的raft多机部署

本文的大致目录如下:
1、 版本解读
2、 Ubuntu16.0.4-amd64基础环境的搭建:go、docker、git、docker-compose
3、 树莓派基础环境搭建
4、 环境测试(amd64和arm64)
5、 Raft多机部署(fabric1.4)
6、踩过的坑

文中所需要的文档均打包一份,上传至Github

1、 版本解读

本文所述的Fabric1.4的安装部署环境主要有:
(1)Ubuntu16.0.4-amd64(也适用于高于此版本的);
(2)树莓派的Ubuntu-arm64。

需要考虑的问题:
(1) 树莓派的CPU核心是arm64,fabric官方没有发布arm64版本的docker镜像。也没有发布相对应的二进制文件(peer、orderer、configtxgen等),这个经过一次次测验,选定了合适的镜像和二进制文件;
(2) Fabric的版本v1.x—>v2.x,经过一次大版本的变迁,从而导致出现了很多问题,解决起来比较烧脑无厘头。相比较下,可查阅资料相对齐全,遇到问题网络可查,不会太烧脑的版本只有v1.4。所以本文的fabric版本以及相关的东西都对照这个版本。

重点说明:本文中的所需的资料,大部分都上传至GoFS的公共账户中,有需要可以自行下载。其他游客,可以从邮件

1.1 软件环境
适用于Ubuntu版本,可以有小偏差。GOlang、docker、docker-compose、git可以下载最新的。

2、 Ubuntu16.0.4-amd64基础环境的搭建:go、docker、git、docker-compose

详情见此篇博客:https://blog.csdn.net/i_want_study/article/details/107593427
走过路过来个关注😄😄😄

3、 树莓派基础环境搭建

说明:树莓派的CPU是arm64架构的,和我们日常使用的电脑采用的amd64架构不同,所以在版本安装的时候一定要注意。

主要介绍一个用脚本安装go的过程,其他的软件安装参考:参考地址

树莓派系统:ubuntu18.0.4
设备(还有一台设备是自己使用的笔记本host1,但是不是树莓派系统):

主机IP
host210.10.45.66
host310.10.45.67
host410.10.45.68

在这里插入图片描述

(仅以一台设备为例)

开始搭建环境====>
所需的基础环境:dockergitgolangfabric

其中部分环境,安装系统之后就有,不需要重复安装。


Go的安装:脚本实现。
(1)将所需安装脚本go_install.sh通过scp拷贝到树莓派host1

1.	# 在自己的宿主机上执行此命令,根据实际情况将用户换成自己的。  
2.	# scp 文件路径 目标机用户@目标机地址:文件存储文件夹  
3.	~$ scp /home/yjzhu/Downloads/go_install.sh ubuntu@10.10.45.66:/home/ubuntu/Downloads  

(2)执行脚本;(安装脚本需要更改调整,根据自己的实际情况,调整其中的路径即可)
进入host1中,在终端执行下述:

1.	~$ cd Downloads  
2.	~$ chmod +x go_install.sh  
3.	~$ sudo ./go_install  
4.	~$ cd ..
5.	~$ sudo chown –R yjzhu gopath

(3)重启

1.	~$ source /etc/profile  
2.	~$ sudo reboot  

4、 镜像和二进制文件部署(arm64)

先在GoFS上下载所需的文件(1、bin文件夹中的二进制文件2、拉取fabric镜像的脚本)。

通过scp将文件传输到树莓派hostN上。

1.	# 在自己的宿主机上执行此命令,根据实际情况将用户换成自己的。  
2.	# scp 文件路径 目标机用户@目标机地址:文件存储文件夹  
3.	~$ scp /home/yjzhu/Downloads/get-images.sh ubuntu@10.10.45.66:/home/ubuntu/Downloads
4.	~$ scp –r /home/yjzhu/Downloads/bin ubuntu@10.10.45.66:/home/ubuntu/Downloads

然后进入树莓派hostN上(以host1为例):

1.	~$ cd Downloads
2.	# 镜像拉取 
3.	~$ chmod +x get-images.sh
4.	~$ ./get-images.sh
5.	# 二进制文件归位
6.	~$ cp ~/Downloads/bin/* ~/gopath/bin/

5、 Raft多机部署(fabric1.4)

节点部署示意:
主机 IP 节点

用户IP节点
yjzhu(host1)10.10.39.70oderer、orderer5、peer0.org1
Ubuntu-arm64(host2)10.10.45.66orderer2、peer1.org1
Ubuntu-arm64(host3)10.10.45.67orderer3、peer0.org2
Ubuntu-arm64(host4)10.10.45.68orderer4、peer1.org2

环境配置文件:在GoFS上下载,位置如下所示:

同样,在宿主机上通过scp将文件传到树莓派hostN上。下面将详细介绍操作部署流程。
宿主机(开四个终端,分别命名host1host2host3host4

不会命名的小伙伴,就心中给四个终端排个顺序就行,因为后面的操作需要在四个终端中不停的切换。

为了让大家了解部署的原始流程,先用原始的流程大致介绍一下,然后再根据实际情况介绍一下怎么使用。

====================>
原始部署从此开始:


Host1:

1.	# 将所需的文件通过scp发送到其他三个树莓派上  
2.	$ tar xzvf /home/ubuntu/Downloads/fabric-ectdraft.tar.gz -C /home/yjzhu/gopath/src/github.com/hyperledger/
3.	# 现在在/home/yjzhu/gopath/src/github.com/hyperledger下有个文件夹名为fabric-etcdraft,进入该文件夹
4.	$ cd /home/yjzhu/gopath/src/github.com/hyperledger/fabric-etcdraft
5.	# 由于我上传的是一个拥有通道、创世区块和节点的文件,所以先删除其中的生成的东西然后再重新生成。 
6.	# 如何删除这个,简单点,直接打开你的文件管理器找到这个,把channel-artifacts和crypto-config下的所有东西都删除,使他们成为一个空的文件夹
7.	# 删除之后,接下来就开始步入正题,开始一系列的流程=================================================================》
8.	$ cd /home/yjzhu/gopath/src/github.com/hyperledger/fabric-etcdraft
9.	$ cryptogen generate --config=./crypto-config.yaml
10.	# 此处十分注意一个通道的名称配置,-channelID的参数本该是系统默认的,但是可能会因为某些原因需要自己输入,千万不要瞎起名字,就是这个byfn-sys-channel,如果写错,后面的处理过程中,出现错误,你都不知道错在哪。其实就是起始这个位置出的错。
11.	$ configtxgen -profile SampleMultiNodeEtcdRaft -outputBlock ./channel-artifacts/genesis.block –channelID byfn-sys-channel
12.	# 此处的-channelID可以随便起,可以这么理解,上面是一个系统通道,下面这个是链码通道,我们使用的是链码通道
13.	$ configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
14.	$ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
15.	$ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
 
16.	# 到此,已经生成所有必须的密码学资料文件,下面开始将这个准备好资料的文件夹通过scp发送到host2,host3,host4
17.	$ scp -r /home/yjzhu/gopath/src/github.com/hyperledger/fabric-ectdraft ubuntu@10.10.45.66:/home/ubuntu/gopath/src/github.com/hyperldger/ 
18.	$ scp -r /home/yjzhu/gopath/src/github.com/hyperledger/fabric-ectdraft ubuntu@10.10.45.67:/home/ubuntu/gopath/src/github.com/hyperldger/ 
19.	$ scp -r /home/yjzhu/gopath/src/github.com/hyperledger/fabric-ectdraft ubuntu@10.10.45.68:/home/ubuntu/gopath/src/github.com/hyperldger/  

Host2:

1.	$ ssh ubuntu@10.10.45.66   
2.	$ cd /home/ubuntu/gopath/src/github.com/hyperledger/fabric-etcdraft  

Host3:

3.	$ ssh ubuntu@10.10.45.67
4.	$ cd /home/ubuntu/gopath/src/github.com/hyperledger/fabric-etcdraft  

Host4:

5.	$ ssh ubuntu@10.10.45.68   
6.	$ cd /home/ubuntu/gopath/src/github.com/hyperledger/fabric-etcdraft  

下面开始构建网络运行,我们通过swarm来构建叠加网络


Host1:

1.	# 为了不同机器之间实现通信,我们采用docker swarm来建立我们所需的网络 
2.	$ docker swarm init –-advertise-addr 10.10.39.70
3.	$ docker swarm join-token manager
4.	# 上面的命令返回一个值,如下所示:
5.	 
6.	# 一会使用返回的这个值,将host2,host3,host4加入到网络中
7.	$ docker network create --attachable --driver overlay first-network
8.	$ docker network ls
9.	 

Host2:

7.	$ docker swarm join --token SWMTKN-1-5siwc3ahrq16zezmhbkx514crogzw31lnvydveouag9kp28t2q-20fqbkigo1ib174n0n2fv8l57 10.10.39.70:2377 –advertise-addr 10.10.45.66  
8.	$ docker network ls
9.	# 如果返回的结果包含first-network,那么就加入成功
10.	 

其他host3和host4和这个步骤一样



接下来开始启动网络,host1,host2,host3,host4启动命令大致相同


11.	$ docker-compose –f hostN.yaml up -d   
12.	$ docker ps –a
13.	# 可以看到相关节点都已经启动。

测试网络,尝试链码测试
Host1:

1.	# 创建应用通道
2.	$ docker exec –it cli bash
3.	# 下面的操作都是在cli容器中执行
4.	 echo $CHANNEL_NAME
5.	 export CHANNEL_NAME=mychannel
6.	 export CAFILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
7.	# 创建通道
8.	 peer channel create –o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile $CAFILE
9.	# 加入通道
10.	 peer channel join –b mychannel.block
11.	# 更新锚节点 
12.	 peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile $CAFILE
13.	 CORE_PEER_LOCALMSPID="Org2MSP"
14.	 CORE_PEER_ADDRESS=peer0.org2.example.com:7051
15.	 CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin\@org2.example.com/msp
16.	 CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
17.	 peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile $CAFILE
18.	 peer channel join -b mychannel.block
19.	# 接下来,先退出容器,ctrl+q+p

接下来测试一下链码:

14.	$ docker exec –it cli bash   
15.	# 接下来的内容在cli容器中操作
16.	 peer channel list
17.	# 返回结果会显示所在的通道mychannel
18.	# 安装链码
19.	 peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
20.	# 实例化链码
21.	 CAFILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
22.	 peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $CAFILE -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"
23.	# 查询链码
24.	 peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
25.	# 返回结果为100

至此,我们的多机部署基本的流程大致完成。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值