elasticsearch5.0.0分配的變化Http協議和REST接口的變化 原 薦

分配的變化,主分片分配

再次之前,當指定數量的分配副本被發現時主分片被分配(這個數量由 index.recovery.initial_shards參數指定,現在已經廢棄了)。在這種情況下,如果主分片的配置只有一個副本,就是集羣的定義是一個單一的分片,這意味着索引的任何分片拷貝都有可能成爲主分片,甚至是一個很久以前的數據。現在通過分配分片IDs來解決這個問題。

分配給分片拷貝一個唯一的IDs作爲標誌。這允許集羣區分有效的相同的數據和路徑的多個副本,在集羣啓動後,只有分片的副本包含最新的數據時纔可以成爲主分片。

通過分配IDs來代替以前的版本號來識別分片的拷貝,在索引分片存儲API中也做了相應的調整。例如:

請求:GET http://127.0.0.1:9200/secilog/_shard_stores

返回值:

{
    ...
   "0": { 
        "stores": [ 
            {
                "sPa3OgxLSYGvQ4oPs-Tajw": { 
                    "name": "node_t0",
                    "transport_address": "local[1]",
                    "attributes": {
                        "mode": "local"
                    }
                },
                "allocation_id": "2iNySv_OQVePRX-yaRH_lQ", 
                "legacy_version": 42, 
                "allocation" : "primary" | "replica" | "unused", 
                "store_exception": ... 
            },
            ...
        ]
   },
    ...
}

在返回的結果中,新的版本返回字段是allocation_id,老版本返回的字段是version。這個字段可用於創建Elasticsearch的當前版本或者在集羣中有效的版本中所有分片的拷貝。legacy_version字段可以可以理解爲以前版本的version字段。

路由命令在新的版本中有兩條命令,allocate_replica 和allocate_empty_primary。我們引入了一個先的命令allocate_stale_primary。allocate_replica命令可以理解爲以前設置allow_primary爲false的情況,allocate_empty_primary命令可以理解爲以前設置allow_primary爲ture的情況。

自定義路由命令Elasticsearch不再支持註冊自定義配置命令插件。

index.shared_filesystem.recover_on_any_node爲true的行爲進行了調整,在之前當沒有分片的副本被發現時,有可能選擇任意的節點,但現在爲了考慮平衡進行有選擇的分配節點。

分片副本的發現的行爲也發生了變化,在之前如果沒有滿足條件的分片副本則不進行分片副本分配,但現在可以分配分配的副本。

HTTP changes

HTTP協議請求壓縮始終被支持,在之前的版本中需要設置http.compressed爲true纔開啓壓縮功能。

REST API changes

在以前的REST查詢中,如果有無法識別字符串參數將被忽略。從用戶的角度來看,這樣並不合理,但現在的版本如果有不能識別的字符串參數將返回錯誤。

自定義id的長度如果超過512則會被拒絕。

/_optimize結尾的請求將被移除,取而代之的是/_forcemerge

在GET方式的HTTP請求中/_forcemerge將不在支持,可以換成用POST方式的請求。

創建索引的方式只能用PUT方式,之前創建所以既可以用PUT也可以用POST。現在只支持PUT方式。

判斷索引是否存在的接口HEAD {index}/{type} 被替換成了{index}/_mapping/{type},爲了兼容性5.0版本還可以使用,將在6.0版本中移除。

在 /_cluster/stats統計返回值中去掉了mem內存部分。

在接口/_cluster/state的routing table中移除了分片版本號。在集羣狀態中存儲了分片的id,用選擇主分片的方式來代替版本信息。

節點角色信息將不再是節點屬性的一部分。節點角色在節點統計的返回值中。

禁止不帶引號的JSON,此前,JSON文檔被允許有不帶引號的字段的名稱,這種寫法不是嚴謹的JSON格式,如果在之前的ES版本中有不帶引號的字段,有些操作可能會報錯,因此在jvm.options文件中增加了一個配置-Delasticsearch.json.allow_unquoted_field_names。這個配置將在6.0版本中移除。

過濾接口中的char_filters參數被命名爲char_filter。token_filters參數將被移除,用filter代替。

Delete-By-Query插件中的DELETE /_query請求被移除,用Delete By Query接口代替。

PUT /_scripts/{lang}/{id}/_create創建腳本索引被移除,用stored scripts來代替。

PUT /_search/template/{id}/_create創建索引模板被移除。用Pre-registered模板來代替。

有些REST接口的結尾可以增加鍵值對的方式,現在這種方式被移除。

在_cluster/health以前需要大量的wait_for_relocating_shards參數,現在只需要設置boolean類型的wait_for_no_relocating_shards參數,如果設置爲true,表示請求將等待(直到配置超時)的集羣返回之前沒有分片的搬遷。默認爲false,這意味着操作不會等待。

本文由賽克 藍德(secisland)原創,轉載請標明作者和出處。

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