首页 > 解决方案 > WSO2 APIM 不会在集群设置中更新已发布的 API

问题描述

设置:两个 WSO2 APIM 指向同一个 MYSQL。这两个 WSO2 实例位于 LB 后面,并且发布者会话是粘性的。API 会话没有粘性。我已经发布了之前指向“/api/app/v1/xyz”的API“/public/1.0.0/abc”。我将已发布的 API 更新为现在指向“/api/app/v1/abc”。

问题:现在更新后,当通过 curl 访问已发布的 API 时,有时会返回预期结果,但有时会引发 403 错误。似乎一个实例中的更新没有传播到另一个实例?以下使其工作的步骤意味着停机,我们正在努力避免停机。

完成这项工作的唯一方法是执行以下操作:

1. Shutdown the wso2am app on the working instance (Instance1)
2. Update the API again on WSO2 publisher so Instance2 picks up the change
3. Start back the Instance1 wso2am app

WSO2 Instance1 记录调用工作的位置:

==> /usr/lib64/wso2/wso2am/2.6.0/repository/logs/http_access_.log <==
- <private-subnet-ip> - - [04/Jun/2019:20:02:00 +0000] "GET /services/Version HTTP/1.1" - - "-" "ELB-HealthChecker/2.0"
<my-ip> <private-subnet-ip> - - [04/Jun/2019:20:02:22 +0000] "GET /public/1.0.0/abc HTTP/1.1" - - "-" "curl/7.54.0"
<my-ip> <private-subnet-ip> - - [04/Jun/2019:20:02:22 +0000] "GET /api/app/v1/abc HTTP/1.1" - - "-" "Synapse-PT-HttpComponents-NIO"
- <private-subnet-ip>  - [04/Jun/2019:20:02:00 +0000] "- - " 200 - "-" "-"
- <private-subnet-ip>  - [04/Jun/2019:20:02:22 +0000] "- - " 200 - "-" "-"
- <private-subnet-ip>  - [04/Jun/2019:20:02:22 +0000] "- - " 200 - "-" "-"

WSO2 Instance2 记录调用不起作用的位置:

==> /usr/lib64/wso2/wso2am/2.6.0/repository/logs/wso2carbon.log <==
TID: [-1234] [] [2019-06-04 20:01:24,511]  WARN {org.apache.synapse.rest.API} -  Trying to access API : admin--PublicAPI on restricted transport chanel [https] {org.apache.synapse.rest.API}

==> /usr/lib64/wso2/wso2am/2.6.0/repository/logs/wso2-apigw-errors.log <==
2019-06-04 20:01:24,511 [-] [PassThroughMessageProcessor-123]  WARN API Trying to access API : admin--PublicAPI on restricted transport chanel [https]

==> /usr/lib64/wso2/wso2am/2.6.0/repository/logs/wso2carbon.log <==
TID: [-1234] [] [2019-06-04 20:01:24,511]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  STATUS = Message dispatched to the main sequence. Invalid URL., RESOURCE = /public/1.0.0/abc {org.apache.synapse.mediators.builtin.LogMediator}

==> /usr/lib64/wso2/wso2am/2.6.0/repository/logs/wso2-apigw-service.log <==
2019-06-04 20:01:24,511 [-] [PassThroughMessageProcessor-123]  INFO __SynapseService STATUS = Message dispatched to the main sequence. Invalid URL., RESOURCE = /public/1.0.0/abc

标签: wso2wso2-appm

解决方案


如果您没有在两台服务器之间共享 API 工件,就会发生这种情况。只有一台服务器具有更新的工件。当您发布 API 时,它会创建一个 Synapse(API) 工件,该工件存储在服务器的文件系统中。该位置是 SERVER_HOME/repository/deployment/server/synapse/default/api 位置。如果您正在运行多个实例,则应该有一种机制来在服务器之间同步这些工件。有几种选择。

  1. 为节点使用共享文件系统
  2. Rsync 选项 - 您可以始终指向节点 1 并发布 API。您可以从节点 1 将数据 rsync 到节点 2。在 api-manager.xml 中,APIGateway serverURL 应更改为两个节点中的节点 1。

推荐阅读