ElasticSearch単機間インデックスデータ移行ノート
11080 ワード
文書ディレクトリ
本明細書では、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