分配的變化,主分片分配
再次之前,當指定數量的分配副本被發現時主分片被分配(這個數量由 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)原創,轉載請標明作者和出處。