業務需求
作業幫為了確定某個業務 Elasticsearch 叢集的高可用,在百度雲和華為雲上面采取了雙雲部署,即将單個 Elasticsearch 叢集跨雲進行部署,并且要求業務請求優先通路本地雲。
Elasticsearch 單叢集雙雲實作
Elasticsearch 叢集采用 Master 與 Data 節點分離的架構。目前主力雲放 2 個 Master,另外一個雲放一個 Master。主要考慮就是基礎設施故障中,專線故障問題是大多數,某個雲廠商整體挂的情況基本沒有。是以設定了主力雲,當專線故障時,主力雲的 Elasticsearch 是可以讀寫的,業務把流量切到主力雲就行了。
具體配置方式如下。
首先,在 Master 節點上設定:
cluster.routing.allocation.awareness.attributes: zone_id
cluster.routing.allocation.awareness.force.zone_id.values: zone_baidu,zone_huawei
然後分别在百度雲上資料節點上設定:
node.attr.zone_id: zone_baidu
和華為雲上資料節點上設定:
node.attr.zone_id: zone_huawei
建立索引采用 1 副本,可以保證百度雲與華為雲上都有一份相同的資料。
業務通路方式如下圖:
- 百度雲業務 -> 百度 lb -> INFINI Gateway (百度) -> Elasticsearch (百度雲 data 節點)
- 華為雲業務 -> 華為 lb -> INFINI Gateway (華為) -> Elasticsearch (華為雲 data 節點)
極限網關配置
Elasticsearch 支援一個 Preference 參數來設定請求的優先通路,通過在兩個雲内部的極限網關分别設定各自請求預設的 Preference 參數,讓各個雲内部的請求優先發往本雲内的資料節點,即可實作請求的就近通路。
具體的百度雲的 INFINI Gateway 配置如下(華為雲大體相同,就不重複貼了):
path.data: data
path.logs: log
entry:
- name: es-test
enabled: true
router: default
network:
binding: 0.0.0.0:9200
reuse_port: true
router:
- name: default
default_flow: es-test
flow:
- name: es-test
filter:
- name: set_request_query_args
parameters:
args:
- preference -> _prefer_nodes:data-baidu01,data-baidu02 #通過配置preference的_prefer_nodes為所有的百度data節點,來實作百度雲的業務優先通路百度雲的節點,最大程度避免跨雲通路,對業務更友好。
- name: elasticsearch
parameters:
elasticsearch: default
refresh:
enabled: true
interval: 10s
roles:
include:
- data #配置為data,請求隻發送到data節點
tags:
include:
- zone_id: zone_baidu #隻轉發給百度雲裡面的節點
elasticsearch:
- name: default
enabled: true
endpoint: http://10.10.10.10:9200
discovery:
enabled: true
refresh:
enabled: true
interval: 10s
basic_auth:
username: elastic
password: elastic
總結與收益
引入極限網關前故障回顧
百度雲業務通路 Elasticsearch 叢集,拉取每天的增量資料同步到 Hive 叢集,其中有幾個任務失敗後,又重新同步。結果是部分資料從華為雲的 Elasticsearch 節點拉取到百度雲的 Hive 叢集中,資料量巨大導緻跨雲專線流量監控告警。由于線上業務、MySQL、Redis、Elasticsearch 等使用同一根專線, 此次故障影響面較大。臨時解決方案是業務修改語句加入 Preference 參數來實作業務隻拉取本地雲資料,減少對專線的占用。但是一方面業務改造及維護成本較高;另一方面作為 DBA 會擔心業務改造有疏漏、新增業務遺忘 Preference 參數、以及後期調整成本較高,這始終是一個風險點。
引入極限網關的收益
在原有架構上加入極限網關,可以在業務不修改代碼的情況下做到優先通路本地雲,提升通路速度的同時,最大限度減少對專線的壓力。
正文完
作者:趙青
前網易 DBA,工作主要涉及 Oracle、MySQL、Redis、Elasticsearch、Tidb、OB 等元件的運維以及運維自動化、平台化、智能化等工作。現就職于作業幫。
本文編輯:喝咖啡的貓
關于極限網關
極限網關是專為 Elasticsearch 而量身打造的應用層網關,地表最強,沒有之一!
- 高可用,不停機索引,自動處理後端 Elasticsearch 的故障,不影響資料的正常攝取
- 寫入加速,可自動合并獨立的索引請求為批量請求,降低後端壓力,提高索引效率
- 查詢加速,可配置查詢緩存,Kibana 分析儀表闆的無縫智能加速,全面提升搜尋體驗
- 透明重試,自動處理後端 Elasticsearch 節點故障和對查詢請求進行遷移重試
- 流量克隆,支援複制流量到多個不同的後端 Elasticsearch 叢集,支援流量灰階遷移
- 一鍵重建,優化過的高速重建和增量資料的自動處理,支援新舊索引的透明無縫切換
- 安全傳輸,自動支援 TLS/HTTPS,可動态生成自簽證書,也可指定自簽可信證書
- 精準路由,多種算法的負載均衡模式,索引和查詢可分别配置負載路由政策,動态靈活
- 限速限流,支援多種限速和限流測規則,可以實作索引級别的限速,保障後端叢集的穩定性
- 并發控制,支援叢集和節點級别的 TCP 并發連接配接數控制,保障後端叢集和節點穩定性
- 無單點故障,内置基于虛拟 IP 的高可用解決方案,雙機熱備,故障自動遷移,避免單點故障
- 請求透視,内置日志和名額監控,可以對 Elasticsearch 請求做全面的資料分析