fabric配置的动态更新:动态添加orderer节点

场景:原raft机制的orderer节点不够用,需要进行动态扩充。

先决条件: 已成功运行的网络【可以执行链码的更新和查询操作】

作者环境

   系统环境—— fabric2.3  、docker20系列、java的智能合约

   网络环境——已有3个虚拟机进行搭建【虚拟机1:orderer     虚拟机2:peer1.org1  orderer1    虚拟机3:peer1.org2】  以下以VM1 VM2 VM3代替

预计目标: 在VM3内新增orderer2

——————————————————实践走起 ——————————————————

一、先生成orderer2节点的证书文件

   方法:1  用fabric系统自带工具 cryptogen进行生成   2 使用fabric—ca进行生成

            本文使用的是第一种

1  先修改crypto-config.yaml

      

修改的配置文件注入初始文件 cryptogen extend --input crypto-config  --config ./crypto-config.yaml

重点  要采用orderer节点的系统环境】 这是我的 大家需要修改自己的文件名  

现需要加入系统通道【可不能直接应用通道,会报错的】

export ORDERER_TLSCA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/traceability.com/orderers/orderer.traceability.com/msp/tlscacerts/tlsca.traceability.com-cert.pem
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/traceability.com/users/[email protected]/tls.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/traceability.com/users/[email protected]/msp/
export CORE_PEER_LOCALMSPID="OrdererMSP"

export CH_NAME=fabric.channel

2  获取最新配置区块 peer channel fetch config config_block.pb -o orderer.traceability.com:7050 -c $CH_NAME --tls --cafile $ORDERER_TLSCA

3  从config_block.pb中提取有效的数据,并转换成可编辑json格式   configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json

4  生成新的区块配置文件modified_config.json  需要修改俩处【对config.json中进行复制就好  】

即 cp  config.json modified_config.json

第一处

在orderer1后面添加 注意新的orderer2证书  其中server.cert需要转化base64编码

cat crypto-config/ordererOrganizations/traceability.com/orderers/orderer2.traceability.com/tls/server.crt | base64 > cert.txt      其中可以查看证书明细

第二处

5  对俩个json进行编码    configtxlator proto_encode --input modified_config.json --type common.Config --output config.pb    configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb

6  计算出两个文件的差异   configtxlator compute_update --channel_id fabric.channel --original config.pb --updated modified_config.pb --output config_update.pb

7   对文件差异进行解码并添加用于更新配置的头部信息:  

configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json

echo '{"payload":{"header":{"channel_header":{"channel_id":"fabric.channel", "type":3}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json  [注意type为新增orderer序列]

8  把封装好的json文件转换回pb格式文件

configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb

9 对该文件进行签名操作,用于更新配置

peer channel signconfigtx -f  updated_envelope.pb

10   提交更新请求

peer channel update -f channel-artifacts/updated_envelope.pb -c byfn-sys-channel -o orderer1.example.com:7050 --tls true --cafile $ORDERER_CA

 提交成功后出现如下:

同理 重复如上过程,将系统通道CH_NAME(fabric.channel)切换为应用通道mychannel 即可

最终启动编写的orderer2.yaml文件 

稍等一下  打印日志就可以看到上线成功,raft集群变为3    

动态填加org组织也是同样的道理 

猜你喜欢

转载自blog.csdn.net/weixin_45270330/article/details/133788490