本篇內(nèi)容介紹了“Elasticsearch索引生命周期如何管理”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供平谷網(wǎng)站建設(shè)、平谷做網(wǎng)站、平谷網(wǎng)站設(shè)計(jì)、平谷網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、平谷企業(yè)網(wǎng)站模板建站服務(wù),十余年平谷做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
在 Elasticsearch的日常管理中,有很多如系統(tǒng)日志,行為數(shù)據(jù)等方面的應(yīng)用場景,這些場景的特點(diǎn)是數(shù)據(jù)量非常大,并且隨著時(shí)間的增長索引的數(shù)量也會(huì)持續(xù)增長,然而這些場景基本上只有最近一段時(shí)間的數(shù)據(jù)有使用價(jià)值或者會(huì)被經(jīng)常使用(熱數(shù)據(jù)),而歷史數(shù)據(jù)幾乎沒有作用或者很少會(huì)被使用(冷數(shù)據(jù)),這個(gè)時(shí)候就需要對(duì)索引進(jìn)行一定策略的維護(hù)管理甚至是刪除清理,否則隨著數(shù)據(jù)量越來越多除了浪費(fèi)磁盤與內(nèi)存空間之外,還會(huì)嚴(yán)重影響 Elasticsearch 的性能。
在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持針對(duì)索引的全生命周期托管管理,并且在 Kibana 上也提供了一套UI界面來配置策略。
hot: 索引還存在著大量的讀寫操作。
warm:索引不存在寫操作,還有被查詢的需要。
cold:數(shù)據(jù)不存在寫操作,讀操作也不多。
delete:索引不再需要,可以被安全刪除。
注意:以上只是索引生命周期階段的常見定義,具體策略可以根據(jù)實(shí)際業(yè)務(wù)情況來定義。
部署一個(gè)由2個(gè)hot節(jié)點(diǎn),2個(gè)warm節(jié)點(diǎn),2個(gè)cold節(jié)點(diǎn)組成的Elasticsearch集群,并且部署了Kibana和Cerebro方便調(diào)試和觀察。 docker-compose.yaml文件如下:
version: '2.2' services: cerebro: image: lmenezes/cerebro:0.8.3 container_name: hwc_cerebro ports: - "9000:9000" command: - -Dhosts.0.host=http://elasticsearch:9200 networks: - hwc_es7net kibana: image: docker.elastic.co/kibana/kibana:7.1.0 container_name: hwc_kibana7 environment: #- I18N_LOCALE=zh-CN - XPACK_GRAPH_ENABLED=true - TIMELION_ENABLED=true - XPACK_MONITORING_COLLECTION_ENABLED="true" ports: - "5601:5601" networks: - hwc_es7net elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 container_name: es7_hot1 environment: - cluster.name=cr7-hwc - node.name=es7_hot1 - node.attr.box_type=hot - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 ulimits: memlock: soft: -1 hard: -1 volumes: - hwc_es7data_hot1:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - hwc_es7net elasticsearch3: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 container_name: es7_warm1 environment: - cluster.name=cr7-hwc - node.name=es7_warm1 - node.attr.box_type=warm - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 ulimits: memlock: soft: -1 hard: -1 volumes: - hwc_es7data_warm1:/usr/share/elasticsearch/data networks: - hwc_es7net elasticsearch4: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 container_name: es7_cold1 environment: - cluster.name=cr7-hwc - node.name=es7_cold1 - node.attr.box_type=cold - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 ulimits: memlock: soft: -1 hard: -1 volumes: - hwc_es7data_cold1:/usr/share/elasticsearch/data networks: - hwc_es7net elasticsearch5: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 container_name: es7_hot2 environment: - cluster.name=cr7-hwc - node.name=es7_hot2 - node.attr.box_type=hot - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 ulimits: memlock: soft: -1 hard: -1 volumes: - hwc_es7data_hot2:/usr/share/elasticsearch/data networks: - hwc_es7net elasticsearch6: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 container_name: es7_warm2 environment: - cluster.name=cr7-hwc - node.name=es7_warm2 - node.attr.box_type=warm - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 ulimits: memlock: soft: -1 hard: -1 volumes: - hwc_es7data_warm2:/usr/share/elasticsearch/data networks: - hwc_es7net elasticsearch7: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 container_name: es7_cold2 environment: - cluster.name=cr7-hwc - node.name=es7_cold2 - node.attr.box_type=cold - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2 ulimits: memlock: soft: -1 hard: -1 volumes: - hwc_es7data_cold2:/usr/share/elasticsearch/data networks: - hwc_es7net volumes: hwc_es7data_hot1: driver: local hwc_es7data_warm1: driver: local hwc_es7data_cold1: driver: local hwc_es7data_hot2: driver: local hwc_es7data_warm2: driver: local hwc_es7data_cold2: driver: local networks: hwc_es7net: driver: bridge
執(zhí)行docker-compose up -d
命令即可啟動(dòng)Elasticsearch集群。(前提安裝好docker和docker-compose)
將ILM刷新時(shí)間設(shè)定為1秒,便于實(shí)驗(yàn)演示(默認(rèn)為10分鐘):
PUT _cluster/settings { "persistent": { "indices.lifecycle.poll_interval":"1s" } }
設(shè)置hot/warm/cold和delete四個(gè)階段:
hot:超過5個(gè)文檔以后rollover。
warm:20s后進(jìn)入warm階段,將索引設(shè)置為只讀。
cold:40s后進(jìn)入warm階段,將副本分別從1縮小為0。
delete:60s后進(jìn)入delete階段,刪除索引。
PUT /_ilm/policy/log_ilm_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_docs": 5 } } }, "warm": { "min_age": "20s", "actions": { "allocate": { "include": { "box_type": "warm" } }, "readonly": {} } }, "cold": { "min_age": "40s", "actions": { "allocate": { "include": { "box_type": "cold" }, "number_of_replicas": 0 } } }, "delete": { "min_age": "60s", "actions": { "delete": {} } } } } }
設(shè)置索引模板是為了新 rollover 出來的索引能夠應(yīng)用 iml 的配置:
PUT /_template/log_ilm_template { "index_patterns" : [ "ilm_index-*" ], "settings" : { "index" : { "lifecycle" : { "name" : "log_ilm_policy", "rollover_alias" : "ilm_alias" }, "routing" : { "allocation" : { "include" : { "box_type" : "hot" } } }, "number_of_shards" : "1", "number_of_replicas" : "1" } } }
將索引分配到hot節(jié)點(diǎn),并且調(diào)用之前設(shè)置的IML策略log_ilm_policy,設(shè)置rollover的別名為ilm_alias,設(shè)置主分片為1,副本分片為1。 索引必須后面要帶有數(shù)字,否則 rollover 策略不會(huì)生效。
PUT ilm_index-000001 { "settings": { "number_of_shards": 1, "number_of_replicas": 1, "index.lifecycle.name": "log_ilm_policy", "index.lifecycle.rollover_alias": "ilm_alias", "index.routing.allocation.include.box_type":"hot" }, "aliases": { "ilm_alias": { #在rollover的時(shí)候,alias會(huì)包含所有rollover的索引,并且會(huì)自動(dòng)將 is_write_index": #true 設(shè)置到最新rollover的索引上,也就是說寫操作會(huì)到最新的索引上。 "is_write_index": true } } }
連續(xù)執(zhí)行5次POST,創(chuàng)建5個(gè)文檔。
POST ilm_alias/_doc { "name":"cr7", "age": 15 }
剛開始可以看到總共有5個(gè)doc。
當(dāng)達(dá)索引iml_index-000001到5個(gè)doc時(shí),做了rollover操作,新建了新的索引iml_index-000002。
等待20s后,將索引iml_index-000001移動(dòng)到warm節(jié)點(diǎn)。
等待40s后,將索引iml_index-000001移動(dòng)到cold節(jié)點(diǎn),并且將副本數(shù)從1縮小為0。
等待60s后,索引iml_index-000001被刪除。
由于在warm階段設(shè)置了readonly,在warm和cold階段如果嘗試往iml_index-000001寫入或修改數(shù)據(jù),將會(huì)收到以下報(bào)錯(cuò):
{ "error": { "root_cause": [ { "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/8/index write (api)];" } ], "type": "cluster_block_exception", "reason": "blocked by: [FORBIDDEN/8/index write (api)];" }, "status": 403 }
“Elasticsearch索引生命周期如何管理”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
網(wǎng)站欄目:Elasticsearch索引生命周期如何管理
本文鏈接:http://m.rwnh.cn/article40/ggddho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站排名、網(wǎng)站內(nèi)鏈、虛擬主機(jī)、網(wǎng)站建設(shè)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)