背景
線上設置了幾個一天Rollover 一次的索引。 然後之前數據設置了14天刪除
幾天之後就新建了幾十個索引了。別人告知可能會有性能問題。
如何設置
針對索引建多少個,分片設置多少個比較合理
找到了官方指導
https://www.elastic.co/cn/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster
主分片 shard 可以處理索引請求
副本 replica 可以提升讀和備份
寫入分片的數據會定時 發佈到 磁盤Lucene分段
對於每個 Elasticsearch 索引,映射和狀態的相關信息都存儲在集羣狀態中。這些信息存儲在內存中,
分片數量增加會消耗資源
提示: 分片過小會導致段過小,進而致使開銷增加。您要儘量將分片的平均大小控制在至少幾 GB 到幾十 GB 之間。對時序型數據用例而言,分片大小通常介於 20GB 至 40GB 之間。
提示: 由於單個分片的開銷取決於段數量和段大小,所以通過 forcemerge 操作強制將較小的段合併爲較大的段能夠減少開銷並改善查詢性能。理想狀況下,應當在索引內再無數據寫入時完成此操作。請注意:這是一個極其耗費資源的操作,所以應該在非高峯時段進行。
提示: 每個節點上可以存儲的分片數量與可用的堆內存大小成正比關係,但是 Elasticsearch 並未強制規定固定限值。這裏有一個很好的經驗法則:確保對於節點上已配置的每個 GB的堆內存,將分片數量保持在 20 以下。如果某個節點擁有 30GB 的堆內存,那其最多可有 600 個分片,但是在此限值範圍內,您設置的分片數量越少,效果就越好。一般而言,這可以幫助集羣保持良好的運行狀態。
/_cat/indeces?v 查看索引狀態 平時可以多關注數據量, 但最好還是寫入前預估好
舉個例子
目前遇到的數據1天2g數據, 日常只關注7天內數據。
可以設置爲
PUT _ilm/policy/1g_policy?pretty
{
"policy":{
"phase":{
"hot":{
"actions": {
"rollover": {
"max_age": "15d"
}
}
},
"delete": {
"min_age": "15d"
"actions": {
"delete":{}
}
}
}
}
}
差不多是用到
而一些配置數據一天也沒多少條的, 可以按容量或者max_doc來算(估計有生之年都不一定會發生roll-over)
PUT _ilm/policy/small_policy?pretty
{
"policy":{
"phase":{
"hot":{
"actions": {
"rollover": {
"max_size": "10gb"
}
}
},
"delete": {
"min_age": "15d"
"actions": {
"delete":{}
}
}
}
}
}
修改索引模版策略,不會對之前的索引產生影響的。
原有的索引 會按原有策略繼續執行