如何給ES 索引設置合適的 ILM策略 和 分片數值

背景

線上設置了幾個一天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":{}
                }
            }
        }
    }
}

修改索引模版策略,不會對之前的索引產生影響的。
原有的索引 會按原有策略繼續執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章