Elasticsearch集群多租戶解決方案探索
概述
Elasticsearch是一款強(qiáng)大的實(shí)時搜索和分析引擎,設(shè)計(jì)用于處理海量數(shù)據(jù)。它采用分布式架構(gòu),能夠輕松地?cái)U(kuò)展以應(yīng)對大規(guī)模數(shù)據(jù)的需求。通過使用JSON格式存儲數(shù)據(jù),Elasticsearch提供了靈活性,同時具備強(qiáng)大的查詢語言,能夠支持全文搜索、范圍查詢和聚合操作。它在處理大規(guī)模數(shù)據(jù)方面也是非常出色,適用于各種實(shí)時應(yīng)用,如監(jiān)控日志、數(shù)據(jù)分析等業(yè)務(wù)場景。
單租戶面臨的問題
這里的租戶特指訪問集群的用戶
單租戶場景:所有訪問者使用相同用戶身份操作集群數(shù)據(jù)
多租戶場景:不同用戶有不同的用戶角色(Role),不同用戶對不同資源有不同權(quán)限
- 索引命名混亂:索引名稱很隨意,如果沒有運(yùn)維平臺管理,從索引名稱也無法追隨到具體的業(yè)務(wù)歸屬。成為孤兒索引
- 索引生命周期管理: 沒有清理策略,每次都是發(fā)現(xiàn)集群容量到達(dá)水位,臨時刪除數(shù)據(jù)量大、歷史歸檔的索引
- 權(quán)限及隔離性:無,都是管理員,都有最大權(quán)限,索引無隔離性,索引被其他業(yè)務(wù)無意刪除等問題
解決思路
對于上面的幾個突出問題,我們可以通過一些規(guī)范+ES本身的能力,可以規(guī)避這些問題。
- 命名規(guī)范:這里的索引命名很重要,這里的命名規(guī)則會作用到后面介紹的權(quán)限的配置,做好命名規(guī)范對集群管理和自動化都是基本要求,我司使用基于資產(chǎn)服務(wù)樹體系結(jié)構(gòu)命名。比如:{團(tuán)隊(duì)}_{產(chǎn)品線}_{服務(wù)組}_{服務(wù)}_xxx
- 生命周期管理:ES自身的 index lifecycle policy 就可以滿足我們的需求
- 權(quán)限控制:ElasticSearch在6.8以后的版本中支持了RBAC(基于角色的訪問控制),可以在role中配置集群、索引級別的權(quán)限,role綁定到user上,即可完成基于indexs級別的控制
實(shí)踐流程
創(chuàng)建賬戶及權(quán)限
用戶名: 可以使用標(biāo)識業(yè)務(wù)屬性的名稱。比如我們公司以{app_name}作為用戶名稱
Role:指定權(quán)限。可以控制到索引,支持正則。
通過kibana創(chuàng)建Role,并分配權(quán)限。(inno_sweetfans_*,只允許訪問inno_sweetfans開通的索引)。
創(chuàng)建User,關(guān)聯(lián)Role。(User關(guān)聯(lián)到Role之后,就獲得了Role規(guī)定的權(quán)限)。
索引生命周期管理
如果業(yè)務(wù)索引數(shù)據(jù)量過大,有索引歸檔需求,比如按照天、周、月切分索引的,可以配置索引生命周期
配置步驟
- 添加 Index Lifecycle Policies
- 創(chuàng)建index template
- Index Lifecycle Policies 運(yùn)用到 index template
具體流程
添加Index Lifecycle Policies策略,(Hot phase:多大開始切割;Delete phase:刪除多久之前的)。
創(chuàng)建索引模版。(index_patterns寫索引前綴來匹配索引)。
刪除策略和索引模版關(guān)聯(lián)。運(yùn)用規(guī)則。
方案總結(jié)
我們借助ES的RBAC機(jī)制構(gòu)建了一個具有權(quán)限控制、資源隔離的環(huán)境,解決了單租戶模式下的諸多問題,運(yùn)用了集群的生命周期管理補(bǔ)充了對索引的管理。這個demo只是多租戶的一個引子,真實(shí)場景需要考慮到業(yè)務(wù)的復(fù)雜性和運(yùn)維性。
擴(kuò)展和思考
低于6.8版本的ES不支持權(quán)限控制和索引生命周期管理,如何破局?
- 安全:可以使用http-basic、search guard 等增加權(quán)限控制。
- 生命周期管理:Curator。
通過權(quán)限控制雖然解決了資源的訪問控制,但是資源搶占、業(yè)務(wù)優(yōu)先級等問題依然存在?
- ES支持對節(jié)點(diǎn)打標(biāo)簽(TAG), 可以通過索引和tag綁定做到資源獨(dú)占。
ES運(yùn)維過程中的問題?
- 分片不合理,數(shù)據(jù)傾斜。
- 故障定位復(fù)雜、分布式集群維護(hù)困難。
- 太多了,不總結(jié)了,遇到問題,干就對了。