fabric1.4版本共识由kafka转换raft方法
方案
- 系统进入维护模式,应用交易将被拒绝,只有排序服务管理员可以对通道配置进行更新;
- 系统停止运行,考虑到迁移过程可能出错,对数据进行备份;
- 系统启动,每个通道的共识类型和基础数据进行了修改;
- 系统重启,并开始以 Raft 共识模式运行;每个通道都验证确认已经完成了选举;
- 系统退出维护模式并正常提供服务;
注意
-
检查证书 是否存在这个证书
crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem
如果不存在 此文档不适合升级 -
首先获取所有通道配置 检查一共有几个orderer 甄选适合参与raft的共识orderer 多余删除少添加 (建议使用大于等于5个 我这里测试只用了三个)
-
列出所有通道 包含系统通道 这个系统通道是当初创建创世区块的 -channelID byfn-sys-channel指定的
-
保证参与raft的orderer之间可以通信
Step1. 准备
操作时在cli的容器中完成的
export 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
export CHANNEL_NAME=mychannel //此处需要根据不同通道而改变
//创建操作目录
mkdir Maintenance_mode_$CHANNEL_NAME && cd Maintenance_mode_$CHANNEL_NAME
Step2. 获取所有通道最新的区块配置改成维护模式
(有几个通道需要执行Step1 Step2几遍) 其中别忘设置通道名称环境变量
注意 : 千万不要忘记系统通道 byfn-sys-channel也需要改配置
1. 获取区块命令
peer channel fetch config config_block.pb -o orderer0.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
2. pb文件转json
configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
3. 复制
cp config.json config_mod.json
4. 修改config_mod.json中的模式为维护模式
sed -i 's/NORMAL/MAINTENANCE/g' config_mod.json
5. 组装更新pb
(1). configtxlator proto_encode --input config.json --type common.Config --output config.pb
(2). configtxlator proto_encode --input config_mod.json --type common.Config --output modified_config.pb
(3). configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output config_update.pb
(4). configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate | jq . > config_update.json
(5). echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_envelope.json //注意不同通道修改channel_id
(6). configtxlator proto_encode --input config_update_envelope.json --type common.Envelope --output config_update_in_envelope.pb
6. 对要更新的签名
peer channel signconfigtx -f config_update_in_envelope.pb
7. 环境变量
export CORE_PEER_LOCALMSPID="OrdererMSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp/
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
8. 证书说明
此处提交时用orderer的 admin的证书 (因此需要保证部署生成的orderer证书里面包含example.com/msp/admincerts/Admin@example.com-cert.pem )
peer channel update -f config_update_in_envelope.pb -c $CHANNEL_NAME -o orderer0.example.com:7050 --tls --cafile $ORDERER_CA
Step3. 重启容器
此操作退出cli容器
如果是多机部署的 需要分别cli peer3 peer2 peer1 peer0 orderer2 orderer1 orderer0 kafka3 kafka2 kafka2 kafka0 zookeeper2 zookeeper1 zookeeper0重启
注意重启kafak 需要停顿一下 保证kafka之间完成
docker restart $(docker ps -a | grep "hyperledger/fabric" | awk '{print $1}')

最低0.47元/天 解锁文章
5681

被折叠的 条评论
为什么被折叠?



