Easysearch はディスクを完全に使い切るのを防ぐため、「ディスクウォーターマーク(水位線)」機能を用いてストレージ使用量を制御しています。以前の記事で、各水位線の役割や INFINI Console を使った事前アラート設定について紹介しました。本稿では、実際に容量が逼迫した場合の事前対応策を中心に解説します。
1. リソースの追加
リソースに余裕がある場合は、クラスタのスケールアップまたはスケールアウトを検討します。
新しいデータノードの追加
ノードを追加すると、クラスタは自動的にシャードの再バランスを開始します。以下のコマンドで移動中のシャードを確認できます:
GET /_cat/shards?v&h=state,node&s=state
レスポンスに RELOCATING 状態のシャードが含まれている場合、データ移動が進行中です。
既存ノードのディスク容量拡張
ディスクを増設または拡張した後は、次のコマンドで利用可能容量の変化を確認できます:
GET _cat/allocation?v&s=disk.avail&h=node,disk.percent,disk.avail,disk.total,disk.used,disk.indices,shards
2. ディスク使用量の削減
追加リソースが確保できない場合は、既存データの整理によりスペースを解放します。
不要なインデックスの削除
インデックスライフサイクル管理(ILM)を活用し、有効期限切れのインデックスを自動削除することを推奨します。
レプリカ数の削減
業務要件によっては過剰なレプリカが設定されていることがあります。必要に応じてレプリカ数を減らすことでストレージ負荷を軽減できます。以下のコマンドで、レプリカ数とプライマリストアサイズの降順でインデックス一覧を表示できます:
GET _cat/indices?v&s=rep:desc,pri.store.size:desc&h=health,index,pri,rep,store.size,pri.store.size
サーチャブルスナップショットの活用
アクセス頻度が低く、長期保存が必要なデータについては、「サーチャブルスナップショット(Searchable Snapshots)」機能を利用することで、ディスク使用量を大幅に削減できます。
3. インデックスのストレージ最適化
ZSTD 圧縮と source_reuse の有効化
Easysearch は ZSTD 圧縮および source_reuse 機能をサポートしており、デフォルトの圧縮方式と比較してディスク使用量を大きく削減できます。これらはインデックス作成時またはテンプレート経由で設定可能です:
PUT optimized-index
{
"settings": {
"index.codec": "ZSTD",
"index.source_reuse": true
}
}
⚠️ 注意:インデックスに nested 型フィールドや KNN などのプラグイン由来の特殊データ型が含まれる場合、source_reuse は使用できません。
マッピングとフィールドの最適化
- マッピング設計の見直し:デフォルトマッピングを使用すると、文字列フィールドが自動的に
textとkeywordの両方として生成されるため、不要なストレージ消費を招きます。 - フィールド使用状況の分析:特定インデックス内の各フィールドのアクセス頻度を確認できます。
GET metrics/_field_usage_stats - フィールド単位のディスク使用量計測:
上記結果をもとに、未使用フィールドの無効化や設定調整を行います。POST metrics/_disk_usage?run_expensive_tasks=true
Rollup 機能による集約保存
時系列データでは、詳細なメトリクスが長期間蓄積され、ストレージコストが膨らむ傾向があります。Easysearch の Rollup 機能は、古い高頻度データを低頻度の集約形式に変換し、1つのドキュメントにまとめることで保存効率を向上させます。
この機能の特徴として、Rollup インデックスのローリングが自動で行われる点や、クエリ時に元のインデックス名をそのまま使用でき、アプリケーション側のコード変更が不要である点が挙げられます。
詳細は公式ドキュメントをご参照ください:https://infinilabs.cn/docs/latest/easysearch