バックアップと復元
データ損失が心配な場合は(もちろん、心配すべきです)、壊滅的な障害が発生した場合に迅速に復旧できるように、Solr インデックスをバックアップする方法が必要です。
Solr には、Solr の実行方法に応じて、Solr コアまたはコレクションをバックアップおよび復元するための 2 つのアプローチがあります。SolrCloud クラスタを実行する場合は、コレクション API を使用します。ユーザ管理クラスタまたは単一ノードインストールを実行する場合は、レプリケーションハンドラを使用します。
バックアップ(およびスナップショット)は、ハードコミットされたデータをキャプチャします。 同様に、 |
SolrCloud クラスタ
SolrCloud でのバックアップのサポートは、コレクション API で提供されます。これにより、バックアップを複数のシャードにわたって生成し、元のコレクションと同じ数のシャードとレプリカに復元できます。
SolrCloud バックアップ/復元には、すべてのノードで同じパスにマウントされた共有ファイルシステム、または HDFS が必要です。 |
4 つの異なる API コマンドがサポートされています
-
action=BACKUP
: このコマンドは、Solr インデックスと構成をバックアップします。詳細については、コレクションのバックアップ のセクションを参照してください。 -
action=RESTORE
: このコマンドは、Solr インデックスと構成を復元します。詳細については、コレクションの復元 のセクションを参照してください。 -
action=LISTBACKUP
: このコマンドは、指定された場所で使用可能なバックアップポイントを一覧表示し、それぞれにメタデータを表示します。詳細については、バックアップの一覧 のセクションを参照してください。 -
action=DELETEBACKUP
: このコマンドを使用すると、バックアップファイルまたは全体のバックアップを削除できます。詳細については、バックアップの削除 のセクションを参照してください。
ユーザ管理クラスタと単一ノードインストール
バックアップと復元には、Solr のレプリケーションハンドラを使用します。Solr には、すぐに使用できるレプリケーションの暗黙的なサポートが含まれているため、この API を使用できます。ただし、レプリケーションハンドラの構成は、solrconfig.xml
で独自のレプリケーションハンドラを定義することでカスタマイズできます。レプリケーションハンドラの設定の詳細については、ReplicationHandler の設定 のセクションを参照してください。
バックアップ API
backup
API では、システムのバックアップのために、/replication
ハンドラにコマンドを送信する必要があります。
次のような HTTP コマンドを使用してバックアップをトリガーできます(「gettingstarted」を操作しているコアの名前に置き換えます)。
https://127.0.0.1:8983/solr/gettingstarted/replication?command=backup
backup
コマンドは非同期呼び出しであり、最新のインデックスコミットポイントからのデータを表します。すべてのインデックス作成および検索操作は、通常どおりインデックスに対して実行され続けます。
1 つのコアに対して 1 回に 1 つのバックアップ呼び出しのみを行うことができます。進行中のバックアップ操作中に、復元のための後続の呼び出しを行うと、例外がスローされます。
バックアップリクエストは、次の追加パラメータも受け取ることができます。
場所
-
オプション
デフォルト:なし
バックアップが作成されるパス。パスが絶対パスでない場合、バックアップパスはSolrのインスタンスディレクトリからの相対パスになります。
name
-
オプション
デフォルト:なし
スナップショットは
snapshot.<name>
という名前のディレクトリに作成されます。名前が指定されていない場合、ディレクトリ名はsnapshot.<_yyyyMMddHHmmssSSS_>
という形式になります。 numberToKeep
-
オプション
デフォルト:なし
保持するバックアップの数。
solrconfig.xml
のレプリケーションハンドラーでmaxNumberOfBackups
が指定されている場合、常にmaxNumberOfBackups
が使用され、numberToKeep
を使用しようとするとエラーが発生します。また、バックアップ名が指定されている場合、このパラメータは考慮されません。maxNumberOfBackups
の詳細については、レプリケーションハンドラーの設定のセクションを参照してください。 repository
-
オプション
デフォルト:なし
バックアップに使用するリポジトリの名前。リポジトリが指定されていない場合、ローカルファイルシステムリポジトリが自動的に使用されます。
commitName
-
オプション
デフォルト:なし
CREATESNAPSHOTコマンドを使用してスナップショットを作成したときに使用されたコミットの名前。
バックアップステータス
backup
操作が完了したかどうかを確認するには、この例のように、/replication
ハンドラーにdetails
コマンドを送信することで監視できます。
https://127.0.0.1:8983/solr/gettingstarted/replication?command=details&wt=xml
<lst name="backup">
<str name="startTime">2022-02-11T17:19:33.271461700Z</str>
<int name="fileCount">10</int>
<int name="indexFileCount">10</int>
<str name="status">success</str>
<str name="snapshotCompletedAt">2022-02-11T17:19:34.363859100Z</str>
<str name="endTime">2022-02-11T17:19:34.363859100Z</str>
<str name="snapshotName">my_backup</str>
</lst>
失敗した場合、レスポンスにsnapShootException
が送信されます。
リストアAPI
バックアップをリストアするには、restore
コマンドを/replication
ハンドラーに送信し、その後リストアするバックアップの名前を指定する必要があります。
次のようなコマンドでバックアップからリストアできます。
https://127.0.0.1:8983/solr/gettingstarted/replication?command=restore&name=backup_name
これにより、指定された名前のインデックススナップショットが現在のコアにリストアされます。リストアが完了すると、検索はスナップショットデータを反映し始めます。
restore
リクエストは、以下の追加パラメータを取ることができます。
場所
-
オプション
デフォルト:なし
バックアップスナップショットファイルの場所。指定されていない場合は、Solrのデータディレクトリでバックアップを探します。
name
-
オプション
デフォルト:なし
リストアするバックアップインデックススナップショットの名前。名前が提供されていない場合、
snapshot.<タイムスタンプ>
形式のバックアップが場所ディレクトリ内で検索されます。その場合は、最新のタイムスタンプのバックアップが選択されます。 repository
-
オプション
デフォルト:なし
バックアップに使用するリポジトリの名前。リポジトリが指定されていない場合、ローカルファイルシステムリポジトリが自動的に使用されます。
restore
コマンドは非同期呼び出しです。リストアが完了すると、反映されるデータはリストアされたバックアップインデックスのデータになります。
一度に1つのrestore
呼び出しのみがコアに対して実行できます。進行中のリストア操作中に、後続のリストア呼び出しを行うと例外がスローされます。
リストアステータスAPI
restore
操作のステータスを確認するには、この例のように、/replication
ハンドラーにrestorestatus
コマンドを送信します。
https://127.0.0.1:8983/solr/gettingstarted/replication?command=restorestatus&wt=xml
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
<lst name="restorestatus">
<str name="snapshotName">snapshot.<name></str>
<str name="status">success</str>
</lst>
</response>
ステータスの値は、"In Progress"、"success"、または "failed"になります。失敗した場合、レスポンスに "exception" も送信されます。
CREATE: スナップショットの作成
スナップショット機能は、インデックスファイルがどこにもコピーされないため、バックアップ機能とは異なります。インデックスファイルは同じインデックスディレクトリ内でスナップショットされ、バックアップの際に参照できます。
次のようなHTTPコマンドでスナップショットコマンドをトリガーできます("techproducts"を操作するコアの名前に置き換えてください)。
V1 API
curl -X POST https://127.0.0.1:8983/solr/admin/cores?action=CREATESNAPSHOT&core=techproducts&commitName=commit1
V2 API
v2 APIでは、コア名とスナップショット名はクエリパラメータではなくパスの一部になります。
curl -X POST https://127.0.0.1:8983/api/cores/techproducts/snapshots/commit1
リスト: 特定のコアのすべてのスナップショットのリスト
次のようなHTTPコマンドでリストスナップショットコマンドをトリガーできます("techproducts"を操作するコアの名前に置き換えてください)。
V1 API
curl https://127.0.0.1:8983/solr/admin/cores?action=LISTSNAPSHOTS&core=techproducts&commitName=commit1
V2 API
v2 APIでは、コア名はクエリパラメータとしてではなく、パスに表示されます。
curl https://127.0.0.1:8983/api/cores/techproducts/snapshots
DELETE: スナップショットの削除
次のようなHTTPコマンドでスナップショットの削除をトリガーできます("techproducts"を操作するコアの名前に置き換えてください)。
V1 API
curl https://127.0.0.1:8983/solr/admin/cores?action=DELETESNAPSHOT&core=techproducts&commitName=commit1
V2 API
v2 APIでは、コア名とスナップショット名はクエリパラメータではなくパスの一部になります。
curl -X DELETE https://127.0.0.1:8983/api/cores/techproducts/snapshots/commit1
バックアップ/リストアストレージリポジトリ
Solrは、さまざまなストレージシステムにデータをバックアップおよびリストアできるように、リポジトリの抽象化を提供します。たとえば、ローカルファイルシステム(例:EXT3)で実行されているSolrクラスターは、同じディスク、リモートネットワークマウントドライブ、HDFS、または選択した「リポジトリ」の実装に応じて、一般的な「クラウドストレージ」プロバイダーにバックアップデータを保存できます。Solrは、すぐに使用できる複数の異なるリポジトリ実装(LocalFileSystemRepository
、HdfsBackupRepository
、GCSBackupRepository
、およびS3BackupRepository
)を提供しており、必要に応じてユーザーが独自のストレージシステムのプラグインを作成できるようにしています。
ユーザーは、solr.xml
ファイルに任意数のリポジトリを定義できます。上記で説明したバックアップおよびリストアAPIを使用すると、ユーザーは実行時にrepository
パラメータを介して、これらの定義のどれを使用するかを選択できます。repository
パラメータが指定されていない場合、ローカルファイルシステムリポジトリがデフォルトとして使用されます。
リポジトリは、<backup>
親タグの下にネストされた<repository>
タグで定義されます。すべての<repository>
タグには、name
属性(ユーザーが後でこのリポジトリを選択するために参照できる識別子を定義します)とclass
属性(リポジトリを実装する完全なJavaクラス名を含む)が必要です。また、ブール値のdefault
属性を持つこともできます。これは、最大1つのリポジトリ定義でtrue
にすることができます。<repository>
タグの下の子要素はすべて、リポジトリに追加の構成として渡され、リポジトリは独自の実装固有の構成を読み取ることができます。
Solrに付属している各リポジトリ実装に関する情報は、以下に提供します。
LocalFileSystemRepository
LocalFileSystemRepositoryは、アクセス可能なファイルシステムの任意の場所にバックアップファイルを保存および取得します。ファイルは、「ローカル」ディスク、またはファイルシステムにローカルとして表示されるネットワークマウントドライブに保存できます。
ネットワークドライブと連携してLocalFileSystemRepositoryを使用しようとしているSolrCloud管理者は、各Solrノードで同じ場所でドライブを利用できるように注意する必要があります。厳密に言えば、マウントはバックアップ(またはリストア)を実行しているノードと、現在「オーバーシーアー」として機能しているノードにのみ存在する必要があります。ただし、「オーバーシーアー」の役割はクラスター内のノード間で頻繁に移動するため、バックアップドライブはすべてのノードに均一に追加することをお勧めします。 |
LocalFileSystemRepositoryインスタンスは、repository
パラメータを明示的に提供しない、またはsolr.xml
にデフォルトが指定されていないバックアップおよびリストアコマンドによってデフォルトとして使用されます。
LocalFileSystemRepositoryは、次の構成オプションを受け入れます。
場所
-
オプション
デフォルト:なし
バックアップの保存と取得に使用する(Solrからローカルでアクセス可能な)有効なファイルパス。ユーザーがバックアップまたはリストアAPIコマンドで
location
パラメータを提供しない場合のフォールバックとして使用されます。
このプロパティを使用する構成の例を以下に示します。
<backup>
<repository name="local_repo" class="org.apache.solr.core.backup.repository.LocalFileSystemRepository">
<str name="location">/solr/backup_data</str>
</repository>
</backup>
HdfsBackupRepository
HDFSディレクトリからバックアップファイルを保存および取得します。
これは、使用する前に有効にする必要があるhdfs
Solrモジュールを介して提供されます。
HdfsBackupRepositoryは、次の構成オプションを受け入れます。
solr.hdfs.buffer.size
-
オプション
デフォルト:
4096
キロバイトHDFSとの間でデータを転送するために使用されるバッファのサイズ(バイト単位)。メモリが許容される範囲で、より大きなバッファを使用すると、スループットが向上する場合があります。
solr.hdfs.home
-
必須
デフォルト:なし
hdfs://<ホスト>:<ポート>/<hdfsBaseFilePath>
形式のHDFS URI。これにより、Solrはバックアップファイルを保存(または取得)するHDFSクラスターを指します。 solr.hdfs.permissions.umask-mode
-
オプション
デフォルト:なし
HDFSにファイルを作成するときに使用されるパーミッションumask。
場所
-
オプション
デフォルト:なし
バックアップの保存と取得に使用する、HDFSクラスター上の有効なディレクトリパス。ユーザーがバックアップまたはリストアAPIコマンドで
location
パラメータを提供しない場合のフォールバックとして使用されます。
これらのプロパティを使用する構成の例を以下に示します。
<backup>
<repository name="hdfs" class="org.apache.solr.hdfs.backup.repository.HdfsBackupRepository" default="false">
<str name="solr.hdfs.home">hdfs://some_hdfs_host:1234/solr/backup/data</str>
<int name="solr.hdfs.buffer.size">8192</int>
<str name="solr.hdfs.permissions.umask-mode">0022</str>
<str name="location">/default/hdfs/backup/location</str>
</repository>
</backup>
GCSBackupRepository
Google Cloud Storage(「GCS」)バケットにバックアップファイルを保存および取得します。
これは、使用する前に有効にする必要があるgcs-repository
Solrモジュールを介して提供されます。
GCSBackupRepositoryは、全体的な構成に対して次のオプションを受け入れます。
gcsBucket
-
オプション
デフォルト:説明を参照
すべてのバックアップファイルの読み書きに使用するGCSバケット。指定されていない場合、GCSBackupRepositoryは
GCS_BUCKET
環境変数の値を使用します。両方の値がない場合、デフォルトとして値solrBackupsBucket
が使用されます。 gcsCredentialPath
-
オプション
デフォルト:説明を参照
ローカルファイルシステム上のパスで、Solr からアクセス可能なGoogle Cloud サービスアカウントキーファイルへのパスです。指定しない場合、GCSBackupRepository は
GCS_CREDENTIAL_PATH
環境変数の値を使用します。両方の値がなく、Solr が GCP 内で実行されている場合、GCS クライアントは GCP の「Compute Engine メタデータサーバー」またはWorkload Identity機能を使用して認証を試みます。両方の値がなく、Solr が GCP の外部で実行されている場合、認証できず、バックアップまたは復元操作は失敗します。 場所
-
オプション
デフォルト:なし
バックアップの保存と取得に使用する、指定された GCS バケット内の有効な「ディレクトリ」パスです。(GCS はフラットなストレージモデルを使用しますが、Solr のバックアップ機能は、階層的なディレクトリストレージを近似する方法で BLOB に名前を付けます。)ユーザーが Backup または Restore API コマンドで
location
パラメータを指定しない場合のフォールバックとして使用されます。
GCSBackupRepository は、全体的な構成のためのこれらのプロパティに加えて、GCS との通信に使用するクライアントを詳細に制御できます。これらのプロパティはほとんどのユーザーには関心がない可能性がありますが、パフォーマンスを細かく管理したい場合や、不安定なネットワークにさらされている場合に役立つ可能性があります。
GCSBackupRepository は、次の高度なクライアント構成オプションを受け入れます。
gcsWriteBufferSizeBytes
-
オプション
デフォルト:
16777216
バイト (16 MB)GCS にデータを送信するときに使用するバッファサイズ(バイト単位)。
gcsReadBufferSizeBytes
-
オプション
デフォルト:
2097152
バイト (2 MB)GCS からデータをコピーするときに使用するバッファサイズ(バイト単位)。
gcsClientHttpConnectTimeoutMillis
-
オプション
デフォルト:
2000
ミリ秒GCS クライアントによって行われるすべての HTTP リクエストの接続タイムアウト(ミリ秒単位)。
0
を使用して無限タイムアウトを要求できます。負の整数または値をまったく指定しない場合、デフォルト値が使用されます。 gcsClientHttpReadTimeoutMillis
-
オプション
デフォルト:
20000
ミリ秒確立された接続でデータを読み取るための読み取りタイムアウト(ミリ秒単位)。
0
を使用して無限タイムアウトを要求できます。負の整数または値をまったく指定しない場合、デフォルト値が使用されます。 gcsClientMaxRetries
-
オプション
デフォルト:
10
操作が失敗した場合に再試行する最大回数。GCS クライアントは、この値に達するか、すべてのアテンプトで費やされた時間が
gcsClientMaxRequestTimeoutMillis
を超えるまで操作を再試行します。0
を使用して、再試行しないように指定できます。 gcsClientMaxRequestTimeoutMillis
-
オプション
デフォルト:
30000
ミリ秒失敗した操作のすべての再試行に費やす最大時間。GCS クライアントは、このタイムアウトに達するか、
gcsClientMaxRetries
の試行が失敗するまで操作を再試行します。 gcsClientHttpInitialRetryDelayMillis
-
オプション
デフォルト:
1000
ミリ秒失敗した HTTP リクエストの最初の再試行までの遅延時間(ミリ秒単位)。この値は、後続の再試行にも影響します。詳細については、以下の
gcsClientHttpRetryDelayMultiplier
の説明を参照してください。gcsClientMaxRetries
が0
の場合、再試行は試行されないため、このプロパティは無視されます。 gcsClientHttpRetryDelayMultiplier
-
オプション
デフォルト:
1.0
失敗した HTTP リクエストの連続する各再試行間の遅延をスケーリングするために使用される浮動小数点乗数。この数値が大きいほど、再試行遅延がより迅速に複合化およびスケーリングされます。
Under the covers, the GSC client uses an exponential backoff strategy between retries, governed by the formula: . The first retry will have a delay of , the second a delay of , the third a delay of , and so on.
指定しない場合、デフォルトで値
1.0
が使用され、各再試行試行の間でgcsClientHttpInitialRetryDelayMillis
が使用されることが保証されます。 gcsClientHttpMaxRetryDelayMillis
-
オプション
デフォルト:
30000
ミリ秒失敗した HTTP リクエストの再試行試行間の最大遅延時間(ミリ秒単位)。これは、多くの場合、複数回試行すると発生する再試行遅延の指数関数的な増加を制限するために使用されます。この最大値が適用されない場合の各遅延の計算方法の詳細については、上記の
gcsClientHttpRetryDelayMultiplier
の説明を参照してください。 gcsClientRpcInitialTimeoutMillis
-
オプション
デフォルト:
10000
ミリ秒タイムアウトする前に RPC リクエストを待機する時間(ミリ秒単位)。この値は、後続の再試行にも影響します。詳細については、以下の
gcsClientRpcTimeoutMultiplier
の説明を参照してください。gcsClientMaxRetries
が0
の場合、再試行は試行されないため、このプロパティは無視されます。 gcsClientRpcTimeoutMultiplier
-
オプション
デフォルト:
1.0
失敗した RPC リクエストの連続する各アテンプトでのタイムアウトをスケーリングするために使用される浮動小数点乗数。この数値が大きいほど、タイムアウトがより迅速に複合化およびスケーリングされます。
Under the covers, the GSC client uses an exponential backoff strategy for RPC timeouts, governed by the formula: . The first retry will have a delay of , the second a delay of , the third a delay of , and so on.
指定しない場合、デフォルトで値
1.0
が使用され、各 RPC アテンプトでgcsClientRpcInitialTimeoutMillis
が使用されることが保証されます。 gcsClientRpcMaxTimeoutMillis
-
オプション
デフォルト:
30000
ミリ秒失敗した RPC リクエストの再試行アテンプトの最大タイムアウト(ミリ秒単位)。これは、多くの場合、複数回試行すると発生するタイムアウトの指数関数的な増加を制限するために使用されます。この最大値が適用されない場合の各タイムアウトの計算方法の詳細については、上記の
gcsClientRpcTimeoutMultiplier
の説明を参照してください。
全体的なプロパティと GCS クライアントプロパティを使用する構成例を以下に示します。
<backup>
<repository name="gcs_backup" class="org.apache.solr.gcs.GCSBackupRepository" default="false">
<str name="gcsBucket">solrBackups</str>
<str name="gcsCredentialPath">/local/path/to/credential/file</str>
<str name="location">/default/gcs/backup/location</str>
<int name="gcsClientMaxRetries">5</int>
<int name="gcsClientHttpInitialRetryDelayMillis">1500</int>
<double name="gcsClientHttpRetryDelayMultiplier">1.5</double>
<int name="gcsClientHttpMaxRetryDelayMillis">10000</int>
</repository>
</backup>
S3BackupRepository
Amazon S3 バケットにバックアップファイルを保存および取得します。
これは、使用前に有効にする必要がある s3-repository
Solr モジュールによって提供されます。
このプラグインはデフォルトの AWS 認証情報プロバイダーチェーンを使用するため、認証情報が適切に設定されていることを確認してください(たとえば、環境変数経由、または ~/.aws/credentials
など)。
S3 リポジトリで
|
S3 バックアップと復元を有効にするための構成例を以下に示します。
<backup>
<repository name="s3" class="org.apache.solr.s3.S3BackupRepository" default="false">
<str name="s3.bucket.name">my-s3-bucket</str>
<str name="s3.region">us-west-2</str>
</repository>
</backup>
S3BackupRepository は、全体的な構成のために、次のオプション(solr.xml
内)を受け入れます。
s3.bucket.name
-
オプション
デフォルト:なし
すべてのバックアップファイルを読み書きする S3 バケット。
S3_BUCKET_NAME
環境変数を設定することで上書きできます。 s3.profile
-
オプション
デフォルト:なし
構成ファイルから AWS 設定をロードするプロファイル。プロファイルを使用すると、複数の S3 リポジトリに対して独立した設定が可能になります。
AWS_PROFILE
環境変数または-Daws.profile
システムプロパティを設定することで上書きできます。プロファイルごとの構成設定の詳細については、AWS Java SDK ドキュメントを参照してください。 s3.region
-
オプション
デフォルト:なし
バケットがプロビジョニングされている有効な Amazon S3 リージョン文字列。このバケットに対する読み取りおよび書き込み権限が必要です。リージョンの完全なリストについては、S3 ドキュメントを参照してください。
S3_REGION
環境変数を設定するか、AWS 構成ファイルでリージョンを設定することで上書きできます。 s3.endpoint
-
オプション
デフォルト:なし
明示的な S3 エンドポイント。AWS S3 を使用する通常の操作では必要ありません(S3 クライアントは
s3.region
からエンドポイントを推測できます)。このパラメータは、モック S3 フレームワークを使用し、S3Mock を使用する場合など、S3 リクエストがルーティングされる場所を明示的にオーバーライドする場合に役立ちます。S3_ENDPOINT
環境変数を設定することで上書きできます。
|
s3.proxy.url
-
オプション
デフォルト:なし
必要に応じて、S3 クライアントがリクエストをルーティングするプロキシ URL。URL には
<スキーム>://<ホスト名>:<ポート>
を含める必要があります。ただし、ポートとスキームは、存在しない場合は*推測される可能性があります*。使用する場合、これは設定されているシステムプロキシ設定を上書きします。
s3.proxy.useSystemSettings
オプションを無効にする必要はありません。プロキシのusername
、password
、またはnonProxyHosts
を使用する必要がある場合は、以下に示すシステムプロパティを使用してください。 s3.proxy.useSystemSettings
-
オプション
デフォルト: true
デフォルトでは、S3 サーバーと通信するときにシステムプロキシ設定が設定されている場合は、それを使用します。サポートされているプロキシシステムプロパティは次のとおりです。
-
http.proxyHost
-
http.proxyPort
-
http.nonProxyHosts
-
http.proxyUser
-
http.proxyPassword
-
s3.retries.disable
-
オプション
デフォルト: false
すべての S3 操作の再試行を無効にします。これは推奨されません。
S3 クライアント構成
AWS Java SDK は、S3 クライアントの構成を設定する多くの方法を提供します。Solr S3 リポジトリでは、これらの構成を次を使用して設定できます。
-
環境変数
-
Java システムプロパティ
-
AWS 構成ファイル(プロファイルごとである可能性あり)
これらのオプションには以下が含まれます。
-
リージョン
-
アクセスキー
-
再試行
-
RetryMode (
LEGACY
,STANDARD
,ADAPTIVE
) -
最大試行回数
-