文/朱季謙
最近在開發當中做了一些涉及到Elasticsearch對映結構及資料匯出匯入的工作,怕以後會把這過程忘記,可謂好記性不如爛筆頭,故而記錄成一篇博文。
玩Elasticsearch的童鞋大概都會遇到這樣一個問題,如何快速地將Elasticsearch裡的索引結構對映和對應資料快速地進行備份和資料還原。
這時,就可以通過Elasticsearch的匯入匯出工具Elasticdump來實現,可以將Elasticsearch不同叢集的資料進行索引備份和還原。
一、Elasticdump工具介紹
在npm關於Elasticdump的英文官網裡,可以看到一篇關於Elasticdump的英文介紹,這個工具的logo很有意思,是一臺可以搬運(遷移)東西(資料)的工具車,這個logo就表明該Elasticdump工具可用來遷移備份和恢復資料。
使用Elasticdump時特別需要是,若直接用npm install elasticdump -g
來按照,node版本需要在v10.0.0
以上才能支援,否則執行該指令會出錯。
Elasticdump通過向傳送一個input
來工作output
,其標準指令是
elasticdump --input SOURCE --output DESTINATION [OPTIONS]
input SOURCE
表示讀取資料來源SOURCEoutput 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
。