Elasticsearch基于HDFS的Snapshot與Restore



Table of Contents generated with DocToc

0. 參考文檔

Elasticsearch Reference[5.2.2] Snapshot And Restore
HDFS Repository Plugin

1. 概述

最近工作中使用了es的snapshot/restore來進(jìn)行跨集群同步偷拔,將步驟整理為此文檔绕辖。
說明 :本文僅適用于es5.2.2與hadoop2.7.0吮炕,其他版本請(qǐng)參考es官方文檔宁炫。

2. 環(huán)境準(zhǔn)備

2.1. elasticsearch-5.2.2

2.1.1. elasticsearch安裝

Elasticsearch5.2.2官網(wǎng)下載地址

將程序包解壓并添加如下配置便于用head查看es信息,其他信息保持不變

http.cors.enabled: true
http.cors.allow-origin: "*"
  • 啟動(dòng)es
./bin/elasticsearch -d -p pid # 后臺(tái)運(yùn)行州既,將pid輸出到pid文件  
  • 驗(yàn)證
$ curl localhost:9200

{
  "name" : "ODQxF0o",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "eBH2lQZGQnKa5ssUXzUEig",
  "version" : {
    "number" : "5.2.2",
    "build_hash" : "f9d9b74",
    "build_date" : "2017-02-24T17:26:45.835Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

2.1.2. repository-hdfs插件安裝

若采用hdfs作為快照存儲(chǔ)介質(zhì)谜洽,需要額外安裝插件(插件下載地址)。

  • 安裝
$ ./bin/elasticsearch-plugin install file:///path/to/repository-hdfs-5.2.2.zip
  • 驗(yàn)證

查看已安裝插件列表

$ ./bin/elasticsearch-plugin list

2.1.3. 造數(shù)

為了后續(xù)驗(yàn)證吴叶,在es中新建索引并添加數(shù)據(jù)阐虚。

#! /bin/bash
# 創(chuàng)建名為test-index的索引
curl -XPUT 'http://localhost:9200/test-index/' 
# 插入若干條數(shù)據(jù),這種方式效率較低晤郑,大量數(shù)據(jù)推薦采用multi api
for i in {1..1001}
do
  curl -XPOST 'http://localhost:9200/test-index/doc' -d '{"name":"tom"}'
done

2.2. hadoop-2.7.0

2.2.1. 下載

官網(wǎng)下載地址

2.2.2. 安裝

為了簡單起見敌呈,示例采用偽分布式安裝(pseudo-distributed),將程序包解壓造寝,并修改如下配置文件:

  • etc/hadoop/hadoop-env.sh
# 設(shè)置java路徑
export JAVA_HOME=/path/to/java
  • etc/hadoop/core-site.xml
 <configuration>  
      <property>  
          <name>fs.defaultFS</name>  
          <value>hdfs://localhost:9000</value>  
      </property>  
 </configuration>  
  • etc/hadoop/hdfs-site.xml
 <configuration>  
     <property>  
         <name>dfs.replication</name>  
         <value>1</value>  
     </property>  
     <property>  
        <name>dfs.name.dir</name>  
        <value>/tmp/hadoop/2.7.0/name</value>  
    </property>  
    <property>  
        <name>dfs.data.dir</name>  
        <value>/tmp/hadoop/2.7.0/data</value>  
    </property>  
 </configuration>  

2.2.3. 配置ssh免密

若ssh loclhost無法登陸本機(jī)磕洪,則進(jìn)行如下操作:

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa  
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  
$ chmod 0600 ~/.ssh/authorized_keys  

2.2.4. 格式化文件系統(tǒng)

$ ./bin/hdfs namenode -format

2.2.5 啟動(dòng)HDFS

  • 啟動(dòng)
$ ./sbin/start-dfs.sh  
  • 驗(yàn)證
  1. 通過jps命令查看相關(guān)進(jìn)程是否存在
  2. 瀏覽器訪問web ui,地址http://localhost:50070 (hadoop2默認(rèn)為50070端口)

3. 注冊(cè)倉庫

curl -XPUT 'http://localhost:9200/_snapshot/hdfs_repo' -d 
'{
  "type": "hdfs",
  "settings": {
    "uri": "hdfs://localhost:9000",
    "path": "es/hdfs_repo",
    "max_restore_bytes_per_sec":"1mb",
    "max_snapshot_bytes_per_sec":"1mb"
  }
}'

若返回結(jié)果如下诫龙,則成功

{
    "acknowledged": true
}
  • 查看HDFS目錄
    查看HDFS中是否已經(jīng)添加相關(guān)目錄
$ ./bin/hdfs dfs -ls -R /

20/04/29 21:04:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
drwxr-xr-x   - username supergroup          0 2020-04-29 21:03 /user
drwxr-xr-x   - username supergroup          0 2020-04-29 21:03 /user/username
drwxr-xr-x   - username supergroup          0 2020-04-29 21:03 /user/username/es
drwxr-xr-x   - username supergroup          0 2020-04-29 21:03 /user/username/es/hdfs_repo
  • 查看倉庫信息
$ curl 'http://localhost:9200/_snapshot/_all?pretty'

{
  "hdfs_repo" : {
    "type" : "hdfs",
    "settings" : {
      "path" : "es/hdfs_repo",
      "max_restore_bytes_per_sec" : "1mb",
      "uri" : "hdfs://localhost:9000",
      "max_snapshot_bytes_per_sec" : "1mb"
    }
  }
}
  • 配置說明

基于HDFS的配置最常用的為示例中幾個(gè)析显,uri和path是必不可少,余下兩個(gè)是限速參數(shù)签赃,實(shí)際生產(chǎn)環(huán)境中也不可或缺谷异。
參數(shù)詳細(xì)說明以及其他參數(shù)請(qǐng)參考如下文檔:

Snapshot And Restore

HDFS存儲(chǔ)配置說明

4. 創(chuàng)建快照

curl -XPUT 'http://localhost:9200/_snapshot/hdfs_repo/snapshot_1?wait_for_completion=false' -d \
'{
  "ignore_unavailable": true,
  "include_global_state": false,
  "partial": true 
}'

  • 參數(shù)說明
參數(shù) 說明
wait_for_completion 請(qǐng)求立即返回還是等待創(chuàng)建快照完畢后再返回,若數(shù)據(jù)量較多可以設(shè)置為false
ignore_unavailable 忽略創(chuàng)建快照時(shí)不存在的索引
partial 默認(rèn)情況下索引存在不可用分片時(shí)該索引的備份會(huì)失敗锦聊,設(shè)置此參數(shù)為true可以備份可用的分片
... ...

更多參數(shù)說明請(qǐng)參考官方文檔

4.1. access_control_exception

此時(shí)創(chuàng)建快照會(huì)報(bào)如下錯(cuò)誤

{
    "error": {
        "root_cause": [
            {
                "type": "repository_exception",
                "reason": "[hdfs_repo] could not read repository data from index blob"
            }
        ],
        "type": "repository_exception",
        "reason": "[hdfs_repo] could not read repository data from index blob",
        "caused_by": {
            "type": "i_o_exception",
            "reason": "com.google.protobuf.ServiceException: java.security.AccessControlException: access denied (\"javax.security.auth.PrivateCredentialPermission\" \"org.apache.hadoop.security.Credentials\" \"read\")",
            "caused_by": {
                "type": "service_exception",
                "reason": "java.security.AccessControlException: access denied (\"javax.security.auth.PrivateCredentialPermission\" \"org.apache.hadoop.security.Credentials\" \"read\")",
                "caused_by": {
                    "type": "access_control_exception",
                    "reason": "access denied (\"javax.security.auth.PrivateCredentialPermission\" \"org.apache.hadoop.security.Credentials\" \"read\")"
                }
            }
        }
    },
    "status": 500
}
  • 解決方法

在repository-hdfs插件的java security policy文件中添加如下內(nèi)容:

 permission javax.security.auth.PrivateCredentialPermission "org.apache.hadoop.security.Credentials * \"*\"", "read";

并在es jvm配置文件config/jvm.options中指定該策略文件:

-Djava.security.policy=file:///path/to/plugins/repository-hdfs/plugin-security.policy

4.2. 查看快照信息

curl'http://localhost:9200/_snapshot/hdfs_repo/snapshot_1‘
curl'http://localhost:9200/_snapshot/hdfs_repo/_all‘
curl'http://localhost:9200/_cat/snapshots/hdfs_repo?v'

:hdfs_repo為前文已經(jīng)創(chuàng)建了的倉庫名歹嘹,snapshot_1為前文已創(chuàng)建的快照名,后文同孔庭。

4.3. 快照刪除與停止

curl -XDELETE 'http://localhost:9200/_snapshot/hdfs_repo/snapshot_1'

5. 快照恢復(fù)

示例為同集群恢復(fù)尺上,若需跨集群恢復(fù)則需在目標(biāo)集群中安裝repository-hefs插件以及注冊(cè)與源集群位置一樣的倉庫。

5.1. 恢復(fù)

為了進(jìn)行驗(yàn)證首先刪除原索引

  • 刪除索引
curl -XDELETE 'http://localhost:9200/test-index'
  • 數(shù)據(jù)恢復(fù)
curl -XPOST 'localhost:9200/_snapshot/hdfs_repo/snapshot_1/_restore?wait_for_completion=false' -d
'{
  "ignore_unavailable": true,
  "include_global_state": false,
  "partial": true,
  "index_settings":{
    "index.number_of_replicas":0
  }
}'
  • 參數(shù)說明
    index_settings為索引設(shè)置圆到,可以通過該參數(shù)設(shè)置索引的分片數(shù)怎抛、副本數(shù)等,其他參數(shù)含義與創(chuàng)建快照時(shí)相同芽淡。

5.2. 恢復(fù)進(jìn)度查看

curl'http://localhost:9200/_snapshot/hdfs_repo/snapshot_1‘ # 信息詳細(xì)马绝,但較慢
curl'http://localhost:9200/_snapshot/hdfs_repo/snapshot_1/_status‘ # 較快,但信息少

5.3. 中止恢復(fù)

curl -XDELETE 'http://localhost:9200/_snapshot/hdfs_repo/snapshot_1' # 與刪除快照命令一樣
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挣菲,一起剝皮案震驚了整個(gè)濱河市富稻,隨后出現(xiàn)的幾起案子掷邦,更是在濱河造成了極大的恐慌,老刑警劉巖唉窃,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耙饰,死亡現(xiàn)場(chǎng)離奇詭異纹笼,居然都是意外死亡纹份,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門崎逃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咬展,“玉大人惶凝,你說我怎么就攤上這事≡” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵兄猩,是天一觀的道長茉盏。 經(jīng)常有香客問我,道長枢冤,這世上最難降的妖魔是什么鸠姨? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮淹真,結(jié)果婚禮上讶迁,老公的妹妹穿的比我還像新娘。我一直安慰自己核蘸,他們只是感情好巍糯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著客扎,像睡著了一般祟峦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徙鱼,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天宅楞,我揣著相機(jī)與錄音,去河邊找鬼疆偿。 笑死咱筛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杆故。 我是一名探鬼主播迅箩,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼处铛!你這毒婦竟也來了饲趋?” 一聲冷哼從身側(cè)響起拐揭,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奕塑,沒想到半個(gè)月后堂污,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡龄砰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年盟猖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片换棚。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡式镐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出固蚤,到底是詐尸還是另有隱情娘汞,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布夕玩,位于F島的核電站你弦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏燎孟。R本人自食惡果不足惜禽作,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缤弦。 院中可真熱鬧领迈,春花似錦、人聲如沸碍沐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累提。三九已至尘喝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斋陪,已是汗流浹背朽褪。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留无虚,地道東北人缔赠。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像友题,于是被迫代替她去往敵國和親嗤堰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容