INFINI GATEWAY 极限网关初体验 ElasticSearch 两个集群数据同步
文章目錄
- 極限網關-配置說明
- 配置文件
- 日志、數據目錄
- 定義入口
- 定義路由
- 定義流程
- 定義資源
- 使用Demo
- 寫入兩個ES集群
- 極限網關-常見問題
- shutdown: ORM handler is not registered
- 極限網關地址
極限網關-配置說明
極限網關的大部分配置都可以通過 gateway.yml 來進行配置,配置修改完成之后,需要重啟網關程序才能生效。
配置文件
vim /etc/gateway/gateway.yml日志、數據目錄
path.data: data path.logs: log定義入口
- 每一個網關都至少要對外暴露一個服務的入口,用來接收業務的操作請求,這個在極限網關里面叫做 entry,通過下面的參數即可定義
這里定義了一個名為 es_gateway 的服務入口,監聽的地址是 0.0.0.0:8000,使用了一個名為 default 的路由來處理請求。
定義路由
- 極限網關通過路由來判斷流量的去向,一個典型的路由配置示例如下:
這里定義了一個名為 default 的路由,也就是業務處理的主流程,請求轉發、過濾、緩存等操作都在這里面進行。
定義流程
- 一個請求流程定義了一系列請求處理的工作單元,是一個典型的管道式工作方式,一個典型的配置示例如下:
上面的配置定義了一個名為 cache_first 的處理流,使用了三個不同的 filter,分別是 get_cache、elasticsearch 和 set_cache,這些 filter 會依據配置的先后順序依次執行。 各個 filter 的處理結果分別如下:
- get_cache,這個 filter 主要用來從緩存里面拿數據,如果之前發生過相同的請求,并且緩存還存在且有效的情況下,這個 filter 可以直接拿到緩存然后立即返回,不用繼續往下處理;
- elasticsearch,這個 filter 主要用來將請求轉發給后端的 Elasticsearch 集群,并且將 Elasticsearch 返回的響應內容繼續往下傳遞;
- set_cache,這個 filter 會將執行結果緩存到本地內存,有一些參數限制,比如狀態碼,請求大小等,并設置一定的過期時間,以方便下次重復請求可以直接使用緩存,一般要和 get_cache 組合使用。
定義資源
這里的資源主要是指 Elasticsearch 后端服務器資源,極限網關支持多個 Elasticsearch 集群,可以實現將請求轉發到多個不同集群,也可以支持請求的藍綠發布、灰度切換等,定義一個 Elasticsearch 后端資源的方式示例如下:
elasticsearch: - name: prodenabled: trueendpoint: http://192.168.3.201:9200discovery:enabled: truerefresh:enabled: truebasic_auth:username: elasticpassword: pass通過參數 endpoint 來設置 Elasticsearch 的訪問地址,如果 Elasticsearch 開啟了身份認證,可以通過 basic_auth 來指定用戶名和密碼信息,該用戶需要有能夠獲取集群狀態信息的權限。 通過參數 discover 可以開啟自動的后端節點的自動發現,用于自動檢測后端節點的情況,能夠自動識別新增和離線的節點。
使用Demo
寫入兩個ES集群
- 提示
flow設置兩個es集群時,發送請求會按照順序執行,比如下面配置查詢時會先執行dev再執行prd,通過8000接口返回的數據是最后一個配置返回的結果
- 通過極限網關創建索引,分別去dev、prd兩個集群查看發現均創建成功
- 寫入數據,分別查看兩個集群均寫入成功
- 查詢數據,返回數據成功。修改最后配置的一個es集群prd數據,再次查詢發現返回的數據也被修改,判斷出返回的數據是最后一個配置的集群prd的數據
極限網關-常見問題
shutdown: ORM handler is not registered
[06-25 13:54:25] [ERR] [app.go:334] shutdown: ORM handler is not registeredgoroutine 1 [running]: infini.sh/framework.(*App).Shutdown(0xc00023d480)/var/lib/jenkins/go/src/infini.sh/framework/app.go:338 +0x243 panic(0xf02600, 0xc00015dae0)/usr/local/go/src/runtime/panic.go:679 +0x1b2 infini.sh/framework/core/orm.getHandler(...)/var/lib/jenkins/go/src/infini.sh/framework/core/orm/orm.go:216 infini.sh/framework/core/orm.GetIndexName(0xf956a0, 0xc00018eb40, 0xf956a0, 0xc00018eb40)/var/lib/jenkins/go/src/infini.sh/framework/core/orm/orm.go:176 +0xdf infini.sh/framework/modules/elastic.loadESBasedElasticConfig()/var/lib/jenkins/go/src/infini.sh/framework/modules/elastic/elastic.go:92 +0xf9 infini.sh/framework/modules/elastic.ElasticModule.Start(0xc000281ee8, 0xc000036628)/var/lib/jenkins/go/src/infini.sh/framework/modules/elastic/elastic.go:334 +0x21f infini.sh/framework/core/module.Start()/var/lib/jenkins/go/src/infini.sh/framework/core/module/module.go:87 +0xc80 main.main.func1()/var/lib/jenkins/go/src/infini.sh/gateway/main.go:96 +0x662 infini.sh/framework.(*App).Start(0xc00023d480, 0x10133e0, 0x10133e8)/var/lib/jenkins/go/src/infini.sh/framework/app.go:261 +0x52a main.main()/var/lib/jenkins/go/src/infini.sh/gateway/main.go:65 +0x35a- 原因
沒有引用model
- 解決方法:
配置文件中加入
modules: - name: elasticenabled: trueelasticsearch: devstore:enabled: truemonitoring:enabled: falseorm:enabled: trueinit_template: truetemplate_name: ".gateway-default"index_prefix: "gateway_"極限網關地址
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的INFINI GATEWAY 极限网关初体验 ElasticSearch 两个集群数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink keyby 数据倾斜问题处理
- 下一篇: 串口通信参数