冗長化・可用性の設計判断 — “やりすぎない”ラインの引き方

冗長化の設計で多くの現場が陥りやすい落とし穴は、「可用性は高いほど良い」という前提を疑わないまま構成を決めてしまうことです。実際には、可用性レベルを一段上げるたびに設計の複雑さと運用コストは非線形に増大します。正しい出発点は「業務が止まったとき何が起きるか」を定量的に把握し、そこから逆算して「どこまでの停止を許容できるか」のラインを明示することです。この記事では、過剰設計と過小設計の両方を避けるための判断軸を整理します。

可用性は「高いほど良い」ではない — 過剰の代償

ナイン数が増えるほど指数関数的に跳ね上がる負担

可用性の目標値は一般的に「ナイン数」で表されます。99.9%(スリーナイン)は年間約8.7時間のダウンタイムを許容し、99.99%(フォーナイン)になると年間53分、99.999%(ファイブナイン)では年間5.3分まで縮小します。数字上は「0.099%の差」ですが、それを実現するための設計コストと運用コストは単純比例ではなく、数倍から数十倍規模に膨らむことが多いです。フォーナインを達成するためには、単なる冗長化だけでなく、計画メンテナンス中の無停止デプロイ、フェイルオーバーの自動化と定期テスト、監視アラートの精緻なチューニングが全て必要になります。どの数字を目標とするかという議論の前に、「その数字を達成しなければ業務上何が起きるか」を先に問わなければ、目標値は根拠のない願望になります。

過剰冗長が招く「運用複雑性の罠」

インフラ担当者が2〜3名しかいない組織でファイブナインを目指す設計を組むと、監視すべきコンポーネント数が単一構成の3〜5倍に増え、障害発生時の切り分けポイントも同様に増加します。ある構築現場では、冗長化を厚くした結果、ロードバランサー・データベースレプリカ・キャッシュクラスターの3層にわたる障害が同時発生し、復旧に要した時間が単一構成の場合より長くなったという話をよく聞きます。複雑な構成はコンポーネント間の依存関係を増やし、一点の設定ミスが広範囲の障害に連鎖するリスクを高めます。「冗長化しているから安心」という感覚が、障害時の初動判断を遅らせる原因にもなりえます。

「ゼロダウンタイム神話」を設計の前提にしない

深夜や週末のメンテナンスウィンドウが確保できるシステムであれば、計画停止を前提とした設計でも業務影響をほぼゼロに抑えられます。たとえば月に1回2時間の計画停止が許容されるシステムなら、年間ダウンタイムは24時間を超えますが、それが業務上問題ないなら99.9%以上の可用性設計は過剰です。設計の出発点はSLAの数字ではなく、「業務が実際に止まってよい時間帯・時間量はどこか」という問いです。この問いに答えられない段階で可用性目標を設定すると、根拠のない高い数字が一人歩きしはじめます。

止まって困る度合い(業務影響)から逆算する設計

業務システムを「影響の重さ」で4分類する

冗長化レベルを決めるには、まず対象システムが業務停止時にどのような影響をもたらすかを分類することが先決です。一般的な分類軸として、①売上・決済・受注に直結する基幹系、②社内業務を支える情報系・グループウェア、③データを参照するだけの分析系・レポート系、④夜間に処理が走るバッチ系、の4区分で整理すると判断が明確になります。基幹系は1時間の停止が直接的な機会損失や信用毀損に結びつくため、設計上の優先度は最上位です。一方で分析系やバッチ系は数時間〜数日の遅延が許容される場合が多く、過剰な冗長化の代表的な候補になります。この4分類を最初に行うことで、設計リソースの配分先が明確になります。

ダウンタイムを「業務単位の数字」で見積もる

業務担当者と話す際、「可用性99.9%が必要です」という技術目標だけを提示しても合意は得にくいです。代わりに「このシステムが1時間停止した場合、影響を受けるユーザー数はおよそ何名か」「1件あたりの処理が滞留すると下流工程への影響はどこまで波及するか」を具体化することで、業務側の認識と設計の前提が揃います。たとえばECサイト的なシステムであれば、ピーク1時間のセッション数や注文件数から停止の影響を試算できます。この数字が設計判断の根拠になり、後からの「なぜこの構成にしたのか」という問い合わせにも答えられる状態になります。数字を持って合意するプロセスを省略すると、設計変更の局面で判断基準が失われます。

依存関係のマッピングで「本当の単一障害点」を特定する

システム単体の冗長化だけを考えていると、外部APIや認証基盤など依存先の可用性がボトルネックになるケースを見落とします。上流・下流のシステムをマッピングし、「このコンポーネントが止まると何が止まるか」の依存グラフを描くと、本当に冗長化すべき箇所が浮かび上がります。たとえばWebサーバーを2台冗長化しても、DBが単一構成のままであればシステム全体の可用性はDBの可用性に引きずられます。依存グラフを描かずに部分的な冗長化を進めると、コストだけかかって可用性向上効果が薄い設計になりがちです。依存マッピングは設計初期のアンチパターン検出として機能します。

単一構成で妥協してよい場面・してはいけない場面

単一構成が合理的な条件

開発・検証・ステージング環境は、原則として単一構成で十分です。本番と同等の冗長構成を検証環境にも適用すると、環境数が3〜5セット存在する組織では維持コストと管理工数が倍近くに膨らみます。また、データ量が少なくバックアップからの復元が30分以内に完了できるシステム、かつ停止時間の窓が確保できる運用形態であれば、単一構成+定期バックアップで十分な可用性を担保できます。「過去に一度も障害で止まったことがないから冗長化不要」という理由付けは危険ですが、「止まっても30分以内に復旧でき、その間の業務影響が許容範囲内」であれば、冗長化コストを投じる合理性は乏しいです。

単一構成を避けるべき判断基準

次のいずれかに該当する場合は、単一構成での運用リスクを明示したうえで代替設計を検討する必要があります。まず、システム停止が直接的な売上損失・法的リスク・SLA違反につながる場合です。次に、障害時の手動復旧に30分以上かかる見込みがあり、その時間帯に業務担当者が対応できない状況(深夜・休日)が常態化している場合です。さらに、単一障害点となるコンポーネントが老朽化しており、ハードウェア障害リスクが無視できない場合も単一構成を避けるべき状況です。これらの条件を設計フェーズの初期にチェックリスト化しておくと、判断を属人化せずに進められます。

「単一+バックアップ」と「冗長構成」の間で線を引く

単一構成と完全冗長構成の間には、「単一構成+バックアップ+復旧手順の整備」という中間的な選択肢があります。この構成でRTO(復旧目標時間)を2〜4時間に設定できるなら、フェイルオーバー構成を組むよりもコスト効率が高くなる場面が多いです。ポイントは、「構成で可用性を上げる」か「復旧速度で可用性を補う」かという判断軸を意識することです。フェイルオーバーの自動化には設計・テスト・監視の継続的な維持コストがかかります。復旧手順を文書化し定期的な訓練を行う体制が整っていれば、バックアップ+手動復旧の方が総コストを低く抑えられるケースも少なくありません。

■ この設計判断を深める一冊[PR]

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム(Betsy Beyer/オライリー)

可用性や信頼性をどこまで作り込むかの判断軸を、Googleの運用思想から学べる一冊です。冗長化の「やりすぎない線引き」を深めたい方に向いています。

Amazonで見る →

冗長化の段階(バックアップ→フェイルオーバー→多重化)

バックアップ単体が担保できること・できないこと

バックアップはデータ消失(RPO)への備えであり、サービス継続性(RTO)への備えとは性質が異なります。バックアップからの復元には、データ量や環境構成によりますが、一般的に数時間〜半日程度のダウンタイムが発生します。この時間が業務上許容できるかどうかを先に確認せずにバックアップ設計を完了させると、障害時に「復元できるが、復元するまでの数時間が問題」という状況が起きます。バックアップは「最後の砦」であり、RTOを縮める手段としては使えない点を設計段階で明示しておくことが重要です。RTOへの対策はフェイルオーバー以上の構成で担う必要があります。

フェイルオーバー設計の判断ポイント

フェイルオーバー構成には大きくActive-StandbyとActive-Activeの2方向があります。Active-Standbyはスタンバイ側が常時待機しており、障害検知後に切り替わります。シンプルで管理しやすい一方、スタンバイリソースは通常時に仕事をしないためリソース効率は50%以下になります。Active-Activeは全ノードが処理を分担するため効率は高いですが、セッション共有・データ整合性・負荷分散ロジックの設計が複雑になります。また、フェイルオーバー先に切り替わった後、元の構成に戻す「フェイルバック」の手順と訓練も設計に含めることが、本番で実際に使える構成にするための条件です。フェイルバックを設計外に置いたまま本番稼働すると、復旧後の状態が想定と乖離するリスクがあります。

多重化が本当に必要かを問い直す

ロードバランサー・アプリケーション層・DB層の全段を多重化する構成は、コンポーネント台数が単一構成の3〜4倍に増えます。それに伴い、OSパッチ・設定変更・証明書更新などのルーティン作業の対象も同じ倍率で増加します。多重化を選択する前に「フェイルオーバーで達成できるRTOと、多重化で達成できるRTOの差が、業務に与える影響の差に見合うか」を問い直すことが必要です。多くの場合、RTOの差は数分〜十数分であり、そのために設計・維持コストを数倍に増やす判断が正当化されるシステムは全体の中では限られています。多重化は構成の最終形ではなく、あくまで要件によって選択される一手段です。

復旧目標(RPO/RTO)を現実的に決める判断

RPOとRTOが設計全体を規定する理由

RPO(Recovery Point Objective:どの時点まで遡れるか)とRTO(Recovery Time Objective:何時間で復旧するか)は、可用性設計全体の基準値です。RPOが「1時間」であれば、最低でも1時間ごとのバックアップが必要になります。「ゼロ」を要求するなら、トランザクションログを常時複製するリアルタイム同期の仕組みが必要です。RTO「15分以内」を要件とするなら、手動復旧ではなく自動フェイルオーバーの仕組みを組み込むことが前提になります。RPO・RTOの数字を設定する前に「どのデータのロスが許容できないか」「誰が何時間以内に復旧対応できるか」を業務側と合意しておかないと、設計後に要件が変わる事態になりかねません。

「ゼロ」目標が招く設計コストの現実

ゼロRPO・ゼロRTOを同時に達成しようとすると、同期レプリケーション+自動フェイルオーバー+無停止デプロイの仕組みが全て必要になり、設計・構築・テスト工数は100時間規模になることも珍しくありません。さらにゼロRTOを維持するためのサービス監視・アラート対応体制も常時必要です。現場では「ゼロを要求した業務部門が、実際の構築コストを聞いて驚いた」という話をよく耳にします。最初からゼロを要件として出発するのではなく、「1時間停止した場合と15分停止した場合で業務への影響はどう変わるか」という問いを業務側に投げかけ、現実的な数字に落とし込むプロセスが設計の質を高めます。

RPO/RTOを決める対話の組み立て方

業務担当者にRPO・RTOを直接「何分ですか」と質問しても、技術的背景がない相手には答えにくいことが多いです。効果的なアプローチは、「このシステムが昨夜11時から今朝6時まで止まっていた場合、業務上何が起きますか」という具体的なシナリオを提示する方法です。そのシナリオへの反応から「実際に許容できる停止時間」と「許容できないデータロスの範囲」を引き出せます。こうして得た情報をRPO・RTO目標に変換し、設計選択肢とその実現コストを並べて合意を取るという流れが、後からの設計変更を最小化します。技術者が一方的に数字を提示するのではなく、業務側の言葉から数字を引き出すプロセスが鍵です。

コストと運用負荷が跳ねる境界の見極め

構成ごとの運用工数の差を比較する

冗長化レベル別の運用工数は、構成の複雑さに応じて大きく変わります。以下の表は代表的な3構成における設計・維持コストの概算比較です。数字はあくまで目安であり、組織規模・スキルレベル・自動化の程度によって変動しますが、相対的な差の大きさを把握する材料として活用できます。

構成パターン 初期設計・構築の目安工数 月次維持運用の目安工数 主な追加コスト・リスク
シングル構成+定期バックアップ 基準(1×) 基準(1×) 復旧手順の整備・定期訓練の工数
Active-Standby フェイルオーバー 基準の2〜3倍 基準の1.5〜2倍 スタンバイリソース費用・切替テスト工数
Active-Active 多重化(全層) 基準の4〜6倍 基準の3〜4倍 整合性設計・デプロイ複雑化・スキル維持コスト

この工数差が実際の人件費にどう跳ね返るかは、担当者のスキルレベルや組織規模によります。重要なのは、構成を一段上げるたびに「設計時だけでなく、ランニングの維持コストも継続的に増え続ける」という認識を持つことです。一度組んだ構成は、要件が変わっても下方修正しにくいという慣性も考慮に入れておく必要があります。

「人件費」が最大のコスト要因になる理由

インフラのコスト計算では、サーバー台数やクラウドの料金に目が向きがちですが、複雑な冗長構成の最大コストは人件費です。フェイルオーバーの定期テスト・切替訓練・監視ルールのチューニング・障害発生時のエスカレーション対応、これらは全て担当者の時間を消費します。担当者が1〜2名の組織でActive-Active構成を組んだ場合、障害対応の属人化とバーンアウトのリスクが高まります。自動化で補える部分もありますが、自動化スクリプト自体のメンテナンスや誤動作時の対応も工数として計上する必要があります。「自動化したから楽になる」という期待だけで構成を選ぶと、維持フェーズで行き詰まります。

クラウドマネージドサービスが吸収できる範囲と限界

クラウドのマネージドサービスを活用すると、フェイルオーバーの自動化やパッチ適用の負担を大幅に軽減できます。ただし、マネージドサービスへの切り替え自体に移行工数が発生し、ベンダーロックインのリスクも生じます。またマネージドサービスのフェイルオーバーは数十秒〜数分程度のダウンタイムが発生するケースがあり、「完全無停止」ではない点は設計に織り込む必要があります。マネージドで吸収できる運用工数と、自前で担う必要がある部分を分けて整理することが、現実的な設計判断の基礎になります。マネージドサービスは「工数ゼロ」ではなく「工数の種類が変わる」という理解が正確です。

“やりすぎない”可用性設計チェックフレーム

以下のチェックフレームを設計レビュー時に活用することで、過剰設計と過小設計の両方を防ぎやすくなります。設計の初期段階と、構成を変更する際の判断軸として使うことを推奨します。全項目を「Yes」で通過できない場合、その設計はまだ合意が不足している状態です。

  1. 業務影響の分類:対象システムを「売上直結/社内業務/参照系/バッチ」の4分類で位置付け、優先度を明示した。
  2. 停止シナリオの合意:業務担当者と「何時間の停止が業務上許容できるか」を具体的なシナリオで確認・合意した。
  3. RPO・RTOの明示:RPOとRTOの目標値を業務側との合意に基づいて数字で定義した(「なるべく短く」ではなく具体値)。
  4. 単一障害点の棚卸し:依存関係のマッピングを行い、本当に冗長化すべきコンポーネントを特定した(部分的な冗長化で止まらないか確認)。
  5. 冗長化レベルの選択根拠:選択した冗長化レベルがRTO要件を満たすか検証し、上位構成にしなかった理由を文書化した。
  6. 維持運用の体制確認:選択した構成を維持するために必要な担当者数・スキル・定期作業を見積もり、実際の体制と照合した。
  7. 定期テストの計画:フェイルオーバー・バックアップ復元のテストを年に何回実施するかを計画に含めた(設計だけで終わらせない)。
  8. 見直しトリガーの設定:業務上の重要度が変化した場合(利用者数が大幅増、売上依存度の変化等)に可用性設計を再評価するタイミングを定めた。

このチェックフレームのポイントは、「高い可用性を目指す」という方向性ではなく、「現在の業務要件に対して過不足のない構成を選ぶ」という視点で設計を評価する点にあります。過剰な冗長化は設計の自己満足になりやすく、一方で過小な冗長化は本番障害時に取り返しのつかない状況を招きます。可用性設計の質は構成の複雑さではなく、要件と設計の整合性で測るべきものです。業務影響の分析から始め、RPO・RTOを現実的な数字で合意し、その要件に対して最小限の構成を選ぶ—この順序を守ることが、”やりすぎない”設計判断の基本です。具体的な設定手順や構成ファイルの書き方については、ハンズオンの場で確認するのが確実です。

▶ 手を動かして本番まで到達する

その設計判断を、RHEL10の本番環境で手を動かして固めませんか

ここまでの設計判断は、読めば腹に落ちます。ですが「自分の手で本番まで通しきる自信」は、それとは別の話になります。

最大6名の少人数で、構築実務者の到達点まで引き上げます。座学で終わらせず、本番相当の環境で判断を検証する2日間です。

可用性の線引きを本番で検証する上級講座へ →

Linuxセミナー上級編(RHEL10)|最大6名の少人数ハンズオン