ElasticSearch 的3種數據遷移方案

在實際工作中,我們經常會遇到需要將自建的 Elasticsearch 遷移上云,或者遷移到其他 ES 集群的情況。這時,選擇合適的數據遷移方案就顯得尤為重要啦。今天就來給大家介紹三種常用的遷移方案,分別是 COS 快照、logstash 和 elasticsearch - dump,小伙伴們可以根據自己的業務需求挑選哦~

如果業務可以停服或者暫停寫操作,那這幾種方式都可以考慮:

  1. COS 快照(Cloud Object Storage)
  2. logstash
  3. elasticsearch - dump

一、COS 快照數據備份

基于 COS 快照的遷移方式是借助 ES 的 snapshot api 接口來實現的。簡單來說,就是先從源 ES 集群創建索引快照,然后在目標 ES 集群中進行恢復。不過,用這種方式遷移時,有個特別需要注意的點就是 ES 的版本問題:目標 ES 集群的主版本號(比如 5.6.4 中的 5 就是主版本號)要大于等于源 ES 集群的主版本號。而且 1.x 版本的集群創建的快照不能在 5.x 版本中恢復哦??。

創建 repository 倉庫

創建快照之前,必須先創建 repository 倉庫,一個倉庫可以包含多份快照文件。repository 主要有以下幾種類型:

  • fs:共享文件系統,快照文件就存放在文件系統里。
  • url:指定文件系統的 URL 路徑,支持 http、https、ftp、file、jar 這些協議。
  • s3:AWS S3 對象存儲,快照存放在 S3 中,需要以插件形式支持,安裝插件可以參考相關文檔。
  • hdfs:快照存放在 hdfs 中,也是以插件形式支持,安裝插件可參考對應文檔。
  • cos:快照存放在騰訊云 COS 對象存儲中,同樣以插件形式支持,安裝插件后要重啟集群才能用哦,安裝方法可以參考相關文檔。

如果是從自建 ES 集群遷移到騰訊云的 ES 集群,直接用 COS 類型倉庫就很方便。但得先在自建 ES 集群上安裝 cos - repository 插件,之后把自建 ES 集群的數據備份到 COS,再在騰訊云的 ES 集群中恢復就行啦。

要是自建 ES 集群不方便安裝 cos - repository 插件,但已經安裝了 repository - s3 或者 repository - hdfs 插件,那可以先把數據備份到 S3 或者 HDFS 中,再把備份好的文件上傳到騰訊云 COS,最后在騰訊云的集群中恢復。

創建 COS 倉庫可以用下面這個命令:

PUT _snapshot/my_cos_backup{"type": "cos","settings": {"app_id": "xxxxxxx","access_key_id": "xxxxxx","access_key_secret": "xxxxxxx","bucket": "xxxxxx","region": "ap-guangzhou","compress": true,"chunk_size": "500mb","base_path": "/"}}

這里面的參數意思分別是:

  • app_id:騰訊云賬號 APPID。
  • access_key_id:騰訊云 API 密鑰 SecretId。
  • access_key_secret:騰訊云 API 密鑰 SecretKey。
  • bucket:COS Bucket 名字,是不帶 appId 后綴的哦。
  • region:COS Bucket 地域,一定要和 ES 集群在同一個地域。
  • base_path:備份目錄。

在源 ES 集群中創建 snapshot

調用 snapshot api 就能創建快照來備份索引數據,創建的時候可以指定備份部分索引,也可以備份所有索引,具體的參數可以去看官方文檔。

備份所有索引:把源 ES 集群中的所有索引備份到 my_cos_backup 倉庫下,命名為 snapshot_1,用這個命令:

PUT _snapshot/my_cos_backup/snapshot_1

這個命令會立刻返回,然后在后臺異步執行。要是想讓命令阻塞執行,加上 wait_for_completion 參數就行:

PUT _snapshot/my_cos_backup/snapshot_1?wait_for_completion=true

命令執行時間和索引大小有關哦。

備份指定索引:創建快照時可以指定要備份的索引,像這樣:

PUT _snapshot/my_cos_backup/snapshot_2{"indices": "index_1,index_2"}

這里要注意,indices 的值有多個索引時,要用逗號隔開,而且不能有空格。

查看快照狀態

想知道快照有沒有備份完成,用下面這個命令,返回結果中 state 字段是 SUCCESS 就說明備份成功啦:

GET _snapshot/my_cos_backup/snapshot_1

在目標 ES 集群中創建 repository

在目標 ES 集群中創建倉庫的方法和在源 ES 集群中是一樣的哦。

從快照恢復

把快照中備份的所有索引恢復到 ES 集群,用這個命令:

POST _snapshot/my_cos_backup/snapshot_1/_restore

如果 snapshot_1 里有 5 個索引,那這 5 個都會被恢復。還可以用附加選項對索引重命名,比如想恢復單個索引并換個名字:

POST /_snapshot/my_cos_backup/snapshot_1/_restore{"indices": "index_1","rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1"}

這里的 indices 是說只恢復 index_1 索引,rename_pattern 是查找能匹配上的正在恢復的索引,rename_replacement 是把匹配的索引重命名成新的模式。

查看索引恢復狀態

可以調用 _recovery API 查看指定索引的恢復進度:

GET index_1/_recovery

也可以用這個 API 查看指定索引的狀態,status 是 green 就說明完全恢復啦:

GET _cluster/health/index_1

二、logstash工具

logstash 可以從一個 ES 集群讀取數據再寫入到另一個 ES 集群,所以也能用來做數據遷移。不過用它遷移前,有幾點要注意:

  • 要在和騰訊云 ES 集群相同的 VPC 下創建 CVM,部署 logstash,而且這個 CVM 得能訪問到源 ES 集群。
  • 部署 logstash 的 CVM 配置最好高一點,比如 16 核 CPU、32GB 內存。
  • logstash 應該和目標 ES 集群的主版本號相同,比如目標是 6.8.2 版本,logstash 也得用 6.8 版本。
  • 要特別注意索引 type 的問題,不同版本的 ES 對索引 type 的約束不一樣,跨大版本遷移可能會因為這個導致寫入失敗,具體可以參考相關插件的說明。

給大家一個常用的 logstash 跨集群數據遷移的配置文件示例:

input {elasticsearch {hosts => "1.1.1.1:9200"index => "*"docinfo => truesize => 5000scroll => "5m"}}output {elasticsearch {hosts => ["http://2.2.2.2:9200"]user => "elastic"password => "your_password"index => "%{[@metadata][_index]}"document_type => "%{[@metadata][_type]}"document_id => "%{[@metadata][_id]}"}}

這個配置文件是把源 ES 集群的所有索引同步到目標集群,也可以設置只同步指定索引,更多功能可以去查閱相關文檔。

三、elasticsearch - dump工具

elasticsearch - dump 是一款開源的 ES 數據遷移工具,github 上有它的地址

安裝 elasticsearch - dump

它是用 node.js 開發的,可以用 npm 包管理工具直接安裝:

npm install elasticdump -g

主要參數說明

  • --input:源地址,可以是 ES 集群 URL、文件或 stdin,還能指定索引,格式是 {protocol}://{host}:{port}/{index}
  • --input - index:源 ES 集群中的索引
  • --output:目標地址,可以是 ES 集群 URL、文件或 stdout,也能指定索引,格式和 input 類似
  • --output - index:目標 ES 集群的索引
  • --type:遷移類型,默認是 data,只遷移數據,還可以選 settings、analyzer、mapping、alias

如果集群有安全認證,在對應的 http 后面加上 user:password@ 就行,比如:

elasticsearch - dump --input=http://192.168.1.2:9200/my_index --output=http://user:password@192.168.1.2:9200/my_index --type=data

遷移單個索引

下面這個操作是把集群 172.16.0.39 中的 companydatabase 索引遷移到集群 172.16.0.20。首先要遷移索引的 settings,不然直接遷移 mapping 或者 data 會丟失原有配置,當然也可以在目標集群先創建好索引再同步:

elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settingselasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mappingelasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data

遷移所有索引

這個操作是把集群 172.16.0.39 中的所有索引遷移到集群 172.16.0.20,但不能遷移索引配置,得單獨對每個索引遷移配置,或者在目標集群先創建好索引:

elasticdump --input=http://172.16.0.39:9200 --output=http://172.16.0.20:9200

四、總結

  1. elasticsearch - dump 和 logstash 做跨集群數據遷移時,要求執行遷移任務的機器能同時訪問兩個集群,所以更適合源和目標 ES 集群在同一網絡的情況。而 snapshot 方式是完全離線的,沒有這個限制,適合跨云廠商遷移,比如從阿里云 ES 集群遷移到騰訊云 ES 集群,當然也可以打通網絡實現互通,但成本較高。
  2. elasticsearch - dump 類似 MySQL 的 mysqldump,是邏輯備份,需要一條條導出再導入,適合數據量小的場景;
  3. snapshot 方式則適合數據量大的場景;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916706.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 中的“雙路排序”與“單路排序”:原理、判別與實戰調優

一句話導讀 ORDER BY 不能走索引時,MySQL 會在 Server 層做一次 filesort。內部實現分 單路(全字段) 與 雙路(rowid) 兩種;了解它們的觸發條件、判別方法與調優思路,是 SQL 性能優化的必修課。一…

OpenLayers 綜合案例-信息窗體-彈窗

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二 作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路! OpenLayers…

GaussDB 開發基本規范

1 集中式1.1數據庫價值特性推薦特性分類特性列表說明表類型PARTITION表數據分區存儲引擎行存儲按行順序存儲表,建議點查,增刪改操作較多場景下使用事務事務塊顯式啟動事務單語句事務不顯式啟動事務,單語句即為事務擴容在線擴容擴節點和數據重…

工作中使用git可能遇到的場景

1.main歷史發布版本出問題需要查看,怎么切換歷史發布版本?git reset --hard commitid 更新本地庫和代碼2.A分支的代碼已經做過一些功能,想遷移到B分支當前在A分支git checkout B (切換到B分支)git cherry-pick A的com…

【Spring AI】本地大型語言模型工具-Ollama

Ollama 是一個專注于在本地運行大型語言模型&#xff08;LLM&#xff09;的工具&#xff0c;支持多種開源模型&#xff08;如 Llama 3、Mistral、Gemma 等&#xff09;&#xff0c;提供簡單的命令行和 API 接口。<dependency><groupId>org.springframework.ai</…

電機S加減速

STM32步進電機S型加減速算法_stm32___build__-2048 AI社區 以上&#xff0c;電機加減速說的非常清楚&#xff0c;收藏點贊&#xff01;

一、初識 Linux 與基本命令

作者&#xff1a;IvanCodes 日期&#xff1a;2025年7月28日 專欄&#xff1a;Linux教程 思維導圖 一、Linux 簡介 1.1 什么是 Linux? Linux 是一種自由、開源的類Unix操作系統內核&#xff0c;由林納斯托瓦茲 (Linus Torvalds) 在1991年首次發布。我們通常所說的 “Linux 系統…

解決angular與jetty websocket 每30s自動斷連的問題

背景&#xff1a;前端&#xff1a;angular 12&#xff0c;websocket接口由lib.dom.d.ts提供后端&#xff1a;java&#xff0c;websocket接口由jetty 12提供問題現象&#xff1a;前端連上server后&#xff0c;每隔30s就會斷開&#xff0c;由于長時間空閑&#xff0c;會導致webso…

【機器學習深度學習】模型私有化部署與微調訓練:賦能特定問題處理能力

目錄 前言 一、私有化部署的背景&#xff1a;通用能力 ≠ 企業實用 暴露問題 二、微調訓練的核心目的 2.1 動作一&#xff1a;私有化部署&#xff08;Private Deployment&#xff09; 2.2 動作二&#xff1a;領域微調&#xff08;Domain Fine-Tuning&#xff09; 2.3 微…

Seq2Seq學習筆記

Seq2Seq模型概述Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;是一種基于深度學習的序列生成模型&#xff0c;主要用于處理輸入和輸出均為序列的任務&#xff0c;如機器翻譯、文本摘要、對話生成等。其核心思想是將可變長度的輸入序列映射為另一個可變長度的輸出序列。…

react useId

useId useId 是 React 18 引入的一個內置 Hook&#xff0c;用于生成唯一且穩定的 ID &#xff0c; 主要用于&#xff0c;解決在客戶端和服務器端渲染&#xff08;SSR&#xff09;時&#xff0c;動態生成 ID 可能導致的沖突問題&#xff1b; 特別適合用于&#xff0c;需要關聯 H…

排水管網實時監測筑牢城市安全防線

排水管網的實時監測工作&#xff0c;強調其對于保障城市安全的重要作用。“排水管網”明確了具體的關注對象&#xff0c;它是城市基礎設施的重要組成部分&#xff0c;承擔著雨水、污水排放等關鍵功能。“實時監測”突出了監測的及時性和持續性&#xff0c;意味著能夠隨時獲取排…

SZU大學物理實驗報告|電位差計

寫在前面&#xff1a;博文里放圖片&#xff0c;主要省去了對文檔的排版時間&#xff0c;實驗還是要自己做的&#xff0c;反正都要去實驗室上課&#xff0c;順帶鍛煉下動手能力。有些結果是實驗手寫的&#xff0c;所以看不到&#xff0c;有結果的可以對下結果差的不太多就行&…

RoPE簡單解析

文章目錄簡介拆解一些tricks簡介 因為RoPE的優異性能&#xff0c;其已成為各種大模型中位置編碼的首選&#xff0c;包括多模態模型&#xff1b;在一些多模態模型或視頻理解模型中&#xff0c;甚至會用到多維度RoPE。雖然RoPE已廣泛應用&#xff0c;之前也看了不少針對其原理解…

windows 獲取 APK 文件的包名和啟動 Activity 名稱

使用 aapt 命令確保環境變量配置正確&#xff1a;首先需要確保你的系統環境變量中包含了 Android SDK 的 build-tools 目錄路徑。這是因為 aapt 工具位于該目錄下。運行命令&#xff1a; 打開命令提示符&#xff08;CMD&#xff09;&#xff0c;然后輸入以下命令來查看 APK 的詳…

【Mac版】Linux 入門命令行快捷鍵+聯想記憶

Linux Mac 用戶終端命令行快捷鍵 符號速查全解作為一個剛接觸 Linux 和終端的 macOS 用戶&#xff0c;常常被命令行的各種快捷鍵和符號弄得頭暈腦脹&#xff0c;本文將帶你系統地掌握命令行中最常用的快捷鍵和符號&#xff0c;并通過邏輯聯想幫助你輕松記住每一個組合。一、基…

AUTOSAR Mcal Dio - 模塊介紹 + EB配置工具介紹

文章目錄1. 模塊簡介2. 主要功能3. 縮略語4. API接口5. 功能介紹5.1. ChannelGroup5.2. Dio_MaskedWritePort6. 序列圖6.1.讀GPIO電平6.2. 設置GPIO電平7. EB 工具配置7.1.General7.2.DioPort8. 參考資料1. 模塊簡介 Dio&#xff0c;全稱“Digital Input Output”。Dio模塊&am…

ICT模擬零件測試方法--晶體管測試

ICT模擬零件測試方法–晶體管測試 文章目錄ICT模擬零件測試方法--晶體管測試晶體管測試晶體管測試配置晶體管測試配置晶體管測量選項晶體管測試 i3070 在線測試軟件為每個晶體管提供兩種測試&#xff1a; 使用二極管測試對晶體管的兩個 PN 結進行測試。這是檢查設備存在的快速…

AI算法實現解析-C++實例

基于C++實現的AI 以下是基于C++實現的AI/機器學習相關示例,涵蓋基礎算法、計算機視覺、自然語言處理等領域,適合不同階段的學習者參考: 基礎機器學習算法 線性回歸 使用梯度下降法預測連續值,核心公式: 損失函數: 邏輯回歸 二分類問題實現,Sigmoid函數: K-Means…

亞馬遜云科技實戰架構:構建可擴展、高效率、無服務器應用

對于今天的開發者、架構師和技術愛好者而言&#xff0c;云計算早已超越了簡單的“虛擬機租賃”或“服務器托管”階段。它已經演化為一套豐富、強大且精密的工具集&#xff0c;能夠以前所未有的方式設計、部署和擴展應用程序。真正的云原生思維&#xff0c;是掌握并運用多種架構…