文档首页/ 区块链服务 BCS/ 常见问题/ Hyperledger Fabric增强版/ 数据上链/ 区块链实例交易连接失败或连接超时
更新时间:2023-03-07 GMT+08:00

区块链实例交易连接失败或连接超时

问题现象

区块链实例交易连接失败或连接超时。

排查思路

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

•排查项二:实例状态异常。

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

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

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

•排查项六:旧版本的CouchDB服务容器重启后,区块链实例不可用。

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

解决方案

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

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

    图1 交易超时

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

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

    图2 交易失败
  • 排查项二:BCS实例状态异常。

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

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

    进入BCS控制台,单击“实例管理”,单击交易异常的实例名称,查看版本信息。

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

    解决方案

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

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

  • 排查项四:peer节点账本不同步。
    1. 进入BCS控制台,单击“实例管理”,选择交易异常的实例,进入区块链管理页面,并单击“区块浏览器”,选择交易异常的通道,查看“区块列表”中显示的当前通道区块数。
      图3 区块列表
    2. 登录部署BCS区块链的云服务器,并执行docker ps|grep k8s_peer指令查看peer容器,记录交易超时的peer节点容器ID。
      图4 查看peer容器
    3. 执行docker exec -it {容器ID} bash进入容器。
      图5 进入容器
    4. 执行peer channel list查看peer节点加入的通道。
      图6 查看peer节点加入的通道
    5. 执行peer channel getinfo -c {通道名}查看peer节点账本落块情况。
      图7 查看peer节点账本落块情况

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

    6. 若还是无法解决,请提工单咨询。在控制台页面右上角,选择“工单 > 新建工单”,进入新建工单页面,按照页面提示选择问题类型创建工单。
  • 排查项五: DB文件不存在。
    1. 登录部署BCS区块链的云服务器,并执行docker ps|grep k8s_peer指令查看peer容器,记录交易状况异常的peer节点容器ID。
      图8 查看peer容器
    2. 执行docker exec -it {容器ID} bash进入容器。
      图9 bash进入容器
    3. 执行cd /var/log/baas-service/peer/进入peer节点日志存储路径,执行ll查看所有文件。
      图10 查看所有文件
    4. 获取Peer节点的哈希值及序号:

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

      图11 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端口不可访问。

    解决方案:

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

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

    2. 登录区块链服务BCS控制台,在实例卡片中,单击“更多 > 更新版本”。
    3. 在弹出的窗口,可以查看当前实例版本,或者选择最新版本升级区块链实例。
      • 更新版本期间会导致实例不可用,如果是联盟链还会影响到其他联盟参与方,请和联盟其他参与方达成共识后再操作,联盟所有成员都需要升级。
      • 请不要在链码安装或实例化时进行升级操作。
      • 支持社区Hyperledger Fabric 1.4到社区Hyperledger Fabric 2.2的跨大版本升级。如果是联盟链,请确保所有联盟成员组件升级到同一版本,否则无法正常交易。
      • BCS版本4.x.x对应社区Hyperledger Fabric 2.2版本。
      • 更新版本只支持低版本到高版本的更新,更新成功后不支持版本回滚,更新失败时才允许执行版本回滚操作。
  • 排查项七:区块链应用客户端发起上链请求,返回请求超时,但数据可以上链。

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