kafka集群环境部署fabric1.4.6

kafka集群模式下部署fabric

先把 crypto-config.yaml 和 configtx.yaml 两个文件上传到kafka0这个服务器。
找到我们部署单机环境的那个包hyperledger-fabric-linux-amd64-1.4.6.tar.gz

首先,我们在kafka0或者说默认为第一台服务器进行操作。

cd   /opt/gopath/src/github.com/hyperledger/fabric/kafkapeer

然后将压缩文件上传到这个目录下,解压,赋权。
(按理来说这里在singlepeer目录下就是这个包,所以可以直接复制过来)

cd  /opt/gopath/src/github.com/hyperledger/fabric/singlepeer
cp hyperledger-fabric-linux-amd64-1.4.6.tar.gz  /opt/gopath/src/github.com/hyperledger/fabric/kafkapeer/
tar -zxvf hyperledger-fabric-linux-amd64-1.4.6.tar.gz 
chmod -R 777 ./bin

然后我们再生成公私钥和证书。

 ./bin/cryptogen generate --config=./crypto-config.yaml

然后生成创世区块的文件

 mkdir channel-artifacts
 ./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

然后生成通道配置文件:

./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel

那么现在这个目录下应该有这些东西:
在这里插入图片描述

接下来就需要用到我们上一篇文章配置的服务器免密登录了。我们生成的证书文件,为了保证集群的一致性,这里要求8台服务器是用第一台的证书文件的。

 cd ..
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric
 scp -r kafkapeer [email protected]:/opt/gopath/src/github.com/hyperledger/fabric

然后按照上一篇博文给出的文件,一一按照对应,将docker配置文件上传到指定位置。

kafka0应有的文件:
在这里插入图片描述
kafka1应有的文件:
在这里插入图片描述
kafka2应有的文件:
在这里插入图片描述
kafka3应有的文件:
在这里插入图片描述
org1peer0应有的文件:
在这里插入图片描述
org1peer1应有的文件:
在这里插入图片描述
org2peer0应有的文件:
在这里插入图片描述
org2peer1应有的文件:
在这里插入图片描述
请注意,虽然这里有部分服务器上文件是一样的,但是其实他们内容是不一样的,所以严格按照我给出的文件,对应不同的服务器,不要上传错了。


然后是启动kafka集群。

前文中我们知道,集群是前四个服务器构成的,主要有kafka,orderer,zookeeper三个服务构成。这里我们先启动zookeeper服务器,然后启动Kafka,后面启动orderer。这个顺序是有说法有讲究的,不要随意更改顺序。原因是启动kafka要靠zookeeper基础,然后启动Kafka构建集群,防止集群崩溃之类的,然后orderer作为背书节点要等到前面两个服务启动了才能开启?(我猜的,因为看docker-compose的启动文件是这么理解的)

先启动zookeeper:

zookeeper0(服务器192.168.137.128):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-zookeeper.yaml up -d

zookeeper1(服务器192.168.137.129):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-zookeeper.yaml up -d

zookeeper2(服务器192.168.137.130):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-zookeeper.yaml up -d

然后启动Kafka:

kafka0(服务器192.168.137.128):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-kafka.yaml up -d

kafka1(服务器192.168.137.129):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-kafka.yaml up -d

kafka2(服务器192.168.137.130):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-kafka.yaml up -d

kafka3(服务器192.168.137.131):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-kafka.yaml up -d

最后是启动orderer:

orderer0(服务器192.168.137.128):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-orderer.yaml up -d

orderer1(服务器192.168.137.129):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-orderer.yaml up -d

orderer2(服务器192.168.137.130):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-orderer.yaml up -d

在这里,虽然只有短短几行命令,你只用复制粘贴,但请务必看一下我的这篇文章

https://blog.csdn.net/weixin_44573310/article/details/124254255

而不是简简单单地复制粘贴,否则很有可能即使你看起来服务都已经开启完毕,但是你依旧在创建channel或者加入节点那一步出错:

这个时候集群就算是启动了,检查一下状态:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后我们来启动peer节点:

org1peer0(服务器192.168.137.132):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-peer.yaml up -d

org1peer1(服务器192.168.137.133):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-peer.yaml up -d

org2peer0(服务器192.168.137.134):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-peer.yaml up -d

org2peer1(服务器192.168.137.135):

cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer
docker-compose -f docker-compose-peer.yaml up -d

启动之后检查一下就是这样:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在org1peer0这个服务器里,在kafkapeer目录下,把官方的exampl02示例放进去:
在这里插入图片描述

尝试运行我们的fabric网络。

在org1peer0这个服务器里面:
先进入容器:

docker exec -it cli bash

然后指定CA证书位置和创建channel

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer channel create -o orderer0.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx --tls --cafile $ORDERER_CA

创建完毕就加入channel:

peer channel join -b mychannel.block

这个时候就先别动了,我们在容器的当前目录下会生成一个区块文件,退出来之后复制出来(有些可能想着安装实例化之后再把创世区块给传出去,这个是不行的哈,只能在还没安装这一步进行操作,具体原因不清楚,大概是如果这边先安装实例化了,对于其他服务器来讲就有一个信息不对称的问题,反正就是当前的mychannel.block文件当中不能有任何的交易记录,这样子讲应该比较容易理解一些)
输入exit退出容器,将我们目前的这个文件保存在其他服务器上。
在这里插入图片描述
在这里插入图片描述
这里这个命令其实就是将容器内部这个文件复制到物理机kafkapeer这个目录下,所以那个id得自己去看看自己的,不能直接抄,要与自己的一致:

docker cp 2e67a177971a:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block /opt/gopath/src/github.com/hyperledger/fabric/kafkapeer

然后我们在容器外部物理机中就有了这个文件了:
在这里插入图片描述
这个时候将这个文件拷贝到其他服务器上去,这里我没开四台虚拟机只开了org1peer0和org2peer0这两个虚拟机,所以我这里只复制到org2peer0这台服务器上,在实际生产的时候,大家注意别漏掉一些服务器了,这个只是为了可怜一下电脑,做个教学:

scp mychannel.block [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/kafkapeer

所以在org2peer0这里就有了这个文件:
在这里插入图片描述

注意,这个时候,还是在org1pper0这台机器上进行操作
然后是安装链码,这个随便找个官方的那个example02的例子就行,我是放在/kafkapeer/chaincode/go/example02/这个目录下的。

docker exec -it cli bash
peer chaincode install -n mycc -p github.com/hyperledger/fabric/kafkapeer/chaincode/go/example02/ -v 1.0

然后我们实例化一下基本数据(因为刚才退出去了,所以orderer_ca这个指定的环境地址就没了,要重新写一遍,后面可以将这个写到docker的环境变量里面去):

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer chaincode instantiate -o orderer0.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","200","b","400"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')"

接着查询:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

这个时候A的账户余额就出来了:
在这里插入图片描述


然后我们在org2peer0这台服务器上启动容器

docker-compose -f docker-compose-peer.yaml up -d

随后进入:

docker exec -it cli bash

然后我们记下这个时候org2peer0上面启动容器的id,将我们mychannel.block的区块信息输进去:

docker cp /opt/gopath/src/github.com/hyperledger/fabric/kafkapeer/mychannel.block 79b2cc494c8d:/opt/gopath/src/github.com/hyperledger/fabric/peer/

在这里插入图片描述
在这里插入图片描述
然后再进入docker内部:

docker exec -it cli bash

这个时候我们就不用再创建channel了,因为这个区块信息已经包含了,我们现在需要做的只是加入channel:

peer channel join -b mychannel.block

在这里插入图片描述
接着我们就在这个org2peer0服务器安装链码,当然这里需要与之前的org1peer0上的链码保持一致,就是同一个地址的example02的go文件:

peer chaincode install -n mycc -p github.com/hyperledger/fabric/kafkapeer/chaincode/go/example02/ -v 1.0

在这里插入图片描述
然后我们测试一下,在org2peer0上面。试试A向B转账:

ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer chaincode invoke --tls --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

在这里插入图片描述
这个交易的时间可能会稍微久一点,耐心等待;其实在安装实例化链码,进行交易的时候都会通信一会,是正常现象。

然后我们再回到org1peer0这个服务器这里,执行上一步的查询:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

在这里插入图片描述
我们就会发现,刚才查询A的余额是200,在经历了org2peer0的转账操作之后,再一次查询就只有180了,这就是kafka集群模式下,多个peer中任意一个peer对区块链上数据进行维护,对于其他的peer来讲都是同步的。这里虽然只用了两台服务器,但无论我开不开那剩下两台,原理都是一样的,差不多这就是整个教程的结束。


下一步就是新建一个peer节点动态加入当前的集群。这里建议大家将每台服务器都备份或者整个镜像出来,毕竟忙活这么久了,万一要是有个什么不测就真的难受了。

猜你喜欢

转载自blog.csdn.net/weixin_44573310/article/details/123602757