ElasticSearch會根據當前Node的剩餘空間決定是否再往這個Node分配Shard或者將這個Node的Shard遷移到其餘Nodenode
能夠在elasticsearch.yml
中或使用cluster-update-settings
API配置下面的參數json
cluster.routing.allocation.disk.threshold_enabled
是否啓動根據磁盤空間自動分配,默認爲true
elasticsearch
cluster.routing.allocation.disk.watermark.low
磁盤使用的最低水位線,默認爲85%,到了這個值,ES不會再分配新的Shard到這個Node.也能夠設置爲一個絕對空間大小,如500mb,表示容許的最小的剩餘空間.這個值對新建立的索引的primary shard無效,特別要注意的是,這個值對從未分配過的Shard也無效.code
cluster.routing.allocation.disk.watermark.high
磁盤高水位線,默認爲90%,當使用率超過這個值,ES會把這個node上的shard轉移到其餘node.這個值也一樣能夠設置爲一個絕對值,表示最大容許的剩餘空間,這個這對全部shard生效,這裏有別於前一個配置.索引
cluster.routing.allocation.disk.watermark.flood_stage
洪水水位線,默認爲95%,當使用率達到這個值,ES會將對應的索引設爲只讀.這是最後一個保護措施.只讀狀態必須在有了足夠空間後人工解除.it
注意: 你能夠混合使用百分比和絕對值水位線,可是不建議這麼用,由於你常常沒法判斷這些值是否產生衝突(好比,高水位線比洪水線還高).io
PUT /twitter/_settings { "index.blocks.read_only_allow_delete": null }
cluster.info.update.interval
ES檢查磁盤使用率的頻率,默認30sast
cluster.routing.allocation.disk.include_relocations
默認爲true,計算磁盤使用量時,是否把當前正在分配的shard所佔用空間考慮在內,若是不考慮這部分空間,就會把這些空間計算在內,磁盤使用會被高估,顯而易見.class
注意: 使用百分比時表示使用空間,而使用絕對值時表示剩餘空間,看起來比較使人困惑,可是也沒有更好的辦法.配置
更新低水位線到100GB剩餘空間,高水位線設爲50GB,洪水線設爲10GB,1分鐘更新一次狀態.
PUT _cluster/settings { "transient": { "cluster.routing.allocation.disk.watermark.low": "100gb", "cluster.routing.allocation.disk.watermark.high": "50gb", "cluster.routing.allocation.disk.watermark.flood_stage": "10gb", "cluster.info.update.interval": "1m" } }