DBAtlas · データベース運用アトラス

Elasticsearch の日常運用と障害シナリオ (8.x / 9.x)

Elasticsearchレベル: 上級所要時間: 5 分 (確認) 〜 数時間 (reindex、ノードの退避)

インストールではありません。インストール済みの Elasticsearch 8.x / 9.x クラスタを日常的に運用し、障害時に復旧するための、シナリオ別の runbook です。ヘルスと allocation explain、未割り当て shard の解消 (ディスク、filtering、retry_failed、replica、最後の手段としての stale/empty primary)、ディスク watermark、read_only_allow_delete ブロック、ノードの追加と安全な削除、alias を使ったダウンタイムなしの reindex、ILM と rollover、_shrink / _split、snapshot から単一 index を新しい名前でリストアする手順を扱います。何をすべきかわからない場合は、ヘルスチェックから始めてください。snapshot リポジトリの設定と SLM、セキュリティ強化、バージョンアップグレードは別の Elasticsearch ガイドにあります。

構成: Elasticsearch 8.x / 9.x クラスタ (1〜N ノード)、TLS と認証が有効

シナリオ

  • クラスタのヘルス: status、ノード、未割り当て shard、ディスク — 読み取り専用: green/yellow/red、ノード一覧、未割り当て (UNASSIGNED) の shard とその原因 (allocation explain)、ディスク使用率と watermark、保留中のタスク。何をすべきかわからない場合はここから始めてください。
  • 未割り当て (UNASSIGNED) の shard を解消する (explain に基づく) — クラスタが yellow または red で、shard が割り当てられない場合です。allocation explain の原因に応じて、ディスク、allocation filtering、リトライ上限 (retry_failed)、replica 数、または最後の手段として古いコピーからの primary を扱います。
  • ディスク watermark の設定を確認 / 変更する — ディスク使用率が原因で shard が移動している、または割り当てられない場合です。watermark のしきい値 (low / high / flood_stage) を一時的または恒久的に変更するか、デフォルトに戻します。
  • index が読み取り専用になった: read_only_allow_delete ブロックを解除する — 書き込みが 'FORBIDDEN/12/index read-only / allow delete (api)' または 'TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark' で拒否される場合です。まずディスクを空けてから、ブロックを解除します。
  • クラスタにノードを追加する (enrollment token) — 容量が必要な場合です。新しいサーバーに Elasticsearch をインストールし、enrollment token でクラスタに参加させます。shard は自動的にリバランスされます。ダウンタイムはありません。
  • ノードを安全に削除する (exclude、退避、停止) — ノードを廃止する、またはハードウェアを交換する場合です。allocation exclude で shard を他のノードに移動し、ノードが空になったことを確認し、master-eligible であれば voting exclusion を設定してから停止します。
  • Reindex: mapping/設定の変更のために、新しい index と alias でダウンタイムなしに切り替える — mapping のフィールド型、analyzer、または shard 数を変更する場合です。新しい index を作成し、_reindex でデータをコピーし、alias をアトミックに新しい index に切り替えます。
  • index lifecycle (ILM) と rollover を設定する / トラブルシューティングする — ログ/時系列の index が肥大化する、または削除されない場合です。ILM ポリシー (rollover + delete)、index テンプレート、最初の index (write alias) を設定します。既存のポリシーが進まない理由は explain で確認します。
  • shard 数を修正する: _shrink (削減) / _split (増加) — index の shard 数の選択が適切でなかった場合です。小さすぎる shard (oversharding) は _shrink で統合し、大きすぎる shard は _split で分割します。切り替えは alias で行います。
  • snapshot から単一 index を新しい名前でリストアする — index が削除された、または破損した場合です。snapshot リポジトリからその index だけを、稼働中の index に触れずに新しい名前 (rename) でリストアし、検証後に alias で本番に切り替えます。

開始前の確認

  • … (…) で root 権限、curl、クラスタの HTTP CA 証明書 (…) がある。elastic ユーザー (または manage + index 権限を持つユーザー) のパスワードを把握している。API 呼び出しはこのノードに HTTPS で行います。
  • 変更管理の記録を作成し、アプリケーションチームに通知した。shard の移動、reindex、resize の操作はディスク、ネットワーク、CPU に負荷をかけるため、ピーク時間帯を避けて実施してください。元に戻せない手順 (削除、stale/empty primary) の前には最新の snapshot が必要です: Snapshot。
  • 新しいサーバーを クラスタのインストールガイド の OS 準備とソフトウェアのインストールのフェーズで準備済みである: 同じ Elasticsearch バージョン、vm.max_map_count、ヒープ、swap 無効、ファイアウォールで 9200/9300 を開放。サービスは 一度も起動していない (enrollment は初回起動前にしか行えません)。

ガイドのフェーズ

  • API アクセス — API 用の一時認証ファイル
  • 状態: ヘルス、ノード、shard、ディスク (読み取り専用) — クラスタのヘルス、ノード、未割り当ての shard · shard が未割り当ての理由を確認する (allocation explain) · ディスク使用率と watermark · 保留中のタスクと結果の解釈
  • 1. 診断: shard が割り当てられない理由 — index の shard と explain の判定
  • 2. 適用 — 失敗した割り当てを再試行する (retry_failed) · replica 数をノード数に合わせる · allocation filtering を解除する · ディスクのブロックへ進む · 古いコピーから primary を割り当てる (allocate_stale_primary) · 空の primary を割り当てる (allocate_empty_primary)
  • 3. 検証 — shard の起動を監視する
  • 1. 診断 — ディスク使用率と現在のしきい値
  • 2. 適用 — …しきい値を変更する…しきい値をデフォルトに戻す…
  • 1. 診断: ブロックとディスク — ブロックされた index とディスクを確認する · ディスクを空ける方法
  • 2. 適用 — ブロックを解除する
  • 3. 検証 — 書き込みが動作することをテストする
  • 1. 診断 — クラスタの状態を確認する
  • 2. 適用: enrollment と参加 — ノード用の enrollment token を作成する · 新しいノードを token で構成する · node.name とネットワーク設定を確認する · サービスを起動する
  • 3. 検証 — ノードが参加し、shard を受け取っていることを確認する
  • 1. 診断 — ノードの shard とロールを確認する
  • 2. 適用: 退避と停止 — ノードから shard を移動する (allocation exclude) · ノードの退避完了を待つ · master-eligible ノードを投票から外す · ノードを停止する · exclude と voting exclusion を解除する
  • 3. 検証 — クラスタのヘルスを確認する
  • 1. 診断と準備 — 移行元 index と alias を確認する · 新しい mapping/設定で新しい index を作成する
  • 2. 適用: コピーと alias の切り替え — データをコピーする (_reindex、バックグラウンド) · タスクを監視する · 新しい index を準備し、件数を比較する · alias をアトミックに新しい index に切り替える
  • 3. その後の作業 — 旧 index をクローズする (後で削除)
  • 1. ILM ポリシー、テンプレート、最初の index — ILM ポリシーを作成する · index テンプレートを作成する · 書き込み用 alias を持つ最初の index を作成する
  • 診断: ILM が進まない理由 — ILM の状態とエラーのある index を確認する · 失敗したステップを再試行する
  • 手動 rollover — alias を今すぐ rollover する
  • 1. 診断 — index の shard 数とサイズ
  • 3. 適用 — …Shrink…Split…: … → … (… shard) · alias を新しい index に切り替える
  • 4. その後の作業 — 移行元 index をクローズする (後で削除)
  • 1. 診断: snapshot に index があるか — snapshot とその中の index を確認する
  • 2. 適用: 新しい名前でリストアする — index を …… という名前でリストアする · 検証して本番に切り替える
  • クリーンアップ — 認証ファイルを削除する
環境に合わせた手順プランを開く →