区块链服务 BCS区块链服务 BCS

文档首页> 区块链服务 BCS> 常见问题> Hyperledger Fabric增强版> 数据上链> 区块链服务交易连接失败或连接超时
更新时间:2021/09/16 GMT+08:00
分享

区块链服务交易连接失败或连接超时

问题现象

区块链服务交易连接失败或连接超时。

排查思路

•排查项一:链码首次实例化后发起交易超时。

•排查项二:服务状态异常。

•排查项三:客户端所使用的fabric-SDK与区块链服务版本不匹配。

•排查项四:peer节点账本不同步。

•排查项五:DB文件不存在。

•排查项六:CouchDB服务版本升级或重启。

•排查项七:区块链应用客户端发起上链请求,返回请求超时,但数据可以上链

解决方案

  • 排查项一:链码首次实例化后发起交易超时。

    HCS8.1.0已不支持创建Fabric v1.4.0版本的实例。

    BCS服务3.0.x版本(对应Fabric v1.4.0内核)在实例化链码时,仅会拉起各组织其中一个Peer对应的链代码容器,而其余Peer的链代码容易构建和拉起将在该Peer首次进行交易背书时触发。该过程耗时较长,可能出现交易超时的情况:

    如使用Go SDK进行区块链操作,则无需处理该问题,SDK会等待链码容器拉起,不会出现超时情况。

    如使用Java SDK进行交易,为避免该问题,可在应用中使用req.setProposalWaitTime()设置背书超时时间。如下图所示,将背书超时时间设定为60秒,可避免一般链码在这种该情况下的首次交易失败问题。

  • 排查项二:服务状态异常。

    登录BCS控制台,查看服务状态,并根据状态提示进行排查解决。具体参考区块链服务状态为“异常”时,如何排查解决?

  • 排查项三:客户端所使用的fabric-SDK与区块链服务版本不匹配。

    进入BCS控制台,单击“服务管理”,单击交易异常的服务名称,并单击“更多信息”,查看版本信息。

    根据“版本信息”显示的Hyperledger Fabric版本,排查客户端所使用的fabric-sdk是否与其一致。如果版本不一致,会导致交易失败、交易超时等情况发生。

    解决方案

    根据服务实际的Hyperledger Fabric版本,下载对应的fabric-sdk包开发客户端。

    Fabric源码包下载地址:https://github.com/hyperledger/fabric

  • 排查项四:peer节点账本不同步。
    1. 进入BCS控制台,单击“服务管理”,选择交易异常的服务,进入区块链管理页面,并单击“区块浏览器”,选择交易异常的通道,查看“区块列表”中显示的当前通道区块数。

    2. 登录部署BCS区块链的云服务器,并执行docker ps|grep k8s_peer指令查看peer容器,记录交易超时的peer节点容器ID。

    3. 执行docker exec -it {容器ID} bash进入容器。

    4. 执行peer channel list查看peer节点加入的通道。

    5. 执行peer channel getinfo -c {通道名}查看peer节点账本落块情况。

      如果peer节点账本落块数与区块链浏览器中查询结果存在差异,且10min后再次查询,该peer节点账本区块数一直未增长,则可能因为资源不足、并发过高导致peer节点落块不同步,造成交易状况异常。

    6. 若还是无法解决,请提工单咨询。在控制台页面右上角,选择“工单 > 新建工单”,进入新建工单页面,按照页面提示选择问题类型创建工单。
  • 排查项五: DB文件不存在。
    1. 登录部署BCS区块链的云服务器,并执行docker ps|grep k8s_peer指令查看peer容器,记录交易状况异常的peer节点容器ID。

    2. 执行docker exec -it {容器ID} bash进入容器。

    3. 执行cd /var/log/baas-service/peer/进入peer节点日志存储路径,执行ll查看所有文件。

    4. 获取Peer节点的哈希值及序号:

      登录区块链管理页面,单击“区块浏览器”,在“Peer节点状态列表”的“Peer节点域名”列查看。

    5. Peer节点日志命名规则为peer-{哈希值}-{序号}.trace,执行 cat {文件名}|grep -C 5 "Fail to recover DB: file does not exist"搜索异常信息

      如存在“Fail to recover DB: file does not exist”相关信息,表明peer节点DB文件不存在,会导致交易状况异常。

    6. 若还是无法解决,请提工单咨询。在控制台页面右上角,选择“工单 > 新建工单”,进入新建工单页面,按照页面提示选择问题类型创建工单。
  • 排查项六:旧版本的CouchDB服务容器重启后,区块链服务不可用。

    旧版本的CouchDB服务容器重启后,由于状态数据没有存入网盘中,所以重启后状态数据丢失,CouchDB重新加载区块数据生成状态数据,导致服务在一段时间内不可用。

    十五万的区块数同步数据耗时2小时左右,同步数据期间peer的7051端口不可访问。

    解决方案:

    将区块链服务升级至最新版本,后续再有版本升级或重启操作,将不会发生此类问题。

    服务首次升级至最新版本时,由于CouchDB容器挂载网盘并同步状态数据,会导致服务一段时间无法交易,具体时间随账本区块数线性增加,每十五万的区块数同步数据耗时2小时左右,账本区块数可在“区块链管理”页面>“区块浏览器”查看。

  • 排查项七:区块链应用客户端发起上链请求,返回请求超时,但数据可以上链。

    若检查发现客户端报错“request timed out or been cancelled”,组织节点日志报错“UTC is more than 15mos apart from current server time”,请确保客户端机器与组织节点机器的时间和时区保持一致。

分享:

数据上链 所有常见问题

more