ES官方博客:https://elasticstack.blog.csdn.net/?type=blog
一、rolloverAPI
https://elasticstack.blog.csdn.net/article/details/102728987
1.1 rollover命令
POST /log_alias/_rollover
{
????"conditions":{
????????"max_age":"7d",
????????"max_docs":1400,
????????"max_size":"5gb"
????}
}顯示的結(jié)果是:
{
??"acknowledged" : true,
??"shards_acknowledged" : true,
??"old_index" : "logs-2019.10.21-1",
??"new_index" : "logs-2019.10.21-000002",
??"rolled_over" : true,
??"dry_run" : false,
??"conditions" : {
????"[max_docs: 1400]" : true,
????"[max_size: 5gb]" : false,
????"[max_age: 7d]" : false
??}
}
1.2?配合 ILM 一起使用
Rollover 在實(shí)戰(zhàn)中,我們可以配合?ILM? 一起使用。我們可以定義如下的一個(gè)? ILM? policy:
PUT _ilm/policy/50gb_30d_delete_90d_policy
{
??"policy": {
????"phases": {
??????"hot": {
????????"actions": {
??????????"rollover": {
????????????"max_size": "50GB",
????????????"max_age": "30d",
????????????"max_docs": 10000
??????????}
????????}
??????},
??????"delete": {
????????"min_age": "90d",
????????"actions": {
??????????"delete": {}
????????}
??????}
????}
??}
}
在上面,我們定義了如下的一個(gè) policy:
- 當(dāng)一個(gè)索引的文檔數(shù)超過 10000,或者文檔的時(shí)間超過 30 天,或者索引的大小超過 50G,之后攝入的文檔就會(huì)自動(dòng)? rollover
- 文檔超過 90 天,就會(huì)被自動(dòng)刪除
我們接著就定義如下的 index template:
PUT _index_template/timeseries_template
{
? "index_patterns": [
? ? "myindex-*"
? ],
? "data_stream": {},
? "template": {
? ? "settings": {
? ? ? "number_of_shards": 1,
? ? ? "number_of_replicas": 1,
? ? ? "index.lifecycle.name": "50gb_30d_delete_90d_policy"
? ? }
? }
}
之后,所有新創(chuàng)建的以 myindex- 為開頭的索引將會(huì)自動(dòng)采納 50gb_30d_delete_90d_policy 策略,也就是該索引將會(huì)根據(jù) 50gb_30d_delete_90d_policy 所定義的條件自動(dòng) rollover。針對(duì)上面的 data_stream,我們可以采用如下的方式來創(chuàng)建索引:
PUT _data_stream/myindex-ds
?更多關(guān)于 data stream 的知識(shí)可以參考文章 “Elastic:Data stream 在索引生命周期管理中的應(yīng)用”https://elasticstack.blog.csdn.net/article/details/110528838。
ILM 可以通過簡(jiǎn)單的設(shè)置更新輕松集成到現(xiàn)有索引中。 要將策略添加到現(xiàn)有索引,你必須僅提供策略名稱:
PUT myindex/_settings
{
? "index": {
? ? "lifecycle": {
? ? ? "name": "50gb_30d_delete_90d_policy"
? ? }
? }
}
1.3 其他參數(shù)
?rollover 發(fā)生時(shí)間:indices.lifecycle.poll_interval?
PUT _cluster/settings
{
? ? "transient": {
? ? ? "indices.lifecycle.poll_interval": "10s"
? ? }
}
二、冷熱數(shù)據(jù)
2.1? 配置分片分配感知
標(biāo)記節(jié)點(diǎn)溫度
通過phases 定義冷熱數(shù)據(jù)管理周期
運(yùn)行兩個(gè) node 的 Elasticsearch 集群
我們可以參考文章?Elasticsearch:運(yùn)用 shard 過濾器來控制索引分配給哪個(gè)節(jié)點(diǎn)_Elastic 中國(guó)社區(qū)官方博客的博客-CSDN博客運(yùn)行起來兩個(gè) node 的 cluster。其實(shí)非常簡(jiǎn)單,當(dāng)我們安裝好 Elasticsearch 后,打開一個(gè) terminal,并運(yùn)行如下的命令:
./bin/elasticsearch -E node.name=node1 -E node.attr.data=hot -Enode.max_local_storage_nodes=2
它將運(yùn)行起來一個(gè)叫做 node1 的節(jié)點(diǎn)。同時(shí)在另外 terminal 中運(yùn)行如下的命令:
./bin/elasticsearch -E node.name=node2 -E node.attr.data=warm -Enode.max_local_storage_nodes=2
它運(yùn)行另外一個(gè)叫做 node2 的節(jié)點(diǎn)。我們可以通過如下的命令來進(jìn)行查看:
GET _cat/nodes?v
顯示兩個(gè)節(jié)點(diǎn):
我們可以用如下的命令來檢查這兩個(gè) node 的屬性:
GET _cat/nodeattrs?v&s=name
顯然其中的一個(gè) node 是 hot,另外一個(gè)是 warm。
2.2??配置 ILM 策略
????????ILM 策略分為四個(gè)主要階段 - 熱、溫、冷和刪除。(還可以試用 滾動(dòng)更新操作用于管理每個(gè)索引的大小或壽命。強(qiáng)制合并操作可用于優(yōu)化索引。凍結(jié)操作可用于減少集群中的內(nèi)存壓力。)
基本操作
PUT /_ilm/policy/my_policy
{
? "policy":{
? ? "phases":{
? ? ? "hot":{
? ? ? ? "actions":{
? ? ? ? ? "rollover":{
? ? ? ? ? ? "max_size":"50gb",
? ? ? ? ? ? "max_age":"30d"
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? }
}
這個(gè)策略規(guī)定,在索引存儲(chǔ)時(shí)間達(dá)到 30 天后或者索引大小達(dá)到 50GB(基于主分片)時(shí),就會(huì)滾動(dòng)更新該索引并開始寫入一個(gè)新索引。
ILM 和索引模板
關(guān)聯(lián)ILM索引和模板
PUT _template/my_template
{
? "index_patterns": ["test-*"],
? "settings": {
? ? "index.lifecycle.name": "my_policy",
? ? "index.lifecycle.rollover_alias": "test-alias"?
? }
}
對(duì)于包括滾動(dòng)更新操作的策略,還必須在創(chuàng)建索引模板后使用寫入別名啟動(dòng)索引。
PUT test-000001?
{
? "aliases": {
? ? "test-alias":{
? ? ? "is_write_index": true?
? ? }
? }
}?
配置用于采集的 ILM 策略
Beats 和 Logstash 都支持 ILM,并在啟用后將設(shè)置一個(gè)類似上例所示的默認(rèn)策略。此外,Beats 和 Logstash 還將處理滾動(dòng)更新操作的所有要求。這就意味著,當(dāng)為 Beats 和 Logstash 啟用 ILM 時(shí),除非您的每天索引量很大(大于 50GB/天),否則索引大小將可能是確定何時(shí)創(chuàng)建新索引的主要因素(這是一件好事?。?。從 7.0.0 開始,帶有滾動(dòng)更新的 ILM 將是 Beats 和 Logstash 的默認(rèn)配置。
不過,由于針對(duì)熱溫冷架構(gòu)沒有一成不變的設(shè)置,因此,Beats 和 Logstash 將不會(huì)隨附熱溫冷策略。我們可以制定一個(gè)適用于熱溫冷的新策略,并在這一過程中進(jìn)行一些優(yōu)化。
我們雖然可以更新 Beats 或 Logstash 默認(rèn)策略,但這會(huì)模糊默認(rèn)值和定制值之間的界限。此外,更新默認(rèn)策略還會(huì)增加未來版本無法應(yīng)用正確策略的風(fēng)險(xiǎn)(7.0+ 的 Beats 模板默認(rèn)值將會(huì)有更改)。我們可以使用 Beats 和 Logstash 配置,通過其各自的配置來定義定制策略。這種方法也未嘗不可,但您可能需要更改數(shù)百(或數(shù)千)個(gè) Beats 的配置才能更改 ILM 策略。這里描述的第三種方法,通過利用多模板匹配來允許 Elasticsearch 保持對(duì) ILM 策略的完全控制。
針對(duì)熱溫冷優(yōu)化 ILM 策略
首先,讓我們創(chuàng)建一個(gè)針對(duì)熱溫冷架構(gòu)優(yōu)化的 ILM 策略。再次強(qiáng)調(diào),這不是一刀切的設(shè)置,您的要求將有所不同。
PUT _ilm/policy/hot-warm-cold-delete-60days { ? "policy": { ? ? "phases": { ? ? ? "hot": { ? ? ? ? "actions": { ? ? ? ? ? "rollover": { ? ? ? ? ? ? "max_size":"50gb", ? ? ? ? ? ? "max_age":"30d" ? ? ? ? ? }, ? ? ? ? ? "set_priority": { ? ? ? ? ? ? "priority":50 ? ? ? ? ? } ? ? ? ? } ? ? ? }, ? ? ? "warm": { ? ? ? ? "min_age":"7d", ? ? ? ? "actions": { ? ? ? ? ? "forcemerge": { ? ? ? ? ? ? "max_num_segments":1 ? ? ? ? ? }, ? ? ? ? ? "shrink": { ? ? ? ? ? ? "number_of_shards":1 ? ? ? ? ? }, ? ? ? ? ? "allocate": { ? ? ? ? ? ? "require": { ? ? ? ? ? ? ? "data": "warm" ? ? ? ? ? ? } ? ? ? ? ? }, ? ? ? ? ? "set_priority": { ? ? ? ? ? ? "priority":25 ? ? ? ? ? } ? ? ? ? } ? ? ? }, ? ? ? "cold": { ? ? ? ? "min_age":"30d", ? ? ? ? "actions": { ? ? ? ? ? "set_priority": { ? ? ? ? ? ? "priority":0 ? ? ? ? ? }, ? ? ? ? ? "freeze": {}, ? ? ? ? ? "allocate": { ? ? ? ? ? ? "require": { ? ? ? ? ? ? ? "data": "cold" ? ? ? ? ? ? } ? ? ? ? ? } ? ? ? ? } ? ? ? }, ? ? ? "delete": { ? ? ? ? "min_age":"60d", ? ? ? ? "actions": { ? ? ? ? ? "delete": {} ? ? ? ? } ? ? ? } ? ? } ? } }
熱
這個(gè) ILM 策略首先會(huì)將索引優(yōu)先級(jí)設(shè)置為一個(gè)較高的值,以便熱索引在其他索引之前恢復(fù)。30 天后或達(dá)到 50GB 時(shí)(符合任何一個(gè)即可),該索引將滾動(dòng)更新,系統(tǒng)將創(chuàng)建一個(gè)新索引。該新索引將重新啟動(dòng)策略,而當(dāng)前的索引(剛剛滾動(dòng)更新的索引)將在滾動(dòng)更新后等待 7 天再進(jìn)入溫階段。
溫
索引進(jìn)入溫階段后,ILM 會(huì)將索引收縮到 1 個(gè)分片,將索引強(qiáng)制合并為 1 個(gè)段,并將索引優(yōu)先級(jí)設(shè)置為比熱階段低(但比冷階段高)的值,通過分配操作將索引移動(dòng)到溫節(jié)點(diǎn)。完成該操作后,索引將等待 30 天(從滾動(dòng)更新時(shí)算起)后進(jìn)入冷階段。
冷
索引進(jìn)入冷階段后,ILM 將再次降低索引優(yōu)先級(jí),以確保熱索引和溫索引得到先行恢復(fù)。然后,ILM 將凍結(jié)索引并將其移動(dòng)到冷節(jié)點(diǎn)。完成該操作后,索引將等待 60 天(從滾動(dòng)更新時(shí)算起)后進(jìn)入刪除階段。
刪除
我們還沒有討論過這個(gè)刪除階段。簡(jiǎn)單來說,刪除階段具有用于刪除索引的刪除操作。在刪除階段,您將始終需要有一個(gè)?min_age
?條件,以允許索引在給定時(shí)段內(nèi)待在熱、溫或冷階段。
在 Kibana 中創(chuàng)建 ILM 策略
不喜歡寫一大堆 JSON? (我也是。) 讓我們使用 Kibana UI 來檢查或創(chuàng)建策略:
三、別名應(yīng)用
3.1 創(chuàng)建測(cè)試索引:
PUT my_test_index
響應(yīng)結(jié)果:
{
? "acknowledged" : true,
? "shards_acknowledged" : true,
? "index" : "my_test_index"
}
3.2 創(chuàng)建索引別名:
POST _aliases
{
? "actions": [
? ? {
? ? ? "add": {
? ? ? ? "index": "my_test_index",
? ? ? ? "alias": "my_test_index_alias"
? ? ? }
? ? }
? ]
}
響應(yīng)結(jié)果:
{
? "acknowledged" : true
}
3.3 刪除索引別名
POST _aliases
{
? "actions": [
? ? {
? ? ? "remove": {
? ? ? ? "index": "my_test_index",
? ? ? ? "alias": "my_test_index_alias"
? ? ? }
? ? }
? ]
}
響應(yīng)效果:
{"acknowledged" : true}?
?3.4 一個(gè)別名建立多個(gè)索引
? ? ? ? 指定某一個(gè)索引可進(jìn)行數(shù)據(jù)寫入is_write_index 設(shè)置為 true。
POST /_aliases
{
? "actions": [
? ? {
? ? ? "add": {
? ? ? ? "index": "l1",
? ? ? ? "alias": "a1",
? ? ? ? "is_write_index": false
? ? ? }
? ? },
? ? {
? ? ? "add": {
? ? ? ? "index": "l2",
? ? ? ? "alias": "a1",
? ? ? ? "is_write_index": true
? ? ? }
? ? }
? ]
}
四、數(shù)據(jù)遷移
4.1 reindex
POST localhost:9200/_reindex
{
? "source": {
? ? "index": "indexName"
? },
? "dest": {
? ? "index": "newIndexName"
? }
}
?4.2?數(shù)據(jù)遷移效率
????????常規(guī)情況下,如果只是進(jìn)行少量數(shù)據(jù)遷移,利用普通的reindex就可以達(dá)到要求。但是當(dāng)需要遷移的數(shù)據(jù)量過大時(shí),會(huì)發(fā)現(xiàn)reindex的速度會(huì)變得很慢。比如數(shù)據(jù)量幾十個(gè)G的場(chǎng)景下,elasticsearch reindex速度太慢,從舊索引導(dǎo)數(shù)據(jù)到新索引最佳方案是什么?
原因分析:
reindex的核心做跨索引、跨集群的數(shù)據(jù)遷移。慢的原因及優(yōu)化思路包括:
??? 1)批量大小值可能太小。需要結(jié)合堆內(nèi)存、線程池調(diào)整大小;
??? 2)reindex的底層是scroll實(shí)現(xiàn),借助scroll并行優(yōu)化方式,提升效率;
??? 3)跨索引、跨集群的核心是寫入數(shù)據(jù),考慮寫入優(yōu)化角度提升效率
可行方案:
1)提升批量寫入大小值
默認(rèn)情況下,_reindex使用1000進(jìn)行批量操作,可以在source中調(diào)整batch_size。?
POST _reindex
{
? "source": {
? ? "index": "source",
? ? "size": 5000
? },
? "dest": {
? ? "index": "dest",
? ? "routing": "=cat"
? }
}
批量大小設(shè)置的依據(jù):
1、使用批量索引請(qǐng)求以獲得最佳性能
批量大小取決于數(shù)據(jù)、分析和集群配置,一般每批處理5-15 MB物理大小數(shù)據(jù)。
2、逐步遞增文檔容量大小的方式調(diào)優(yōu)
從大約5-15 MB的大容量開始,慢慢增加,直到看不到性能的提升。然后開始增加批量寫入的并發(fā)性。使用kibana、cerebro或iostat、top和ps等工具監(jiān)視節(jié)點(diǎn),查看資源何時(shí)開始出現(xiàn)瓶頸。如果開始接收EsRejectedExecutionException,說明地區(qū)==當(dāng)前集群已經(jīng)達(dá)到性能極限。
借助scroll的sliced提升寫入效率
Reindex支持Sliced Scroll并行化重建索引過程。 這種并行化可以提高效率,并提供一種方便的方法將請(qǐng)求分解為更小的部分。
sliced原理(from medcl)
Scroll接口現(xiàn)在可以并發(fā)進(jìn)行數(shù)據(jù)遍歷,每個(gè)Scroll請(qǐng)求,可以分成多個(gè)Slice請(qǐng)求,可以理解為切片,各Slice獨(dú)立并行,利用Scroll重建或者遍歷要快很多倍。slicing的設(shè)定分為兩種方式:手動(dòng)設(shè)置分片、自動(dòng)設(shè)置分片。手動(dòng)設(shè)置分片參見官網(wǎng)。自動(dòng)設(shè)置分片如下:
POST _reindex?slices=5&refresh
{
? "source": {
? ? "index": "twitter"
? },
? "dest": {
? ? "index": "new_twitter"
? }
}
slices大小設(shè)置注意事項(xiàng):
1)slices大小設(shè)置可以手動(dòng)指定,或者設(shè)置slices設(shè)置為auto,auto的含義是:針對(duì)單索引,slices大小=分片數(shù);針對(duì)多索引,slices=分片的最小值。
2)當(dāng)slices的數(shù)量等于索引中的分片數(shù)量時(shí),查詢性能最高效。slices大小大于分片數(shù),非但不會(huì)提升效率,反而會(huì)增加開銷。
3)如果這個(gè)slices數(shù)字很大(例如500),建議選擇一個(gè)較低的數(shù)字,因?yàn)檫^大的slices 會(huì)影響性能。
實(shí)踐證明,比默認(rèn)設(shè)置reindex速度能提升10倍+。
五、mapping
5.1 Index template 和 alias
我們甚至可以為我們的 index template 添加 index alias:文章來源:http://www.zghlxwxcb.cn/news/detail-433108.html
PUT _template/logs_template
{
? "index_patterns": "logs-*",
? "order": 1,?
? "settings": {
? ? "number_of_shards": 4,
? ? "number_of_replicas": 1
? },
? "mappings": {?
? ? "properties": {
? ? ? "@timestamp": {
? ? ? ? "type": "date"
? ? ? }
? ? }
? },
? "aliases": {
? ? "{index}-alias" : {}
? }
}文章來源地址http://www.zghlxwxcb.cn/news/detail-433108.html
到了這里,關(guān)于ES索引管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!