1. 程式人生 > 其它 >某雲elasticsearch節點失效,手動重置primary,遷移分割槽

某雲elasticsearch節點失效,手動重置primary,遷移分割槽

某雲es節點失效,重置primary,遷移分割槽

接手另一個團隊的elasticsearch服務,服務佈署在某雲上,遷移計劃執行期間,叢集狀態yellow,多sharding UNASSIGNED

夾一個私貨,個人其實是不喜歡雲的,有能力自已維護機房和物理伺服器的,還是用伺服器成本低

叢集版本5.5,使用kibana作監控,未使用cerebro

簡單排查一番後,某雲反應是硬碟失效,確定資料無法完全恢復

10個有效節點,2個節點的資料完全丟失,多index異

elasticsearch 只在資料無損的情況在後臺自動執行遷移複製

可能會導致資料損壞的遷移,需要明確手動來執行

對主節點資料無法完全恢復的場景,es提供兩種操作方式,都需要明確指定 "accept_data_loss":true

https://www.elastic.co/guide/en/elasticsearch/reference/5.5/cluster-reroute.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html

  • 1 allocate_stale_primary 選擇一個從節點作為主節點(存在有效從節點的情況下),若原主節點恢復,則會以新主(原從)覆蓋舊主的資料

    node選擇一個存在從shard的node

post http://3464.xyz.com:9200/_cluster/reroute
{
    "commands" : [
            {
            "allocate_stale_primary" : {
                "index" : "uc_2020", "shard" : 2,
               "node" : "3456","accept_data_loss":true
            }
        }
    ]
}
  • 2 allocate_empty_primary 指定一個空主,若原主節點恢復,則舊主會被完全清除
post http://3464.xyz.com:9200/_cluster/reroute
{
    "commands" : [
            {
            "allocate_empty_primary" : {
                "index" : "uc_2019", "shard" : 2,
               "node" : "3456","accept_data_loss":true
            }
        }
    ]
}

因為舊主已經不可能恢復了,檢視sharding的狀態,還有從的指定allocate_stale_primary,所有從都失效,或index 的replicas為1的指定allocate_empty_primary

因為兩個節點的丟失,shard分配一團亂,順帶手動執行一些shard的遷移

POST http://3464.xyz.com:9200/_cluster/reroute
{
    "commands" : [
        {
            "move" : {
                "index" : "test", "shard" : 0,
                "from_node" : "node1", "to_node" : "node2"
            }
        }
    ]
}

End