ElasticSearch単機間インデックスデータ移行ノート

11080 ワード

文書ディレクトリ

  • インデックスデータ移行主要ステップ
  • 旧サービスでインデックスデータ
  • をバックアップする.
  • 最初のステップは、古いサービス上のスナップショット・ウェアハウス情報
  • を参照することです.
  • 第2のステップでは、最新のスナップショットバックアップ
  • を作成します.
  • 第3のステップは、新しいサービスにおいて、サービスについて倉庫を作成する操作
  • を繰り返す.
  • 第4のステップでは、古いサービスのスナップショットバックアップを新しいサービスウェアハウスディレクトリの
  • にコピーします.
  • 第5ステップでは、スナップショットバックアップリカバリ
  • を新しいサービスで実行します.
    本明細書では、2つのスタンドアロンESサービス間のデータ移行を記録する.

    インデックスデータ移行の主要手順


    1、再旧サービスでインデックスデータをバックアップする2、新サービスでインデックスデータを回復する

    旧サービスでのインデックス・データのバックアップ


    まず、古いサービスのスナップショット・ウェアハウス情報を表示します。


    登録されているすべてのスナップショット・ウェアハウスを取得し、ウェアハウス名を省略するか、使用します.all
    curl -X GET "localhost:9200/_snapshot?pretty"
    

    戻る
    {
      "elasticsearch_backup" : {
        "type" : "fs",
        "settings" : {
          "location" : "/usr/local/elasticsearch_backup"
        }
      }
    }
    

    倉庫内のすべてのスナップショット情報の表示
    curl -X GET "localhost:9200/_snapshot/elasticsearch_backup/_all?pretty"
    

    戻る
    {
      "snapshots" : [ ]
    }
    

    ステップ2では、最新のスナップショットバックアップを作成します。


    新しいスナップショットを作成する前に、次のコマンドを実行して、キャッシュ内のインデックスがディスクに落ちていることを確認します.
    curl -X POST "localhost:9200/_flush?pretty"
    

    戻る
    {
      "_shards" : {
        "total" : 270,
        "successful" : 135,
        "failed" : 0
      }
    }
    

    スナップショットの作成
    curl -X PUT "localhost:9200/_snapshot/elasticsearch_backup/snapshot-2018.09.26-01?wait_for_completion=true" -H 'Content-Type: application/json' -d'
    {
      "ignore_unavailable": true,  
      "include_global_state": false
    }                              
    '
    

    設定オプションignore_unavailable=trueで、スナップショット中に存在しないインデックスは無視され、デフォルトでは値が設定されていません.存在しないインデックスに遭遇すると、スナップショットプロセスは失敗します.設定値include_global_stateはfalseであり、クラスタグローバルステータス情報がスナップショットの一部として保存されることを阻止することができる.デフォルトでは、1つのスナップショットの1つ以上のインデックスがすべてのプライマリスライスで使用可能でない場合、スナップショット全体の作成に失敗します.この場合はpartialをtrueに設定することで変更できます.上のコマンドは戻ります
    {
        "snapshot":{
            "snapshot":"snapshot-2018.09.26-01",
            "uuid":"Gs4xr5ErSE22sGcSlfpXAQ",
            "version_id":5020299,
            "version":"5.2.2",
            "indices":[
                "60cbd2e0f2c4410eaa7cde7f0f735487",
               .......
                "e39555dec34c4492a6a6ece0daadac19",
                "11d66120782e4583976d5bc235c29d29",
                "27cffb9f205b49b7aa48c6011c5fe1e4"
            ],
            "state":"SUCCESS",
            "start_time":"2018-09-26T03:24:42.052Z",
            "start_time_in_millis":1537932282052,
            "end_time":"2018-09-26T03:24:55.397Z",
            "end_time_in_millis":1537932295397,
            "duration_in_millis":13345,
            "failures":[
    
            ],
            "shards":{
                "total":135,
                "failed":0,
                "successful":135
            }
        }
    }
    

    バックアップステータスの表示
    curl -X GET "localhost:9200/_snapshot/elasticsearch_backup/snapshot-2018.09.26-01/_status?pretty"
    

    ステップ3では、新しいサービスでサービスについて倉庫を作成する操作を繰り返します。


    倉庫の作成
    curl -X PUT "192.168.0.106:9200/_snapshot/my_backup?pretty" -H 'Content-Type: application/json' -d'
    {
      "type": "fs",
      "settings": {
        "location": "/usr/local/elasticsearch_backup_location"
      }
    }
    '
    

    エラーを返す
    {
      "error" : {
        "root_cause" : [
          {
            "type" : "repository_exception",
            "reason" : "[my_backup] location [/usr/local/elasticsearch_backup_location] doesn't match any of the locations specified by path.repo because this setting is empty"
          }
        ],
        "type" : "repository_exception",
        "reason" : "[my_backup] failed to create repository",
        "caused_by" : {
          "type" : "repository_exception",
          "reason" : "[my_backup] location [/usr/local/elasticsearch_backup_location] doesn't match any of the locations specified by path.repo because this setting is empty"
        }
      },
      "status" : 500
    }
    

    新しいESプロファイルでymlにpathを追加します.repo構成
    path.repo: /usr/local/elasticsearch_backup_location
    

    ESサービスを再起動し、エラーを報告
    [2018-09-26T14:49:49,092][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
    org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Unable to access 'path.repo' (/usr/local/elasticsearch_backup_location)
    	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:89) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:82) ~[elasticsearch-5.2.2.jar:5.2.2]
    Caused by: java.lang.IllegalStateException: Unable to access 'path.repo' (/usr/local/elasticsearch_backup_location)
    	at org.elasticsearch.bootstrap.Security.addPath(Security.java:379) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:267) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:215) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.configure(Security.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:236) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
    	... 6 more
    Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch_backup_location
    	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) ~[?:1.8.0_121]
    	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) ~[?:1.8.0_121]
    	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) ~[?:1.8.0_121]
    	at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384) ~[?:1.8.0_121]
    	at java.nio.file.Files.createDirectory(Files.java:674) ~[?:1.8.0_121]
    	at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) ~[?:1.8.0_121]
    	at java.nio.file.Files.createDirectories(Files.java:767) ~[?:1.8.0_121]
    	at org.elasticsearch.bootstrap.Security.ensureDirectoryExists(Security.java:421) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.addPath(Security.java:377) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:267) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:215) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Security.configure(Security.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:236) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-5.2.2.jar:5.2.2]
    	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
    	... 6 more
    

    ディレクトリの作成/usr/local/elasticsearch_backup_location,権限の変更
    chmod -R go+w /usr/local/elasticsearch_backup_location
    

    以下を得る
    drwxrwxrwx   2 root       root               6 9   26 14:53 elasticsearch_backup_location
    

    ES再起動成功再実行倉庫作成操作
    curl -X PUT "192.168.0.106:9200/_snapshot/my_backup?pretty" -H 'Content-Type: application/json' -d'
    {
      "type": "fs",
      "settings": {
        "location": "/usr/local/elasticsearch_backup_location"
      }
    }
    '
    

    正常に戻る
    {
      "acknowledged" : true
    }
    

    倉庫の作成の表示
    curl -X GET "192.168.0.106:9200/_snapshot/my_backup?pretty"
    

    戻る
    {
      "my_backup" : {
        "type" : "fs",
        "settings" : {
          "location" : "/usr/local/elasticsearch_backup_location"
        }
      }
    }
    

    ステップ4では、古いサービスのスナップショット・バックアップを新しいサービス・ウェアハウス・ディレクトリにコピーします。


    古いサービススナップショットバックアップファイルを新しいサービスウェアハウスディレクトリに圧縮コピーして解凍し、スナップショットの内容を表示できます.
    #  
    tar -zcf index.src.tar.gz ./*
    # 
    tar -zxf index.src.tar.gz
    #  
    curl -X GET "192.168.0.106:9200/_snapshot/my_backup/_all?pretty"
    

    ステップ5では、新しいサービスでスナップショット・バックアップ・リカバリを実行します。

    curl -X POST "192.168.0.106:9200/_snapshot/my_backup/snapshot-2018.09.26-01/_restore?pretty"
    

    戻る
    {
      "accepted" : true
    }
    

    インデックス・リストとデータ・ディレクトリを表示し、最新データのリカバリを表示します.
    リファレンス
    スクリプトの自動バックアップと圧縮
    #!/bin/bash
    filename=`date +%Y%m%d%H`
    backesFile=es$filename.tar.gz
    cd /home/elasticsearch/back
    mkdir es_dump
    cd es_dump
    curl -X DELETE "10.17.4.200:9200/_snapshot/backup/$filename?pretty"
    echo 'sleep 30'
    sleep 30
    curl -X PUT "10.17.4.200:9200/_snapshot/backup/$filename?wait_for_completion=true&pretty"
    echo 'sleep 30'
    sleep 30
    cp /home/elasticsearch/snapshot/* /home/elasticsearch/back/es_dump -rf
    cd ..
    tar czf $backesFile  es_dump/
    rm es_dump -rf
    

    スクリプトの自動解凍と復元
    #!/bin/bash
    filename='2018092609'
    backesFile=es$filename.tar.gz
    cd /home/elasticsearch/back
    tar zxvf $backesFile
    rm /home/elasticsearch/snapshot/* -rf
    cp /home/elasticsearch/back/es_dump/* /home/elasticsearch/snapshot -rf
    curl -X POST "10.17.4.200:9200/users/_close"
    curl -X POST "10.17.4.200:9200/products/_close"
    echo 'sleep 5'
    sleep 5
    curl -X POST "10.17.4.200:9200/_snapshot/backup/$filename/_restore?pretty" -d '{
        "indices":"users"
    }' 
    echo 'sleep 5'
    sleep 5
    curl -X POST "10.17.4.200:9200/_snapshot/backup/$filename/_restore?pretty" -d '{
        "indices":"products"
    }'
    echo 'sleep 5'
    sleep 5
    curl -X POST "10.17.4.200:9200/users/_open"
    curl -X POST "10.17.4.200:9200/products/_open" 
    rm es_dump -rf