實際使用Elasticdump工具對Elasticsearch集群進行數據備份和數據還原


文/朱季謙


最近在開發當中做了一些涉及到Elasticsearch映射結構及數據導出導入的工作,怕以后會把這過程忘記,可謂好記性不如爛筆頭,故而記錄成一篇博文。

玩Elasticsearch的童鞋大概都會遇到這樣一個問題,如何快速地將Elasticsearch里的索引結構映射和對應數據快速地進行備份和數據還原。

這時,就可以通過Elasticsearch的導入導出工具Elasticdump來實現,可以將Elasticsearch不同集群的數據進行索引備份和還原。


一、Elasticdump工具介紹

在npm關於Elasticdump的英文官網里,可以看到一篇關於Elasticdump的英文介紹,這個工具的logo很有意思,是一台可以搬運(遷移)東西(數據)的工具車,這個logo就表明該Elasticdump工具可用來遷移備份和恢復數據。

image

使用Elasticdump時特別需要是,若直接用npm install elasticdump -g來按照,node版本需要在v10.0.0以上才能支持,否則執行該指令會出錯。

Elasticdump通過向發送一個input來工作output,其標准指令是

elasticdump --input SOURCE --output DESTINATION [OPTIONS]
  • input SOURCE表示讀取數據源SOURCE
  • output DESTINATION表示將數據源傳輸到目的地DESTINATION。
  • SOURCE/DESTINATION兩者都可以是Elasticsearch URL或文件,如果是Elasticsearch URL,例如http://127.0.0.1/index,就意味着是直接往地址為http://127.0.0.1ES庫里導入或者從其導出索引相關數據。
  • [OPTIONS]是操作選項,比較常用有type和limit,其他操作這里就不展開介紹。

type是ES數據導出導入類型,Elasticdum工具支持以下數據類型的導入導出——

type類型 說明
mapping ES的索引映射結構數據
data ES的數據
settings ES的索引庫默認配置
analyzer ES的分詞器
template ES的模板結構數據
alias ES的索引別名

limit從SOURCE備份到DESTINATION的對象數量,默認是100,可自定義設置。


二、Elasticdump工具安裝

1. 在線安裝Elasticdum工具需要依賴node,故而先安裝v10.0.0以上的node。

[root@zhu opt]# wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz
[root@zhu opt]# tar xvf  node-v12.18.3-linux-x64.tar.xz -C /usr/local/
[root@zhu opt]# mv /usr/local/node-v12.18.3-linux-x64 /usr/local/nodejs
[root@zhu opt]# echo export NODEJS_HOME=/usr/local/nodejs >> /etc/profile
[root@zhu opt]# echo export PATH=$PATH:$NODEJS_HOME/bin >> /etc/profile
[root@zhu opt]# echo export NODEJS_PATH=$NODEJS_HOME/lib/node_modules >>/etc/profile
[root@zhu opt]# source /etc/profile
[root@zhu opt]# ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
[root@zhu opt]# ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm
[root@zhu opt]# npm -v
6.14.6
[root@zhu opt]# node -v
v12.18.3

2. 通過npm安裝elasticdump

[root@zhu opt]# npm install elasticdump -g

安裝成功后,進入到

[root@zhu opt]#cd /usr/local/nodejs/lib/node_modules/elasticdump/bin

可以看到有兩個命令,elasticdump用來備份單個索引,multielasticdump可以用來並行備份多個索引:

root@zhu bin]# ll
總用量 20
-rwxr-xr-x. 1 1001 1001  4026 4月   9 14:38 elasticdump
-rwxr-xr-x. 1 1001 1001 14598 10月 26 1985 multielasticdump

三、Elasticdump工具使用

使用elasticdump進行單個索引備份還原操作——


- 導出索引test_event的mapping映射結構:

[root@zhu opt]# elasticdump --input=http://127.0.0.1:9200/test_event  --output=/opt/test_event_mapping.json --type=mapping 

檢查當前,發現已經備份成json文件:

[root@zhu opt]# ll
總用量 14368
-rw-r--r--. 1 root root     6200 4月   9 11:30 ucas_hisevenr_mapping.json

還可以直接導入到另一個es集群當中:

[root@zhu opt]# elasticdump --input=http://127.0.0.1:9200/test_event   --output=http://127.0.0.2:9200/test_event --type=mapping

- 導出索引test_event的數據:

[root@zhu opt]# elasticdump --input=http://127.0.0.1:9200/test_event  --output=/opt/data.json --type=data

同理,可直接將備份數據導入另一個es集群:

[root@zhu opt]# elasticdump --input=http://127.0.0.1:9200/test_event   --output=http://127.0.0.2:9200/test_event --type=data

elasticdump進行數據還原操作

- mapping映射結構還原:

[root@zhu opt]# elasticdump --input=/opt/test_event_mapping.json --output http://127.0.0.1:9200/ --type=mapping

- data數據還原

[root@zhu opt]# elasticdump --input=/opt/data.json    --output=http://127.0.0.1:9200/test_event    --type=data

使用elasticdump進行多個索引備份操作:

#將ES索引及其所有類型備份到es_backup文件夾中
multielasticdump direction = dump match ='^.*$'  input = http://127.0.0.1:9200   output =/tmp/es_backup
#僅備份ES索引以“ -index”(匹配正則表達式)為前綴的結尾。僅備份索引數據。所有其他類型都將被忽略。#注意:默認情況下會忽略分析器和別名類型
multielasticdump --direction=dump --match='^.*-index$' --input=http://127.0.0.1:9200 --ignoreType='mapping,settings,template'  --output=/tmp/es_backup

使用elasticdump進行多個索引還原操作:

multielasticdump --direction=load --input=/tmp/es_backup --output=http://127.0.0.1:9200

根據npm的elasticdump英文官網介紹可知,這里需要注意一點是,即使用multielasticdump有一個區別的地方是--direction的參數設置和--ignoreType參數設置。
  • 備份時,--direction=dump是默認值,則--input必須是ElasticSearch服務器基本位置的URL(即http://localhost:9200),並且--output必須是目錄。每個匹配的索引都會創建一個數據,映射和分析器文件。

  • 還原時,要加載從multi- elasticsearch轉儲的文件,--direction應將其設置為load--input必須是multielasticsearch轉儲的目錄,並且--output必須是Elasticsearch服務器URL。

  • --match`用於過濾應轉儲/加載的索引(正則表達式)。

  • --ignoreType允許從轉儲/加載中忽略類型。支持六個選項。data,mapping,analyzer,alias,settings,template。提供了多類型支持,使用時每種類型必須用逗號分隔,並interval允許控制生成新索引的轉儲/裝入的時間間隔。

  • --includeType允許將類型包含在轉儲/裝載中。支持六個選項- data,mapping,analyzer,alias,settings,template


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM