您好,登錄后才能下訂單哦!
這篇文章給大家介紹ElasticSearch中怎么實現(xiàn)數(shù)據(jù)自動冷熱分離,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1. 節(jié)點tag
依次啟動三個節(jié)點,同時加入box_type和resource_level標(biāo)簽,box_type標(biāo)記node1、node2為warm節(jié)點,node3為hot節(jié)點,resource_level標(biāo)記機器資源的性能,分為高,中,低
bin/elasticsearch -d -p pid -E node.name=node1 -E node.max_local_storage_nodes=3 -E path.data=node1_data -E path.logs=node1_logs -E node.attr.box_type=warm -E node.attr.resource_level=high bin/elasticsearch -d -p pid -E node.name=node2 -E node.max_local_storage_nodes=3 -E path.data=node2_data -E path.logs=node2_logs -E node.attr.box_type=warm -E node.attr.resource_level=mdeium bin/elasticsearch -d -p pid -E node.name=node3 -E node.max_local_storage_nodes=3 -E path.data=node3_data -E path.logs=node3_logs -E node.attr.box_type=hot -E node.attr.resource_level=high 查看屬性:kibana中輸入以下命令 GET _cat/indices?v 得到以下結(jié)果,可以看到box_type和resource_level標(biāo)簽在每個節(jié)點的值 node host ip attr value node3 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184 node3 127.0.0.1 127.0.0.1 ml.max_open_jobs 20 node3 127.0.0.1 127.0.0.1 box_type hot node3 127.0.0.1 127.0.0.1 xpack.installed true node3 127.0.0.1 127.0.0.1 resource_level high node1 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184 node1 127.0.0.1 127.0.0.1 box_type warm node1 127.0.0.1 127.0.0.1 xpack.installed true node1 127.0.0.1 127.0.0.1 ml.max_open_jobs 20 node1 127.0.0.1 127.0.0.1 resource_level high node2 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184 node2 127.0.0.1 127.0.0.1 ml.max_open_jobs 20 node2 127.0.0.1 127.0.0.1 box_type warm node2 127.0.0.1 127.0.0.1 xpack.installed true node2 127.0.0.1 127.0.0.1 resource_level mdeium
假設(shè)當(dāng)前時間為2019年9月1日,作為最新的數(shù)據(jù)存儲在hot節(jié)點上,只需要在建立索引時指定allocation策略即可
PUT api_log_2019-09-01 { "settings": { "number_of_shards": 3, "number_of_replicas": 0, "index.routing.allocation.require.box_type": "hot">
假設(shè)建立索引時沒有配置該選項也不要緊,動態(tài)修改即可
PUT api_log_2019-09-01/_settings { "index.routing.allocation.require.box_type": "hot" }
遷移歷史索引到warm節(jié)點的方式也是采用動態(tài)修改請求的方式
PUT api_log_2019-09-01/_settings { "index.routing.allocation.require.box_type": "warm", "index.routing.allocation.include.resource_level": "mdeium" } 我們將api_log_2019-09-01遷移到了box_type為warm,resource_level為mdeium的節(jié)點,即node2 通過查詢索引分片的分布情況 GET _cat/shards/api_log_2019-09-01?v 結(jié)果如下: index shard prirep state docs store ip node api_log_2019-09-01 1 p STARTED 4711 4.1mb 127.0.0.1 node2 api_log_2019-09-01 2 p STARTED 4656 4mb 127.0.0.1 node2 api_log_2019-09-01 0 p STARTED 4707 4.1mb 127.0.0.1 node2
大家應(yīng)該也注意到了,遷移索引的步驟是手動完成的,有沒有更智能的方式呢,答案是肯定的,rollover API可以很好地實現(xiàn)這個功能
首先為索引建立別名, 由于多個index可以對應(yīng)一個alias,為了讓es知道往哪個索引中寫,標(biāo)記其中一個索引is_write_index為true,同時需要注意索引名以橫杠+數(shù)字結(jié)尾的形式命名,這是為了讓es自動生成索引
POST _aliases { "actions": [ { "remove": { "index": "api_log_2019-09-01", "alias": "api_logs", "is_write_index": true } } ] } rollover API會根據(jù)設(shè)置的條件(conditions)來生成新的索引 POST api_logs/_rollover { "conditions": { "max_age": "1d", "max_docs": 10000, "max_size": "5gb" } } conditions的詳細(xì)解釋: max_age:索引是否創(chuàng)建大于1天 max_docs:索引文檔數(shù)是否超過10000 max_size:索引大小是否超過5GB max_size正在進(jìn)行中的合并會產(chǎn)生大量的臨時分片大小增長,而當(dāng)合并結(jié)束后這些增長會消失掉,不穩(wěn)定,max_age每個時間內(nèi)不一定均衡,max_docs比較合適 即以上三個條件滿足其一就會自動rollover
rollover也支持索引的settings設(shè)置 POST api_logs/_rollover { "conditions": { "max_age": "1d", "max_docs": 10000, "max_size": "5gb" }, "settings": { "index.number_of_shards": 2 } }
生成的索引名稱為api_log_2019-09-000002, 以長度為6,序號+1,左填充0的格式命名,但es支持自定義名稱,只需要在_rollover端點加入名稱即可
POST api_logs/_rollover/api_log_2019-09-02 {...}
關(guān)于ElasticSearch中怎么實現(xiàn)數(shù)據(jù)自動冷熱分離就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。