分配的變化,主分片分配node
再次以前,當指定數量的分配副本被發現時主分片被分配(這個數量由 index.recovery.initial_shards參數指定,如今已經廢棄了)。在這種狀況下,若是主分片的配置只有一個副本,就是集羣的定義是一個單一的分片,這意味着索引的任何分片拷貝都有可能成爲主分片,甚至是一個好久之前的數據。如今經過分配分片IDs來解決這個問題。json
分配給分片拷貝一個惟一的IDs做爲標誌。這容許集羣區分有效的相同的數據和路徑的多個副本,在集羣啓動後,只有分片的副本包含最新的數據時才能夠成爲主分片。app
經過分配IDs來代替之前的版本號來識別分片的拷貝,在索引分片存儲API中也作了相應的調整。例如:jvm
請求:GET http://127.0.0.1:9200/secilog/_shard_storeselasticsearch
返回值:插件
{ ... "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的狀況。token
自定義路由命令Elasticsearch再也不支持註冊自定義配置命令插件。接口
index.shared_filesystem.recover_on_any_node爲true的行爲進行了調整,在以前當沒有分片的副本被發現時,有可能選擇任意的節點,但如今爲了考慮平衡進行有選擇的分配節點。ip
分片副本的發現的行爲也發生了變化,在以前若是沒有知足條件的分片副本則不進行分片副本分配,但如今能夠分配分配的副本。
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)原創,轉載請標明做者和出處。