Searchable Snapshots機能の概要
Searchable Snapshots(検索可能スナップショット)機能は、バックアップデータに対する従来のクエリアクセス方法を変革します。従来の方法では、対象のスナップショットを特定し、適切な環境へリストアを行った後にクエリを実行する必要があり、処理フローが長く時間も消費していました。本機能はこのプロセスを大幅に効率化します。
ノードロールの設定
この機能を有効化するには、クラスター内にsearchロールを持つノードを最低1つ構成する必要があります。
# 専用ロールノードの設定例
node.roles: ["search"]
node.search.cache.size: 500mb
node.roles: ノードの役割を指定します。スナップショットデータの検索はこのロールを持つノードでのみ実行可能です。node.search.cache.size: スナップショット検索時に使用するキャッシュサイズを指定します。
複合ロールを持つノードの設定例は以下の通りです。
node.roles: ["master","data","search","ingest"]
node.search.cache.size: 500mb
スナップショットの作成
本機能は標準的なスナップショットを基盤とします。以下はsample_logsインデックスの作成とバックアップの例です。
// サンプルインデックスを作成
POST sample_logs/_doc
{
"message": "Testing searchable snapshots"
}
// スナップショットリポジトリへインデックスをバックアップ
PUT _snapshot/my_backup_repo/snapshot_001
{
"indices": "sample_logs",
"include_global_state": false
}
スナップショットインデックスの作成
機能の中核は、スナップショット内のインデックスを検索可能な状態としてマウントすることです。これは_restore APIにstorage_typeパラメータを指定して実行します。
作成時、名前は既存のアクティブなインデックスと重複してはなりません。バックアップ後に元のインデックスを削除した場合は、同じ名前を使用できます。
// 元のインデックスを削除
DELETE sample_logs
// スナップショットインデックスをマウント(元の名前で)
POST /_snapshot/my_backup_repo/snapshot_001/_restore
{
"indices": "sample_logs",
"include_global_state": false,
"include_aliases": false,
"storage_type": "remote_snapshot"
}
このコマンドはスナップショットリストアと似ていますが、storage_typeをremote_snapshotに設定することが本質的な違いです。
スナップショット内の全インデックスをマウントする場合はindicesパラメータを省略します。
異なる名前でマウントする例を以下に示します。
POST /_snapshot/my_backup_repo/snapshot_001/_restore
{
"indices": "sample_logs",
"include_global_state": false,
"include_aliases": false,
"storage_type": "remote_snapshot",
"rename_pattern": "(sample_logs)",
"rename_replacement": "mounted-$1"
}
rename_pattern: インデックス名をマッチさせる正規表現を指定します。キャプチャグループを使用できます。rename_replacement: マッチした部分を置換します。例ではmounted-sample_logsという名前のインデックスが作成されます。
スナップショットインデックスの検索
マウントされたスナップショットインデックスに対する検索は、通常のインデックスと全く同じクエリ構文で実行可能です。
よくある質問
通常インデックスとスナップショットインデックスの見分け方は?
インデックスの設定情報を確認します。スナップショットインデックスにはstore.type: remote_snapshotという項目が含まれます。
スナップショットインデックスにデータを書き込むことはできますか?
できません。データはリポジトリ内のスナップショット形式で保持されるため、本質的に読み取り専用です。書き込み操作はエラーとなります。
スナップショットインデックスを削除するには?
通常のインデックスと同様にDELETE APIで削除します。必要に応じて再度マウントできます。また、スナップショットを削除するには、それを参照するすべてのスナップショットインデックスを先に削除する必要があります。