Elasticsearch維護方法彙總

集羣健康狀態

$ curl -XGET 127.0.0.1:9200/_cluster/health?pretty

green 綠燈,所有分片都正確運行,集羣非常健康。
yellow 黃燈,所有主分片都正確運行,但是有副本分片缺失。這種情況意味着 ES 當前還是正常運行的,但是有一定風險。注意,在 Kibana4 的 server 端啓動邏輯中,即使是黃燈狀態,Kibana 4 也會拒絕啓動,死循環等待集羣狀態變成綠燈後才能繼續運行。
red 紅燈,有主分片缺失。這部分數據完全不可用。而考慮到 ES 在寫入端是簡單的取餘算法,輪到這個分片上的數據也會持續寫入報錯。

節點下線

集羣中個別節點出現故障預警等情況,需要下線,也是 Elasticsearch 運維工作中常見的情況。如果已經穩定運行過一段時間的集羣,每個節點上都會保存有數量不少的分片。這種時候通過 reroute 接口手動轉移,就顯得太過麻煩了。這個時候,有另一種方式:

$ curl -XPUT 127.0.0.1:9200/_cluster/settings -d '{
  "transient" :{
      "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
   }
}'

Elasticsearch 集羣就會自動把這個 IP 上的所有分片,都自動轉移到其他節點上。等到轉移完成,這個空節點就可以毫無影響的下線了。和 _ip 類似的參數還有 _host, _name 等。此外,這類參數不單是 cluster 級別,也可以是 index 級別。下一小節就是 index 級別的用例。

reroute 接口

reroute 接口支持五種指令:allocate_replica, allocate_stale_primary, allocate_empty_primary,move 和 cancel。
常用的一般是 allocate 和 move:
allocate_* 指令
因爲負載過高等原因,有時候個別分片可能長期處於 UNASSIGNED 狀態,我們就可以手動分配分片到指定節點上。默認情況下只允許手動分配副本分片(即使用 allocate_replica),所以如果要分配主分片,需要單獨加一個 accept_data_loss 選項:

$ curl -XPOST 127.0.0.1:9200/_cluster/reroute -d '{
  "commands" : [ {
        "allocate_stale_primary" :
            {
              "index" : "logstash-2015.05.27", "shard" : 61, "node" : "10.19.0.77", "accept_data_loss" : true
            }
        }
  ]
}'

因爲負載過高,磁盤利用率過高,服務器下線,更換磁盤等原因,可以會需要從節點上移走部分分片:

$ curl -XPOST 127.0.0.1:9200/_cluster/reroute -d '{
  "commands" : [ {
        "move" :
            {
              "index" : "logstash-2015.05.22", "shard" : 0, "from_node" : "10.19.0.81", "to_node" : "10.19.0.104"
            }
        }
  ]
}'

集羣更新節點配置
剛上線的服務,最近一再的更新基礎配置(硬盤)

  1. 關閉分片自動均衡
$ curl -XPUT 127.0.0.1:9200/_cluster/settings
{
    "transient" : {
        "cluster.routing.allocation.enable" : "none"
    }
}
  1. 升級重啓該節點,並確認該節點重新加入到了集羣中

  2. 其他節點重複第2步,升級重啓。

  3. 最後所有節點配置更新完成後,重啓集羣的shard均衡

$ curl -XPUT 127.0.0.1:9200/_cluster/settings -d'
{
    "transient" : {
        "cluster.routing.allocation.enable" : "all"
    }
}'

設置磁盤空間水位線

$ curl -XPUT 127.0.0.1:9200/_cluster/settings

{

  "transient": {

    "cluster.routing.allocation.disk.watermark.low": "80%",

    "cluster.routing.allocation.disk.watermark.high": "90%",

  }

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