通過設置跨集群OSS倉庫,您可以將已進行了自動快照備份的源Elasticsearch實例倉庫中的數據,恢復到目標端Elasticsearch實例中。例如有兩個6.7.0版本的Elasticsearch實例,ID分別為es-cn-a和es-cn-b,其中es-cn-a已經開通了自動快照備份功能,且已經進行過一次快照。如果es-cn-b想從es-cn-a的自動快照恢復數據,那么需要設置跨集群OSS倉庫。
背景信息
ES數據備份與恢復依賴于elasticsearch-repository-oss插件,阿里云ES實例默認已安裝該插件且不可卸載。關于該插件的詳細信息,請參見elasticsearch-repository-oss。
前提條件
源端實例與目標端實例需要滿足以下條件:
相同地域。
歸屬于相同賬號。
源端實例的版本低于或等于目標端實例的版本。
如果源端和目標端實例的版本都是商業版6.7.0,請確保兩個實例的內核版本都是最新或者目標端的內核版本比源端高。
重要跨集群OSS倉庫設置功能只支持高版本的實例引用相同版本或低版本的倉庫,不支持低版本實例引用高版本倉庫。
當高版本的實例引用低版本實例的倉庫時,需要注意高版本的實例對低版本實例的數據格式可能存在不兼容的情況。例如,從5.5.3版本的實例恢復數據到6.7.0版本的實例,對于單類型的索引,5.5.3版本的實例支持恢復數據到6.7.0版本;對于多類型索引,由于5.5.3版本的實例只支持多類型索引,而6.7.0版本不支持多類型索引,所以恢復可能會出現問題。
添加OSS倉庫引用
- 登錄阿里云Elasticsearch控制臺。
- 在左側導航欄,單擊Elasticsearch實例。
- 進入目標實例。
- 在頂部菜單欄處,選擇資源組和地域。
- 在Elasticsearch實例中單擊目標實例ID。
在左側導航欄,單擊數據備份。
在跨集群OSS倉庫設置區域,單擊立即創建。
說明如果不是首次添加倉庫引用,需要單擊創建OSS引用倉庫。
在創建OSS引用倉庫頁面,選擇源端實例。
重要所選實例與當前實例需要滿足上文的前提條件。
單擊確認。
添加成功后,源端實例顯示在當前頁面,并顯示引用倉庫的狀態。
重要由于倉庫列表是通過訪問對應實例獲取到的,因此當實例在變更中、不健康或者負載特別高時,可能無法獲取倉庫情況。此時,您可以在源端實例的Kibana控制臺中,執行
GET _snapshot
命令,獲取所有倉庫的地址。恢復索引。
跨集群OSS倉庫設置功能只是實現了實例間倉庫的引用,并不會自動進行數據的恢復。您可以按照需求在目標端Elasticsearch實例的Kibana控制臺上執行對應命令,恢復需要的索引數據。例如,從實例es-cn-a恢復file-2019-08-25索引,操作步驟如下:
登錄目標端Elasticsearch實例的Kibana控制臺。
具體步驟,請參見登錄Kibana控制臺。
說明 本文以阿里云Elasticsearch 6.7.0版本為例,其他版本操作可能略有差別,請以實際界面為準。在左側導航欄,單擊Dev Tools。
在Console中,執行以下命令,查詢指定實例倉庫中的所有快照信息。
GET /_cat/snapshots/aliyun_snapshot_from_es-cn-a?v
該請求會返回指定倉庫下所存儲的所有快照信息。
說明aliyun_snapshot_from_es-cn-a為添加OSS倉庫引用中的引用倉庫名稱。
根據上一步獲取的快照id,執行以下命令恢復該快照下的指定索引。
重要請確保指定索引在目標端Elasticsearch實例中處于關閉狀態,或者沒有該索引。如果在執行恢復索引命令之前,目標端Elasticsearch實例中已有相同名稱的索引,并且處于開啟狀態,那么在執行恢復索引命令時會報錯。
恢復
.
開頭的系統索引可能會導致Kibana訪問失敗,建議不要恢復系統索引。
恢復單個索引
POST _snapshot/aliyun_snapshot_from_es-cn-a/es-cn-a_20190705220000/_restore {"indices": "file-2019-08-25"}
恢復多個索引
POST _snapshot/aliyun_snapshot_from_es-cn-a/es-cn-a_20190705220000/_restore {"indices": "kibana_sample_data_ecommerce,kibana_sample_data_logs"}
恢復所有索引(除過
.
開頭的系統索引)POST _snapshot/aliyun_snapshot_from_es-cn-a/es-cn-a_20190705220000/_restore {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}