WSO2 APIM 不更新集群设置中已发布的 API

WSO2 APIM doesnt update a published API in a cluster setup

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

问题:现在更新后,当通过 curl 访问已发布的 API 时,有时 returns 返回预期结果,但其他时候会抛出 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

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

  1. 为节点使用共享文件系统
  2. Rsync 选项 - 您可以始终指向节点 1 并发布 API。您可以从节点 1 将数据同步到节点 2。在 api-manager.xml 中,API 两个节点中的网关服务器 URL 都应更改为节点 1。