Elasticsearch集群多租戶解決方案探索

概述
Elasticsearch是一款強大的實時搜索和分析引擎,設計用于處理海量數據。它采用分布式架構,能夠輕松地擴展以應對大規模數據的需求。通過使用JSON格式存儲數據,Elasticsearch提供了靈活性,同時具備強大的查詢語言,能夠支持全文搜索、范圍查詢和聚合操作。它在處理大規模數據方面也是非常出色,適用于各種實時應用,如監控日志、數據分析等業務場景。
單租戶面臨的問題
這里的租戶特指訪問集群的用戶
單租戶場景:所有訪問者使用相同用戶身份操作集群數據
多租戶場景:不同用戶有不同的用戶角色(Role),不同用戶對不同資源有不同權限
- 索引命名混亂:索引名稱很隨意,如果沒有運維平臺管理,從索引名稱也無法追隨到具體的業務歸屬。成為孤兒索引
- 索引生命周期管理: 沒有清理策略,每次都是發現集群容量到達水位,臨時刪除數據量大、歷史歸檔的索引
- 權限及隔離性:無,都是管理員,都有最大權限,索引無隔離性,索引被其他業務無意刪除等問題
解決思路
對于上面的幾個突出問題,我們可以通過一些規范+ES本身的能力,可以規避這些問題。
- 命名規范:這里的索引命名很重要,這里的命名規則會作用到后面介紹的權限的配置,做好命名規范對集群管理和自動化都是基本要求,我司使用基于資產服務樹體系結構命名。比如:{團隊}_{產品線}_{服務組}_{服務}_xxx
- 生命周期管理:ES自身的 index lifecycle policy 就可以滿足我們的需求
- 權限控制:ElasticSearch在6.8以后的版本中支持了RBAC(基于角色的訪問控制),可以在role中配置集群、索引級別的權限,role綁定到user上,即可完成基于indexs級別的控制
實踐流程
創建賬戶及權限
用戶名: 可以使用標識業務屬性的名稱。比如我們公司以{app_name}作為用戶名稱
Role:指定權限??梢钥刂频剿饕С终齽t。
通過kibana創建Role,并分配權限。(inno_sweetfans_*,只允許訪問inno_sweetfans開通的索引)。

創建User,關聯Role。(User關聯到Role之后,就獲得了Role規定的權限)。

索引生命周期管理
如果業務索引數據量過大,有索引歸檔需求,比如按照天、周、月切分索引的,可以配置索引生命周期
配置步驟
- 添加 Index Lifecycle Policies
- 創建index template
- Index Lifecycle Policies 運用到 index template
具體流程
添加Index Lifecycle Policies策略,(Hot phase:多大開始切割;Delete phase:刪除多久之前的)。

創建索引模版。(index_patterns寫索引前綴來匹配索引)。

刪除策略和索引模版關聯。運用規則。

方案總結
我們借助ES的RBAC機制構建了一個具有權限控制、資源隔離的環境,解決了單租戶模式下的諸多問題,運用了集群的生命周期管理補充了對索引的管理。這個demo只是多租戶的一個引子,真實場景需要考慮到業務的復雜性和運維性。
擴展和思考
低于6.8版本的ES不支持權限控制和索引生命周期管理,如何破局?
- 安全:可以使用http-basic、search guard 等增加權限控制。
- 生命周期管理:Curator。
通過權限控制雖然解決了資源的訪問控制,但是資源搶占、業務優先級等問題依然存在?
- ES支持對節點打標簽(TAG), 可以通過索引和tag綁定做到資源獨占。
ES運維過程中的問題?
- 分片不合理,數據傾斜。
- 故障定位復雜、分布式集群維護困難。
- 太多了,不總結了,遇到問題,干就對了。
























