irpas技术客

kafka集群环境部署fabric1.4.6_尘缘何人续xh

irpas 8085

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 root@192.168.137.129:/opt/gopath/src/github.com/hyperledger/fabric scp -r kafkapeer root@192.168.137.130:/opt/gopath/src/github.com/hyperledger/fabric scp -r kafkapeer root@192.168.137.131:/opt/gopath/src/github.com/hyperledger/fabric scp -r kafkapeer root@192.168.137.132:/opt/gopath/src/github.com/hyperledger/fabric scp -r kafkapeer root@192.168.137.133:/opt/gopath/src/github.com/hyperledger/fabric scp -r kafkapeer root@192.168.137.134:/opt/gopath/src/github.com/hyperledger/fabric scp -r kafkapeer root@192.168.137.135:/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 root@192.168.137.134:/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节点动态加入当前的集群。这里建议大家将每台服务器都备份或者整个镜像出来,毕竟忙活这么久了,万一要是有个什么不测就真的难受了。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #