成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三種常用的 Elasticsearch 數據遷移方案

開源 Linux
本文介紹三種常用的 Elasticsearch 數據遷移方案,包括OS 快照,即Cloud Object Storage、logstash和elasticsearch-dump。

如果準備將自建的 elasticsearch 遷移上云,或者的遷移到其他es集群內,可以根據自己的業務需要選擇合適的遷移方案。??如果業務可以停服或者可以暫停寫操作??,可以使用以下幾種方式進行數據遷移:

  • COS 快照,即??Cloud Object Storage??
  • logstash
  • elasticsearch-dump

各種遷移方式的對比如下:

遷移方式

適用場景

COS 快照

??數據量大???的場景(GB、TB、PB 級別)對??遷移速度要求較高??的場景

logstash

??遷移全量???或??增量數據??,且對實時性要求不高的場景需要對遷移的數據通過 es query 進行簡單的過濾的場景需要對遷移的數據進行復雜的過濾或處理的場景版本跨度較大的數據遷移場景,如 5.x 版本遷移到 6.x 版本或 7.x 版本

elasticsearch-dump

??數據量較小??的場景

一、COS 快照

基于 COS 快照的遷移方式是使用 ES 的 ??snapshot api?? 接口進行遷移,基本原理就是從源 ES 集群創建索引快照,然后在目標 ES 集群中進行恢復。通過 snapshot 方式進行數據遷移時,特別需要注意 ES 的版本問題:

目標 ES 集群的主版本號(如5.6.4中的5為主版本號)要大于等于源 ES 集群的主版本號。
1.x 版本的集群創建的快照不能在 5.x 版本中恢復。

在源 ES 集群中創建 repository

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

  • ??fs??:共享文件系統,將快照文件存放于文件系統中。
  • ??url??:指定文件系統的 URL 路徑,支持協議:http、https、ftp、file、jar。
  • ??s3??:AWS S3 對象存儲,快照存放于 S3 中,以插件形式支持,安裝該插件請參考 repository-s3[1]
  • ??hdfs??:快照存放于 hdfs 中,以插件形式支持,安裝該插件請參考 repository-hdfs[2]
  • ??cos??:快照存放于騰訊云COS對象存儲中,以插件形式支持,安裝該插件請參考 cos-repository[3]

如果需要從自建 ES 集群遷移至騰訊云的 ES 集群,可以直接使用 COS 類型倉庫。但需要先在自建 ES 集群上安裝 cos-repository 插件(安裝插件后需要重啟集群才能使用),先把自建 ES 集群中的數據先備份到 COS,然后在騰訊云上的 ES 集群中恢復出來,以完成數據的遷移。

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

通過 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 后綴的 bucket 名
  • region:COS Bucket 地域,必須與 ES 集群同地域。
  • base_path:備份目錄。

在源 ES 集群中創建 snapshot

調用 snapshot api 創建快照以備份索引數據,創建快照時可以指定只對部分索引進行備份,也可以備份所有的索引,具體的 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個索引都會被恢復到 ES 集群中。您還可以使用附加的選項對索引進行重命名。該選項允許您通過模式匹配索引名稱,并通過恢復進程提供一個新名稱。如果您想在不替換現有數據的前提下,恢復舊數據來驗證內容或進行其他操作,則可以使用該選項。從快照里恢復單個索引并提供一個替換的名稱:

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 集群,因此可以使用 logstash 進行數據遷移,使用 logstash 進行遷移前,需要注意以下幾點:

  • 需要在和騰訊云上的 ES 集群相同的 VPC 下創建 CVM,部署 logstash,同時保證該 CVM 能夠訪問到源 ES 集群。
  • 用于部署 logstash 的 CVM 最好選擇比較高的配置,例如 CPU 為16核,內存為32GB。
  • logstash 應該和目標 ES 集群的主版本號相同,例如目標 ES 集群為6.8.2版本,則 logstash 也需要使用6.8版本。
  • 需要特別注意索引 type 的問題,因為 ES 的不同版本對索引 type 的約束不同,跨大版本遷移 ES 集群時可能出現因為索引的 type 而導致寫入目標集群失敗等的問題。具體可參考 logstash-output-elasticsearch 插件中對 ??document_type?? 參數的說明。

一個常用的使用 logstash 進行跨集群數據遷移的配置文件如下:

input {
elasticsearch {
hosts => "1.1.1.1:9200"
index => "*"
docinfo => true
size => 5000
scroll => "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 集群的所有索引同步到目標集群中,同時也可以設置只同步指定的索引,利用 logstash 進行遷移的更多功能可查閱 logstash-input-elasticsearch 和 logstash-output-elasticsearch[4]

三、elasticsearch-dump

elasticsearch-dump 是一款開源的 ES 數據遷移工具,github 地址[5]

  1. 安裝 elasticsearch-dump

    elasticsearch-dump 使用 node.js 開發,可使用 npm 包管理工具直接安裝:

    npm install elasticdump -g
  2. 主要參數說明

    --input: 源地址,可為 ES 集群 URL、文件或 stdin,可指定索引,格式為:{protocol}://{host}:{port}/{index}
    --input-index: 源 ES 集群中的索引
    --output: 目標地址,可為 ES 集群地址 URL、文件或 stdout,可指定索引,格式為:{protocol}://{host}:{port}/{index}
    --output-index: 目標 ES 集群的索引
    --type: 遷移類型,默認為 data,表明只遷移數據,可選 settings, analyzer, data, mapping, alias
  3. 如果集群有安全認證,可以參照下面的方法使用 reindex 集群鑒權。在對應的 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??。

  4. 遷移單個索引

    以下操作通過 elasticdump 命令將集群172.16.0.39中的 companydatabase 索引遷移至集群172.16.0.20。


    第一條命令先將索引的 settings 先遷移,如果直接遷移 mapping 或者 data 將失去原有集群中索引的配置信息如分片數量和副本數量等,當然也可以直接在目標集群中將索引創建完畢后再同步 mapping 與 data。

    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settings
    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mapping
    elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data
  5. 遷移所有索引

    以下操作通過 elasticdump 命令將集群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 做跨集群數據遷移時,都要求用于執行遷移任務的機器可以同時訪問到兩個集群,因為網絡無法連通的情況下就無法實現遷移。而使用 snapshot 的方式則沒有這個限制,因為 snapshot 方式是完全離線的。因此 elasticsearch-dump 和 logstash 遷移方式更適合于源 ES 集群和目標 ES 集群處于同一網絡的情況下進行遷移。而需要跨云廠商的遷移,可以選擇使用 snapshot 的方式進行遷移,例如從阿里云 ES 集群遷移至騰訊云 ES 集群,也可以通過打通網絡實現集群互通,但是成本較高。
  2. elasticsearch-dump 工具和 MySQL 數據庫用于做數據備份的工具 mysqldump 類似,都是邏輯備份,需要將數據一條一條導出后再執行導入,所以適合數據量小的場景下進行遷移。
  3. snapshot 的方式適合數據量大的場景下進行遷移。

參考資料

[1]repository-s3: ????https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-s3.html????

[2]cos-repository: ????https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html????

[3]cos-repository: ????https://github.com/tencentyun/elasticsearch-repository-cos????

[4]repository-s3: ????https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html????

[5]elasticsearch-dump: ????https://github.com/taskrabbit/elasticsearch-dump????

責任編輯:龐桂玉 來源: 奇妙的Linux世界
相關推薦

2017-07-03 18:24:39

MySQL數據冗余

2010-09-28 13:28:17

2024-11-26 07:47:41

2010-11-22 17:00:10

MySQL建表語句

2010-09-30 14:40:45

2022-07-22 20:00:01

高可用路由

2009-08-26 18:14:11

C#排序算法

2010-05-11 14:08:50

MySQL數字類型

2024-10-10 10:07:07

2019-09-05 09:15:50

數據容器Docker

2010-08-31 11:14:32

2010-05-25 18:50:22

MySQL安裝

2022-07-07 00:33:34

Java線程同步

2010-07-07 09:14:35

SQL Server數

2018-07-10 08:42:45

Oracle高可用集群

2020-11-24 10:13:02

Redis集群數據庫

2015-10-14 10:23:59

企業應用SaaS數據加密

2011-01-18 15:35:59

jQueryJavaScriptweb

2010-08-13 15:08:55

Flex數據訪問

2010-09-26 17:09:22

日內數據保護
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品精品久久久 | 亚洲国产一区在线 | 国产婷婷色一区二区三区 | 亚洲国产精品一区二区第一页 | 日韩在线视频观看 | 中文字幕电影在线观看 | 久久久久久国产精品 | 日韩在线免费播放 | 国产欧美日韩精品一区 | 日本黄色片免费在线观看 | 一区二区三区在线播放 | 国产日韩欧美二区 | 九九在线视频 | 欧美国产日韩在线观看成人 | 日本成人在线播放 | 日本在线视频中文字幕 | 免费午夜电影 | 香蕉视频一区二区 | 国产精品99久久久久久久久久久久 | 亚洲国产成人av好男人在线观看 | 精品三级在线观看 | 日韩a v在线免费观看 | 欧美精品一区二区三区在线播放 | 亚洲一级视频在线 | 99精品视频一区二区三区 | 欧美日日| 午夜丰满寂寞少妇精品 | 喷潮网站 | 亚洲国产成人精品女人久久久 | 亚洲一区二区三区免费在线 | 国产精品视频免费 | 亚洲视频自拍 | www网站在线观看 | 伊人伊人网 | 精品国产91 | 欧美在线观看一区 | 青青草av | 国产精品99精品久久免费 | 日韩精品一区二区三区在线观看 | 日韩欧美一区二区三区免费观看 | 中文字幕成人 |