fabric1.4版本共识由kafka转换raft方法

fabric1.4版本共识由kafka转换raft方法

方案

  1. 系统进入维护模式,应用交易将被拒绝,只有排序服务管理员可以对通道配置进行更新;
  2. 系统停止运行,考虑到迁移过程可能出错,对数据进行备份;
  3. 系统启动,每个通道的共识类型和基础数据进行了修改;
  4. 系统重启,并开始以 Raft 共识模式运行;每个通道都验证确认已经完成了选举;
  5. 系统退出维护模式并正常提供服务;

注意

  1. 检查证书 是否存在这个证书
    crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem
    如果不存在 此文档不适合升级

  2. 首先获取所有通道配置 检查一共有几个orderer 甄选适合参与raft的共识orderer 多余删除少添加 (建议使用大于等于5个 我这里测试只用了三个)

  3. 列出所有通道 包含系统通道 这个系统通道是当初创建创世区块的 -channelID byfn-sys-channel指定的

  4. 保证参与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}')

Step4. 修改通道配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值