在通過 /_cluster/state 命令查看es 狀態的時候,發現es 處於一個yellow的狀態, 這個很奇怪,按照官方的解釋,就是所有主分片都是處於可用狀態,但是有復制分片不可用。為什么有復制分片不可用呢?
通過/_cat/shards 查看,發現有從分配處於一個未分配的狀態,該命令該出的數據奇怪的地方是,我的集群明明有三台機器,但是shareds里面只給出了兩台。
data 2 r STARTED 449516 1.6gb 100.73.22.5 22-5
data 2 p STARTED 449516 1.6gb 100.73.22.6 22-6
data 2 r UNASSIGNED
然后通過查閱官方手冊,查詢UNASSIGNED 的原因,然后發現很多種可能性的,但是官方的api 的case里面,shards 是直接給出了原因的,但是我的es卻沒有給出原因。怎么辦呢?在api文檔里面找答案,發現了/_cluster/reroute 的命令,一看就知道是救星,既然狀態是UNASSIGNED, 我手動指定 該切片到特定的節點,不就可以了么。
執行命令
curl -XPOST ‘100.73.22.5:6200/_cluster/reroute’ -d ‘{
“commands” : [{
"move" : {
"index" : "data",
"shard" : 0,
"from_node" : "22-6" ,
"to_node": "22-5"
}
}]
}’
然后ES報錯,從報錯信息里面得到一個信息,就是說磁盤空間已經超過了85%,無法執行,然后果然一看,磁盤已經滿了。原來之所以只有兩個節點,是因為第三個節點不能用導致的。
so,剩下的就很簡單,down掉es 進程,然后把 elasticsearch.yml 中的兩項path信息,更新到一個更大的磁盤,然后重啟服務,ok了。
/_cat/shards發現 切片的狀態,已經變成INITIALIZING了。正在同步數據。df -h 發現大磁盤的使用量 刷刷的上升。