wso2 - 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
解决方案
如果您没有在两台服务器之间共享 API 工件,就会发生这种情况。只有一台服务器具有更新的工件。当您发布 API 时,它会创建一个 Synapse(API) 工件,该工件存储在服务器的文件系统中。该位置是 SERVER_HOME/repository/deployment/server/synapse/default/api 位置。如果您正在运行多个实例,则应该有一种机制来在服务器之间同步这些工件。有几种选择。
- 为节点使用共享文件系统
- Rsync 选项 - 您可以始终指向节点 1 并发布 API。您可以从节点 1 将数据 rsync 到节点 2。在 api-manager.xml 中,APIGateway serverURL 应更改为两个节点中的节点 1。
推荐阅读
- docker - 非root docker权限来来去去
- python - 如何使用 BeautifulSoup 从网站获取 var 脚本中的 json 数据?
- c# - C#如果datagridview中字符单元格值的条件
- javascript - 如何使用 ReactJs 从 JSON 文件中显示、添加和删除项目
- java - NullPointerException 尽管 fx:id 和 fx:controller 是正确的
- python - 我不知道为什么该代码的结果是 NONE
- sql - 通过 BigQuery 中的连接构建多级嵌套结构(使用嵌套和重复字段)
- reactjs - 如何使用 fetch 制作通用 API 调用函数
- sql-server - SQL Server FTS 索引正确的关键字但不返回这些关键字的结果
- android - showTimePicker 中的限制元素