Elasticsearch索引容量管理實踐

2022-07-27 10:24:13 字數 4111 閱讀 7620

包含文章發布時段最新活動,前往es產品介紹頁,可查詢es當前活動統一入口

elasticsearch service自建遷移特惠政策》

elasticsearch service新使用者特惠狂歡,最低4折首購優惠 >>

elasticsearch service企業首購特惠,助力企業復工復產》

本文介紹 3種管理索引容量的方法,從這3種方法可以了解到 es 管理索引容量的演進過程。

索引名上帶日期的寫法:

例如

:00}}-000001>

參考官方文件:date math support in index names(

在使用的時候,索引名要 urlencode 後再使用

put /%3cmylogs-%7bnow%7byyyymmddhh%7c%2b08%3a00%7d%7d-000001%3e}}

執行結果:

寫入資料的時候也要帶上日期

post /%3cmylogs-%7bnow%7byyyymmddhh%7c%2b08%3a00%7d%7d-000001%3e/_doc

執行結果:

,"_seq_no" : 0,

"_primary_term" : 1

}由於資料分布在多個索引裡,查詢的時候要在符合條件的所有索引查詢,可以使用下面的方法查詢

2.3.1 使用逗號分割指定多個索引

get /mylogs-2020061518-000001,mylogs-2020061519-000001/_search

}}get /mylogs-*/_search}}

執行結果:

,"hits" : ,

"max_score" : 1.0,

"hits" : [}]

}}get /mylogs-read-alias/_search}}

執行結果同上

這個方法的優點是比較直觀能夠通過索引名稱直接分辨出資料的新舊,缺點是:

rollover 的原理是使用乙個別名指向真正的索引,當指向的索引滿足一定條件(文件數或時間或索引大小)更新實際指向的索引。

注意: 索引名稱的格式為 -d 這種格式的,數字預設是 6位

put myro-000001}}

使用 bulk 一次寫入了 3條記錄

post /myro_write_alias/_bulk?refresh=true}}

}執行結果:

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}},

,"_seq_no" : 1,

"_primary_term" : 1,

"status" : 201}},

,"_seq_no" : 2,

"_primary_term" : 1,

"status" : 201}}

]}記錄都寫到了 myro-000001 索引下

rollover 的3個條件是並列關係,任意乙個條件滿足就會發生 rollover

post /myro_write_alias/_rollover

}執行結果:

}分析一下執行結果:

"new_index" : "myro-000002"

"[max_docs: 3]" : true,

從結果看出滿足了條件("[max_docs: 3]" : true)發生了 rollover,新的索引指向了 myro-000002

再寫入一條記錄:

post /myro_write_alias/_doc

已經寫入了新的索引,結果符合預期

,"_seq_no" : 0,

"_primary_term" : 1

}es 一直在索引管理這塊進行優化迭代,從6.7版本推出了索引生命週期管理(index lifecycle management ,簡稱ilm)機制,是目前官方提供的比較完善的索引管理方法。所謂 lifecycle(生命週期)是把索引定義了四個階段:

這 4個階段是 es 定義的乙個索引從生到死的過程, hot -> warm -> cold -> delete 4個階段只有 hot 階段是必須的,其他3個階段根據業務的需求可選。

使用方法通常是下面幾個步驟:

這一步通常在 kibana 上操作,需要的時候再匯出 es 語句

例如下面這個策略

匯出的語句如下

put _ilm/policy/myes-lifecycle

,"set_priority": }}

}}}es 語句如下:

put /_template/myes_template

},"settings": ,

"refresh_interval": "30s",

"number_of_shards": "12",

"number_of_replicas": "1"}},

"properties": }}

}⚠注意:

es 語句:

put /myes-testindex-000001}}

⚠注意:

get /myes-testindex-000001

{}執行結果:

,"myes_write_alias" :

},"dynamic_templates" : [

},"type" : "text"}}

},}},}

}],"properties" : }},

"settings" : ,

"refresh_interval" : "30s",

"number_of_shards" : "12",

"translog" : ,

"provided_name" : "myes-testindex-000001",

"max_result_window" : "65536",

"creation_date" : "1592222799955",

"unassigned" :

},"priority" : "100",

"number_of_replicas" : "1",

"uuid" : "tpwdbkuvrjktrhil4fkcpa",

"version" : }}

}}⚠注意:

post /myes_write_alias/_bulk?refresh=true}}

}執行結果:

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}},

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}},

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}}

]}⚠注意:

再次執行上面的語句,寫入 3條記錄發現新的資料都寫到了 myes-testindex-000002 中, 結果符合預期。

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}},

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}},

,"_seq_no" : 0,

"_primary_term" : 1,

"status" : 201}}

]}⚠注意:

修改 lifecycle 配置:

put _cluster/settings

}疫情期間線上教學需求爆發,qq的家校群功能也迎來了一批發展紅利,家校群的作業功能可以輕鬆在 qq 群裡實現作業布置,提交,批改等功能,深受師生們的喜愛。

近期推出的作業統計功能,可以指定時間段+指定科目動態給出排名,有效提高了學生答題的積極性。在功能的實現上如果用傳統的 sql + kv 的方式實現成本比較高,要做到高效能也需要花不少精力,借助 es 強大的統計聚合能力大大降低了開發成本,實現了需求的快速上線。

Elasticsearch索引建議

背景 最近在做日誌收集,用到elasticsearch作為儲存層,因為日誌量比較大,一天近2t,所以每時每刻都會有大量的插入操作。又由於是給開發人員查日誌使用,所以查詢的量比較小。受限於儲存空間,目前僅保留7天的日誌,多數為乙個業務模組乙個索引,按天切分索引。關於索引和型別的取捨,建立多個索引還是乙...

elasticsearch 建立索引

介紹 分詞器 analyzer 包括乙個分解器 tokenizer 和多個詞元過濾器 filter 詞元過濾器的作是對分詞器提取的詞元進一步處理,比如轉成小寫,使用edge ngram,同義詞等,處理之後成為索引詞 term 文件正包含了幾個這樣的term成為frequency 詞頻 分解器 tok...

Elasticsearch 索引例項

elasticsearch包含了一系列的感念,比如索引 indexing 搜尋 search 以及聚合 aggregations 現在我們主要介紹indexing。在elasticsearch中,文件歸屬於一種型別 type 而這些型別存在於索引 index 中,我們可以畫一些簡單的對比圖來模擬傳統...