Hyperledger Caliper远程连接Fabric节点报错:无有效Peer响应
Hyperledger Caliper测试报错:No valid responses from any peers 排查方案
问题概述
远程服务器部署3组织(各1Peer节点)的Hyperledger Fabric网络,使用Hyperledger Caliper基于asset-transfer-basic链码开展基准测试。本地环境测试正常,但修改网络配置URL并在证书生成阶段添加SANs后,测试失败,worker迭代环节抛出No valid responses from any peers错误。远程Peer节点的TLS握手日志显示连接成功,且本地通过peer命令可正常查询链码数据。
错误日志
Caliper报错信息
error: [Transaction]: Error: No valid responses from any peers. Errors: +0000 debug [worker-message-handler] Handled "test" message for Worker (24258) error [connectors/v2/FabricGateway] Failed to perform submit transaction [DeleteAsset] using arguments [2_1], with error: Error: No valid responses from any peers. Errors: at newEndorsementError (/home/ubuntu/caliper/node_modules/fabric-network/lib/transaction.js:49:12) at getResponsePayload (/home/ubuntu/caliper/node_modules/fabric-network/lib/transaction.js:17:23) at Transaction.submit (/home/ubuntu/caliper/node_modules/fabric-network/lib/transaction.js:212:28) at async V2FabricGateway._submitOrEvaluateTransaction (/home/ubuntu/caliper/node_modules/@hyperledger/caliper-fabric/lib/connector-versions/v2/FabricGateway.js:376:26) at async V2FabricGateway._sendSingleRequest (/home/ubuntu/caliper/node_modules/@hyperledger/caliper-fabric/lib/connector-versions/v2/FabricGateway.js:170:16) at async V2FabricGateway.sendRequests (/home/ubuntu/caliper/node_modules/@hyperledger/caliper-core/lib/common/core/connector-base.js:78:28) at async MyWorkload.cleanupWorkloadModule (/home/ubuntu/caliper/workload/readAsset.js:52:13) at async CaliperWorker.executeRound (/home/ubuntu/caliper/node_modules/@hyperledger/caliper-core/lib/worker/caliper-worker.js:214:13) at async WorkerMessageHandler._handleTestMessage (/home/ubuntu/caliper/node_modules/@hyperledger/caliper-core/lib/worker/worker-message-handler.js:235:22) at async ProcessMessenger.<anonymous> (/home/ubuntu/caliper/node_modules/@hyperledger/caliper-core/lib/worker/worker-message-handler.js:93:13)
Peer节点TLS握手日志
DEBU [core.comm] ServerHandshake -> Server TLS handshake completed in 10.515647ms server=PeerServer remoteaddress=18.216.197.203:39598 DEBU [core.comm] ServerHandshake -> Server TLS handshake completed in 12.640673ms server=PeerServer remoteaddress=18.216.197.203:39620 DEBU [core.comm] ServerHandshake -> Server TLS handshake completed in 18.734087ms server=PeerServer remoteaddress=18.216.197.203:39610 DEBU [core.comm] ServerHandshake -> Server TLS handshake completed in 17.251823ms server=PeerServer remoteaddress=18.216.197.203:39626 DEBU [core.comm] ServerHandshake -> Server TLS handshake completed in 9.189911ms server=PeerServer remoteaddress=18.216.197.203:39628
环境配置
Caliper networkconfig文件
name: Caliper test version: "2.0.0" caliper: blockchain: fabric sutOptions: mutualTls: true channels: - channelName: mychannel contracts: - id: basic organizations: - mspid: Org1MSP identities: certificates: - name: "User1" clientPrivateKey: path: "network-profiles/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk" clientSignedCert: path: "network-profiles/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem" connectionProfile: path: "network-profiles/peerOrganizations/org1.example.com/connection-org1.yaml" discover: false - mspid: Org2MSP identities: certificates: - name: "User1" clientPrivateKey: path: "network-profiles/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/priv_sk" clientSignedCert: path: "network-profiles/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem" connectionProfile: path: "network-profiles/peerOrganizations/org2.example.com/connection-org2.yaml" discover: false - mspid: Org3MSP identities: certificates: - name: "User1" clientPrivateKey: path: "network-profiles/peerOrganizations/org3.example.com/users/User1@org3.example.com/msp/keystore/priv_sk" clientSignedCert: path: "network-profiles/peerOrganizations/org3.example.com/users/User1@org3.example.com/msp/signcerts/User1@org3.example.com-cert.pem" connectionProfile: path: "network-profiles/peerOrganizations/org3.example.com/connection-org3.yaml" discover: false
本地peer命令查询结果
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}' [{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5,"docType":"asset"},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5,"docType":"asset"},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10,"docType":"asset"},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10,"docType":"asset"},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15,"docType":"asset"},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15,"docType":"asset"}]
排查方向与解决方法
1. 检查连接配置文件完整性
每个组织的connection-orgX.yaml需确认:
- Peer的URL是否为远程服务器的公网IP/域名,端口正确(默认grpcs端口7051)
- TLS根证书路径指向Caliper主机上正确导入的文件,且证书内容与远程Peer的根证书一致
- 开启
mutualTls后,connection配置中是否指定了客户端证书和私钥路径(与networkconfig中的User1证书路径对应)
2. 验证链码背书策略
DeleteAsset属于提交类交易,需满足链码背书策略:
- 查看
asset-transfer-basic链码的背书策略,默认可能要求多数组织(如2/3)的Peer背书 - 检查Caliper的workload配置是否使用了足够的组织身份提交交易,或在networkconfig中是否为交易指定了正确的背书节点
- 若
discover=false,需手动在connection配置中添加所有需要参与背书的Peer节点,否则Caliper无法找到这些节点完成背书
3. 确认SAN配置正确性
证书生成时添加的SAN必须覆盖客户端连接Peer时使用的地址:
- 用以下命令检查Peer证书的SAN字段:
openssl x509 -in peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt -text -noout | grep -A 3 "Subject Alternative Name" - 确认输出中包含远程服务器的公网IP/域名,否则客户端会因证书身份验证失败拒绝交易响应(即使TLS握手成功,后续交易验证仍可能失败)
4. 调整交易超时设置
远程网络延迟可能导致Caliper默认超时不足:
- 在benchmark配置文件中添加超时参数:
workload: options: transactionTimeout: 30 # 单位:秒 - 或在Fabric连接器配置中调整更细粒度的超时(如
endorseTimeout、commitTimeout)
5. 深度排查Peer节点日志
虽然TLS握手成功,但Peer可能在交易处理阶段出错:
- 查看Peer的debug日志,搜索
DeleteAsset或endorsement相关条目,确认是否存在背书失败、链码容器异常、权限拒绝等具体错误 - 检查Peer的链码容器是否正常运行,用
docker logs <chaincode-container-id>查看链码日志
内容的提问来源于stack exchange,提问作者ov1n
相关产品推荐
相关产品推荐

