在升級(jí)阿里云Elasticsearch實(shí)例版本前,您需要通過(guò)升級(jí)檢查,檢查集群狀態(tài)是否正常、是否存在不兼容的配置等,并進(jìn)行調(diào)整。本文介紹在版本升級(jí)前需要完成的人工檢查、集群狀態(tài)檢查和系統(tǒng)兼容性檢查,以及兼容性檢查失敗時(shí)的調(diào)整方法。
背景信息
- 升級(jí)版本的具體操作,請(qǐng)參見(jiàn)升級(jí)版本。
- 本文的命令都可在Kibana控制臺(tái)上執(zhí)行,關(guān)于如何登錄Kibana控制臺(tái),請(qǐng)參見(jiàn)登錄Kibana控制臺(tái)。
人工檢查
在執(zhí)行升級(jí)版本操作前,您必須手動(dòng)完成以下檢查:
- 執(zhí)行以下命令,檢查集群中是否存在close狀態(tài)的索引。
GET _cat/indices?v
如果存在,需要執(zhí)行以下命令將索引狀態(tài)暫時(shí)設(shè)置為open,以便進(jìn)行升級(jí)檢查。
POST test/_open
- 如果您需要更新升級(jí)內(nèi)核補(bǔ)丁,需要檢查對(duì)應(yīng)實(shí)例是否存在可更新的內(nèi)核補(bǔ)丁,存在才可更新。
可在實(shí)例的基本信息頁(yè)面查看,如下圖所示。
- 檢查是否通過(guò)客戶端連接了待升級(jí)的集群。如果是,您需要更新客戶端版本,確保客戶端與集群版本的兼容性。關(guān)于兼容性的詳細(xì)信息,請(qǐng)參見(jiàn)Compatibility。
- 將5.x版本中的多type索引拆分為單type索引。
Elasticsearch從6.x版本開(kāi)始,不再支持一個(gè)索引多個(gè)type。而升級(jí)后,在5.x版本中創(chuàng)建的多type索引,在6.x版本中依然可以正常寫(xiě)入,但是在6.x版本中新建多type索引時(shí)會(huì)報(bào)錯(cuò)。因此,建議在升級(jí)前,按照官方標(biāo)準(zhǔn),將5.x版本中的多type索引拆分為單type索引后,再進(jìn)行升級(jí)。具體操作步驟,請(qǐng)參見(jiàn)基于reindex實(shí)現(xiàn)低版本多type數(shù)據(jù)遷移。
- 執(zhí)行以下命令,檢查集群中是否配置了跨集群訪問(wèn)。開(kāi)啟時(shí),您可以在返回結(jié)果中看到search.remote屬性的配置,且不為null。
GET _cluster/settings
如果配置了跨集群訪問(wèn),需要執(zhí)行以下腳本,在升級(jí)前取消該項(xiàng)配置,待升級(jí)后重新配置。PUT _cluster/settings { "persistent": { "search.remote.*": null }, "transient": { "search.remote.*": null } }
重要 升級(jí)后重新配置跨集群訪問(wèn)時(shí)需要注意:Elasticsearch 5.x版本中使用的配置參數(shù)是search.remote,而6.x版本中使用的是cluster.remote。
集群狀態(tài)檢查
校驗(yàn)項(xiàng) | 正常狀態(tài) |
---|---|
集群健康度 | 集群狀態(tài)正常(綠色)。 |
JVM使用率 | 集群JVM使用率低于75%。 |
磁盤(pán)使用率 | 節(jié)點(diǎn)的磁盤(pán)使用率低于cluster.routing.allocation.disk.watermark.low屬性設(shè)置的值。 |
副本個(gè)數(shù) |
|
快照 | 集群在最近1個(gè)小時(shí)內(nèi)完成過(guò)快照。 |
自定義插件 | 集群中不存在阿里云Elasticsearch預(yù)裝之外的插件。 |
可用區(qū)ECS資源校驗(yàn) | 可用區(qū)中ECS實(shí)例的庫(kù)存充足。
說(shuō)明 由于版本升級(jí)采用了先增加高版本節(jié)點(diǎn),再將低版本節(jié)點(diǎn)的數(shù)據(jù)遷移到高版本節(jié)點(diǎn),最后刪除低版本節(jié)點(diǎn)的方式,因此升級(jí)前需要校驗(yàn)可用區(qū)中ECS實(shí)例的庫(kù)存。
|
YML文件 | 高版本的集群可以兼容低版本的配置。 |
配置兼容檢查
GET _cluster/settings
和GET */_settings?flat_settings=true
命令查看集群中是否存在下表中的配置,確保升級(jí)操作可以順利進(jìn)行。
序號(hào) | 配置級(jí)別 | 配置信息 | 配置參數(shù) |
---|---|---|---|
1 | 集群級(jí)別 | 集群快照設(shè)置(Snapshot settings) | cluster.routing.allocation.snapshot.relocation_enabled |
2 | 集群存儲(chǔ)限流設(shè)置(Store throttling settings) | indices.store.throttle.type、indices.store.throttle.max_bytes_per_sec | |
3 | 索引級(jí)別 | 索引相似性設(shè)置(Similarity settings) | index.similarity.base |
4 | 索引影子副本設(shè)置(Shadow replicas settings) | index.shared_filesystem、index.shadow_replicas | |
5 | 索引存儲(chǔ)設(shè)置(Index store settings) | index.store.type | |
6 | 索引存儲(chǔ)限流設(shè)置(Index store throttling settings) | index.store.throttle.type、index.store.throttle.max_bytes_per_sec | |
7 | 索引Mapping參數(shù)include_in_all設(shè)置 | include_in_all 說(shuō)明 該配置在6.0版本之后創(chuàng)建的索引中無(wú)法使用,但在5.x版本中創(chuàng)建的包含此配置的索引,在升級(jí)到6.x版本后,可以兼容。
|
|
8 | 索引創(chuàng)建版本設(shè)置 | index.version.created 說(shuō)明 該配置表示不允許跨主版本升級(jí)索引。例如,無(wú)法將在5.x版本創(chuàng)建的索引直接升級(jí)到7.x版本,需要將失敗的索引通過(guò)reindex遷移到新索引并刪除后,再進(jìn)行升級(jí)。
|
|
9 | 索引模板級(jí)別 | 索引模板相似性設(shè)置(Similarity settings) | index.similarity.base |
10 | 索引模板影子副本設(shè)置(Shadow replicas settings) | index.shared_filesystem、index.shadow_replicas | |
11 | 索引模板存儲(chǔ)設(shè)置(Index store settings) | index.store.type | |
12 | 索引模板存儲(chǔ)限流設(shè)置(Index store throttling settings) | index.store.throttle.type、index.store.throttle.max_bytes_per_sec | |
13 | 索引模板 Mapping參數(shù)include_in_all | include_in_all | |
14 | 索引模板Mapping元字段_all | _all | |
15 | 索引模板Mapping包含多個(gè)type | 無(wú)
說(shuō)明 檢查索引Mapping中是否包含多個(gè)type。
|
- 以上配置參數(shù)在6.0版本開(kāi)始被廢棄,詳細(xì)信息請(qǐng)參見(jiàn)Breaking changes in 6.0。
- 以上檢查項(xiàng)均為CRITICAL(錯(cuò)誤)級(jí)別。出現(xiàn)一次,即表示檢查失敗無(wú)法升級(jí),此類(lèi)型檢查項(xiàng)對(duì)應(yīng)配置在目標(biāo)版本無(wú)法兼容,您需要參見(jiàn)配置不兼容的調(diào)整方法調(diào)整集群配置,并重新檢查。而對(duì)于WARNING(警告)級(jí)別的檢查項(xiàng),表示檢查失敗時(shí)仍可以升級(jí),即此類(lèi)型檢查項(xiàng)對(duì)應(yīng)配置在升級(jí)后將被忽略。
配置不兼容的調(diào)整方法
- 集群級(jí)別
當(dāng)以下配置不兼容時(shí),您可以取消對(duì)應(yīng)配置進(jìn)行調(diào)整。
配置信息 取消配置命令 集群快照設(shè)置(Snapshot settings) PUT _cluster/settings { "persistent": { "cluster.routing.allocation.snapshot.relocation_enabled": null }, "transient": { "cluster.routing.allocation.snapshot.relocation_enabled": null } }
集群存儲(chǔ)限流設(shè)置(Store throttling settings) PUT _cluster/settings { "persistent": { "indices.store.throttle.type": null, "indices.store.throttle.max_bytes_per_sec": null }, "transient": { "indices.store.throttle.type": null, "indices.store.throttle.max_bytes_per_sec": null } }
- 索引級(jí)別
當(dāng)以下配置不兼容時(shí),您可以取消對(duì)應(yīng)配置進(jìn)行調(diào)整。
配置信息 取消配置命令 相關(guān)說(shuō)明 索引相似性設(shè)置(Similarity settings) PUT test_index/_settings { "index.similarity.base.*": null }
這些配置需要關(guān)閉索引后修改,關(guān)閉后,您將無(wú)法對(duì)索引進(jìn)行讀寫(xiě)操作。修改完成后,您可以再次打開(kāi)對(duì)應(yīng)索引。以test_index索引為例,關(guān)閉和打開(kāi)索引的命令如下: - 關(guān)閉索引
POST test_index/_close
- 打開(kāi)索引
POST test_index/_open
索引影子副本設(shè)置(Shadow Replicas settings) PUT test_index/_settings { "index.shared_filesystem": null, "index.shadow_replicas": null }
索引存儲(chǔ)設(shè)置(Index Store settings) PUT test_index/_settings { "index.store.type": null }
索引存儲(chǔ)限流設(shè)置(Index Store throttling settings) PUT test_index/_settings { "settings": { "index.store.throttle.type": null, "index.store.throttle.max_bytes_per_sec": null } }
無(wú) 說(shuō)明 對(duì)于已創(chuàng)建的包含索引Mapping參數(shù)include_in_all的索引,升級(jí)后可以兼容,無(wú)需修復(fù)。 - 關(guān)閉索引
- 索引模板級(jí)別
以下以test_template索引模板為例,介紹處理索引模板類(lèi)型的檢查項(xiàng)未通過(guò)檢查的調(diào)整方法:
- 使用
GET _template/test_template
命令獲取不兼容的模板test_template。根據(jù)以下結(jié)果發(fā)現(xiàn)test_template中存在的不兼容配置包括:索引模板存儲(chǔ)設(shè)置(Index store settings)、索引模板Mapping元字段_all和索引模板Mapping參數(shù)include_in_all。
{ "test_template": { "order": 0, "template": "test_*", "settings": { "index": { "store": { "throttle": { "max_bytes_per_sec": "100m" } } } }, "mappings": { "test_type": { "_all": { "enabled": true }, "properties": { "test_field": { "type": "text", "include_in_all": true } } } }, "aliases": {} } }
- 執(zhí)行以下命令,刪除模板中不兼容的配置,并更新模板。
PUT _template/test_template { "order": 0, "template": "test_*", "settings": { }, "mappings": { "test_type": { "properties": { "test_field": { "type": "text" } } } }, "aliases": {} }
- 使用