向basicnetwork-Tuna App添加新Peer时出错的技术咨询
解决Peer1加入通道失败的常见方案
我明白你现在的情况:基于Tuna-App搭建的basicnetwork已经成功添加了Peer1节点,所有容器(peer0、peer1、cli、ca、orderer、coughdb、coughdb2及tuna-app-1.0)都正常运行,Peer0也顺利加入了通道,但Peer1在尝试加入同一通道时遇到了错误。下面是我整理的几个关键排查和解决步骤,你可以逐一尝试:
1. 先确认Peer1的核心配置是否正确
- 检查Peer1的
core.yaml配置文件,重点关注:peer.channel相关配置要和Peer0保持一致,尤其是channelParticipation和discovery的参数设置peer.discovery.cluster的端点配置要指向Peer1自身的容器地址(比如peer1.org1.example.com:7051)
- 验证Peer1的环境变量配置,
CORE_PEER_ADDRESS、CORE_PEER_LOCALMSPID、CORE_PEER_MSPCONFIGPATH这些参数必须和Peer0属于同一个MSP(比如Org1MSP)
2. 确保通道配置已包含Peer1的节点信息
Peer1要加入通道,必须先把它的节点信息添加到通道的配置里,步骤如下:
- 进入CLI容器,获取当前通道的配置块:
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c mychannel --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - 将配置块转成JSON格式以便编辑:
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json jq .data.data[0].payload.data.config config_block.json > config.json - 编辑
config.json,把Peer1的节点信息添加到channel_group.groups.Application.groups.Org1MSP.values.MSP.config.peers数组中 - 重新编码配置并生成更新交易:
configtxlator proto_encode --input config.json --type common.Config --output config.pb configtxlator proto_encode --input updated_config.json --type common.Config --output updated_config.pb configtxlator compute_update --channel_id mychannel --original config.pb --updated updated_config.pb --output config_update.pb configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb - 提交配置更新到通道:
peer channel update -f config_update_in_envelope.pb -c mychannel -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
3. 检查Peer1加入通道的命令是否正确
执行加入命令前,一定要先在CLI容器中切换到Peer1的环境配置,再执行加入命令:
# 切换到Peer1的环境 export CORE_PEER_ADDRESS=peer1.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp # 执行加入通道命令 peer channel join -b mychannel.block -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
4. 验证网络连通性与日志排查
- 进入Peer1容器,测试和Orderer、Peer0的网络连通性,确保没有网络不通的问题:
docker exec -it peer1.org1.example.com ping orderer.example.com docker exec -it peer1.org1.example.com ping peer0.org1.example.com - 查看Peer1的日志,获取具体错误信息,这是定位问题最直接的方式:
docker logs peer1.org1.example.com
日志里通常会明确说明失败原因,比如证书不匹配、通道配置不存在、网络超时等。
5. 确认通道区块文件有效性
确保你用来让Peer1加入的mychannel.block是最新的通道配置块,并且这个文件已经正确放置在CLI容器或Peer1容器能访问的路径下。如果区块文件过时,Peer1会因为配置不匹配而加入失败。
内容的提问来源于stack exchange,提问作者Bhaskar Erukula
相关产品推荐
相关产品推荐

