首页 > 解决方案 > 未能订购交易。错误代码:SERVICE_UNAVAILABLE 使用 raft 共识协议

问题描述

我在使用 Raft 共识协议时遇到了这个错误,在该协议中我设置了 5 个排序器(1 个在第一个服务器中,2 个在其他 2 个服务器中),即 orderer1 到 orderer5。设置一切正常,所有订购者都参与订购者选举过程,但是当我尝试调用事务时,我遇到了这样的错误:

[ERROR] invoke-chaincode - Failed to order the transaction. Error code: SERVICE_UNAVAILABLE

仅当我尝试使用 orderer2 调用但与任何其他 orderer 一起使用时才会出现此错误。请帮助解决问题。

以下是 orderer2 及其运行的日志:

2019-08-13 07:05:59.374 UTC [orderer.consensus.etcdraft] run -> INFO 318 raft.node: 2 elected leader 4 at term 2 channel=invoice node=2
2019-08-13 07:05:59.375 UTC [orderer.consensus.etcdraft] serveRequest -> INFO 319 Raft leader changed: 0 -> 4 channel=invoice node=2
2019-08-13 07:05:59.580 UTC [common.deliver] Handle -> WARN 31a Error reading from xx.xx.xx.xx:56890: rpc error: code = Canceled desc = context canceled
2019-08-13 07:05:59.580 UTC [comm.grpc.server] 1 -> INFO 31b streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Deliver grpc.peer_address=xx.xx.xx.xx:56890 error="rpc error: code = Canceled desc = context canceled" grpc.code=Canceled grpc.call_duration=207.535623ms
2019-08-13 07:13:20.952 UTC [orderer.common.broadcast] ProcessMessage -> WARN 320 [channel: invoice] Rejecting broadcast of normal message from xx.xx.xx.xx:56916 with SERVICE_UNAVAILABLE: rejected by Order: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.224.4:8050: connect: connection refused"
2019-08-13 07:13:20.952 UTC [comm.grpc.server] 1 -> INFO 321 streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Broadcast grpc.peer_address=xx.xx.xx.xx:56916 grpc.code=OK grpc.call_duration=35.477429971s

标签: hyperledger-fabrichyperledgerraft

解决方案


我刚刚遇到了这个问题,orderer2 也是如此。对我来说,我在订购者配置中犯了一个错字。在 General.Cluster 部分,我不小心将 ClientCertificate 和 ClientPrivateKey 字段重命名为 ServerCertificate 和 ServerPrivateKey。我切换了它们,将 Server* 值留空,并与其他人一起指向我的客户端证书,一切正常。


推荐阅读