インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

高可用性HAクラスタ・クラウド構成とWeb3層アーキテクチャ【202試験 主題2.13】

公開
,
LinuC Level 2 第16回 主題2.13 クラウドとシステムアーキテクチャ



LinuCレベル2(202試験)の技術分野における最終主題である 主題2.13「高可用システムと典型的なアーキテクチャ」では、障害発生時にもサービスを継続稼働させる 高可用性(HA)クラスタ(Pacemaker / Corosync / STONITH) に加え、システムの成長を支える キャパシティプランニング(2.13.2)クラウドサービス上のシステム構成(2.13.3)、および 典型的なシステムアーキテクチャ(Web3層モデル・非同期キュー)(2.13.4) が出題範囲に指定されています。あわせて本記事では、共有ストレージを持たずに内蔵ディスクだけでデータ冗長化を実現する手法として、DRBD(Distributed Replicated Block Device) によるリアルタイムブロック同期も実務拡張として解説します。

単一障害点(SPOF)を排除したアクティブ/スタンバイクラスタの構築から、スプリットブレインを防ぐクォーラム過半数判定、スケールアップとスケールアウトの設計判断、クラウドIaaSにおける永続化ストレージとエフェメラルの使い分け、そしてWeb3層モデルによる負荷分離まで、エンタープライズインフラを支える全体アーキテクチャの視点が問われます。本記事では、AlmaLinux 9.8の実機環境での Pacemaker 2.1 / Corosync 3.1 操作ログとともに、主題2.13の全出題範囲を体系的に解説します。

実機検証環境
ホストOS
AlmaLinux 9.8 (Kernel 5.14.0-503.40.1.el9_5.x86_64)
ホスト名 / IP
linuc-node01 / 192.168.2.138
クラスタリソース管理(CRM)
Pacemaker 2.1.10
メッセージング層(CLM)
Corosync Cluster Engine 3.1.10 (Totemプロトコル)
クラスタ統合設定ツール
pcs 0.11.11
ブロックレプリケーション
DRBD (Distributed Replicated Block Device)
本記事の学習スコープと位置づけ
公式試験の必須出題範囲 主題2.13.1(高可用システム・Pacemaker/Corosync・STONITH)、主題2.13.2(キャパシティ計画)、主題2.13.3(クラウドIaaS)、主題2.13.4(Web3層モデル)
現場で役立つ実務拡張 DRBD(Distributed Replicated Block Device)によるリアルタイムブロックデバイス同期(Protocol A/B/C)
目次
  1. 1. 高可用性(HA)クラスタの基礎概念と構成モデル
    1. 1.1 可用性の指標(SPOFの排除と稼働率99.999%)
    2. 1.2 HAクラスタのソフトウェアスタック
  2. 2. クォーラム(Quorum: 定足数)とスプリットブレインの恐怖
    1. 2.1 クォーラムの計算ルールと過半数合意メカニズム
    2. 2.2 スプリットブレイン(Split-Brain)の発生原因とデータ破壊
    3. 2.3 フェンシング機構(STONITH)の絶対的役割
  3. 3. PacemakerとCorosyncの基本設定と実機リソース制御
    1. 3.1 corosync.conf のネットワークインターコネクト定義
    2. 3.2 pcs コマンドによるクラスタ操作実機ログ
    3. 3.3 リソースエージェント(RA)の規格(OCF, systemd, service)
    4. 3.4 3大制約(location, colocation, order)の設計
  4. 4. 共有ストレージ同期とデータ整合性(実務拡張:DRBD)
    1. 4.1 DRBD(Distributed Replicated Block Device)の動作原理
    2. 4.2 DRBDの3大同期プロトコル(Protocol A, B, C)
    3. 4.3 クラスタファイルシステム(GFS2, OCFS2)の概要
  5. 5. キャパシティプランニングとクラウド上のシステム構成
    1. 5.1 スケールアップ vs スケールアウトの設計判断
    2. 5.2 ステートレス設計とセッション情報の外出し
    3. 5.3 クラウドサービス(IaaS)上のシステム設計
  6. 6. 典型的なシステムアーキテクチャ(Web3層モデルと非同期処理)
    1. 6.1 Web3層アーキテクチャの役割分担
    2. 6.2 非同期処理とメッセージキュー(疎結合化)
  7. 7. LinuC 202試験(主題2.13)重要ポイント総整理
    1. 7.1 記述式(コマ問)頻出コマンド・設定ディレクティブ一覧
    2. 7.2 STONITH無効化(stonith-enabled=false)の試験的意味
    3. 7.3 DRBD同期プロトコルA/B/Cの判定盲点(実務拡張)
  8. 8. 202試験総括:ネットワークサービスと堅牢インフラ運用の体系的完了

1. 高可用性(HA)クラスタの基礎概念と構成モデル

エンタープライズインフラにおいて、システム停止は直接的なビジネス損失をもたらします。高可用性(HA: High Availability)クラスタとは、冗長化された複数のノード(サーバー)がハートビート通信によって互いの健全性を監視し合い、障害発生時に自動的にサービスを引き継ぐ(フェイルオーバーする)分散システム技術です。

HAクラスタの階層アーキテクチャとクォーラム合意

図1: HAクラスタの階層アーキテクチャとクォーラム合意

1.1 可用性の指標(SPOFの排除と稼働率99.999%)

高可用性を定量的に評価する指標として、以下の概念がLinuC試験および実務設計で頻出します。

  • MTBF(Mean Time Between Failures: 平均故障間隔): システムが故障してから次の故障が発生するまでの平均稼働時間です。この値が大きいほど信頼性が高いことを示します。
  • MTTR(Mean Time To Repair: 平均修復時間): 故障が発生してから復旧・修理が完了するまでの平均時間です。フェイルオーバーの自動化によってMTTRを極小化することがHAクラスタの主目的です。
  • 稼働率(Availability): システムが正常に稼働している時間の割合を表し、計算式は 稼働率 = MTBF / (MTBF + MTTR) です。年間停止時間が約5分以内となる「ファイブナイン(99.999%)」がエンタープライズ基幹系の目標指標となります。
  • SPOF(Single Point of Failure: 単一障害点): そこが1箇所でも停止するとシステム全体が停止してしまう構成要素のことです。電源、ネットワークスイッチ、ストレージ、NIC、サーバー本体などを多重化し、SPOFをゼロにすることがクラスタ設計の原則です。

HAクラスタの構成方式には、主に以下の2種類が存在します。

構成方式 稼働形態 メリット 考慮点・注意点
アクティブ / スタンバイ(Active/Passive) 片方のノード(Active)が本番サービスを提供し、もう一方(Standby)は待機 構成がシンプルでデータの整合性担保が容易。フェイルオーバー時の負荷変動がない 待機系のハードウェアリソースが通常時は遊休資産となる(コスト面)
アクティブ / アクティブ(Active/Active) すべてのノードが同時に負荷分散しながらサービスを提供 リソース利用効率が高く、全体スループットが向上する 共有ストレージの同時書き込み制御(DLMやクラスタファイルシステム)が必須で構成が高度化

1.2 HAクラスタのソフトウェアスタック

モダンなLinux HAクラスタは、役割ごとに責任が分離された多層アーキテクチャで構成されています。Linux-HAプロジェクトおよびクラスタスタックの階層構造は下表の通りです。

レイヤー 主要ソフトウェア 役割と機能
クラスタ管理UI / CLI pcs, crmsh 管理者向けのコマンドラインインターフェース。クラスタ作成、リソース追加、設定変更、状態監視を一元的に実行する
クラスタリソースマネージャー(CRM) Pacemaker クラスタ全体の頭脳。クラスタ設定情報(CIB: Cluster Information Base)を同期保持し、ポリシーエンジン(PE)で最適な配置を計算して各ノードのローカルリソースマネージャー(LRM)へ指示を出す
メッセージング・メンバーシップ(CLM) Corosync (Totem) ノード間のネットワーク通信基盤。ハートビートパケットを高頻度で送受信し、生存ノードの合意形成(メンバーシップ管理)とクォーラム判定を提供する
フェンシング層 stonithd (fence-agents) 異常ノードをクラスタから物理的に切り離す。IPMIや電源タップ(PDU)経由で強制電源リセットを実行する
リソースエージェント(RA) OCF, systemd, LSBスクリプト 仮想IP(IPaddr2)やWebサーバー(httpd)など、具体的なサービスを起動・停止・監視(status/monitor)する実行プラグイン

2. クォーラム(Quorum: 定足数)とスプリットブレインの恐怖

クラスタ運用において最も避けるべき事態は「データの破損」です。サービスが一時的に停止することよりも、共有ディスクの内容が不整合を起こして破壊されることの方が致命的です。

2.1 クォーラムの計算ルールと過半数合意メカニズム

クォーラム(Quorum: 定足数) とは、分散ノード間で合意を形成し、クラスタとして健全に意思決定を行える「過半数(Majority)」の票数のことです。

ノード総数を N としたとき、クォーラムが成立するために必要な生存ノード数 Q は以下の計算式で定義されます。

クォーラム成立条件式

必要な票数 = floor(総ノード数 / 2) + 1

(例: 3ノード構成では floor(3/2) + 1 = 2票、5ノード構成では floor(5/2) + 1 = 3票 が必要)

ノード数が奇数の場合、ネットワークがどこで分断されても、必ずどちらか一方のグループだけが過半数を獲得できます。過半数を獲得した側(Quorate側)だけがサービスを継続し、過半数を失った側(Inquorate側)は自らサービスを停止(または凍結)することで、安全性を担保します。

しかし、小規模システムで一般的な 2ノードクラスタ(2-node cluster) の場合、クォーラム必要数は floor(2/2) + 1 = 2票 となります。つまり、相手ノードと通信できなくなった瞬間、残された1台は「1票しか持たないためクォーラムを喪失」し、デフォルトの挙動ではサービスを即座に停止してしまいます。これを解決するため、以下の手法が採用されます。

  • QDevice(Quorum Device) / タイブレーカー: 第3のホスト(軽量なLinuxサーバー等)に corosync-qnetd を常駐させ、2ノード間の投票が同数(1対1)になった際の仲裁票(タイブレーク)を与える方式です。
  • no-quorum-policyの設定: 実験環境や小規模環境において、クォーラム喪失時の動作を明示的に変更します。設定可能なポリシーには stop(デフォルト。リソース全停止)、ignore(クォーラムを無視して単独稼働継続)、freeze(状態を凍結)、suicide(自ノードを強制再起動)があります。2ノード環境でタイブレーカーを置かない場合は no-quorum-policy=ignore を設定することが試験でも頻出します。

2.2 スプリットブレイン(Split-Brain)の発生原因とデータ破壊

スプリットブレイン(Split-Brain) とは、ノード間のインターコネクトネットワークが切断された際、互いのハートビートが届かなくなり、双方が「相手ノードがダウンした」と誤認して同時にプライマリへ昇格してしまう現象です。

もし双方が同時に同じ仮想IPアドレス(VIP)を名乗り、同一の共有ディスク(共有ストレージやDRBDボリューム)に対して同時に書き込みを実行した場合、ファイルシステムのメタデータは瞬時に破綻し、復旧不可能なデータ破損が発生します。

2.3 フェンシング機構(STONITH)の絶対的役割

スプリットブレインによるデータ破損を物理的に阻止する最終防衛線が STONITH(Shoot The Other Node In The Head) です。直訳すると「相手ノードの頭を撃ち抜け」という過激な名称の通り、応答が途絶えた相手ノードに対して、ハードウェア管理機構を介して 強制的な電源断(Power Off)またはハードウェアリセット(Reboot) を実行します。

STONITHの原則:相手を確実に殺してから引き継ぐ

フェイルオーバー処理において、新系がサービスを引き継いで共有ストレージをマウントする前に、旧系ノードの電源が完全に切れた(あるいはリセットされた)ことをハードウェアレベルで確認します。旧系が生きて暴走している可能性を完全に断ち切るため、高可用性システムの本番運用ではSTONITHの導入が絶対条件となります。

STONITHを実現するデバイス(フェンスエージェント)には以下のような種別が存在します。

  • BMC / IPMIエージェント(fence_ipmilan: サーバーのマザーボードに組み込まれた管理チップ(Dell iDRAC, HPE iLO, 汎用IPMI)のLANインターフェース経由で電源リセットを指令します。
  • PDU(Power Distribution Unit)エージェント: ネットワーク経由で操作可能なインテリジェント電源タップのポートを遮断し、対象ノードへの電力供給を強制停止します。
  • 仮想化環境エージェント(fence_xvm, fence_virsh: KVMホストのlibvirtハイパーバイザーに対して、対象仮想マシンの強制電源OFFを指令します。

3. PacemakerとCorosyncの基本設定と実機リソース制御

クラスタの実際の構築と運用では、ネットワーク通信を司る Corosync の構成ファイルと、クラスタリソースを統合制御する pcs コマンドの操作手順を把握する必要があります。

3.1 corosync.conf のネットワークインターコネクト定義

Corosyncの設定は /etc/corosync/corosync.conf に集約されています。このファイルは全クラスタノード間で完全に同一の内容で保持される必要があります。主要な設定ブロックとディレクティブの意味は下表の通りです。

/etc/corosync/corosync.conf の主要構成例

totem {
    version: 2
    cluster_name: my_ha_cluster
    transport: knet
    crypto_cipher: aes256
    crypto_hash: sha256
}

nodelist {
    node {
        ring0_addr: 192.168.2.138
        name: linuc-node01
        nodeid: 1
    }
    node {
        ring0_addr: 192.168.2.139
        name: linuc-node02
        nodeid: 2
    }
}

quorum {
    provider: corosync_votequorum
    two_node: 1
}

logging {
    to_logfile: yes
    logfile: /var/log/cluster/corosync.log
    to_syslog: yes
    timestamp: on
}

設定ファイル内の各ディレクティブには以下の役割があります。

  • totemブロック: クラスタノード間のトークンパッシングおよびハートビート通信の暗号化プロトコル(Totem)を定義します。RHEL/CentOS/AlmaLinux 8以降では transport: knet(Kronosnet)が標準となり、マルチリンク冗長化に対応しています。暗号化アルゴリズムには aes256、改ざん検知には sha256 が一般的に指定されます。
  • nodelistブロック: クラスタを構成する各ノードのホスト名、リング通信用IPアドレス(ring0_addr)、および一意の nodeid を定義します。
  • quorumブロック: クォーラム計算プロバイダとして corosync_votequorum を指定します。2台構成のクラスタでは two_node: 1 を有効化することで、2ノード特有のクォーラム処理ルールを適用します。
  • loggingブロック: クラスタエンジンのログ出力先(/var/log/cluster/corosync.log)やsyslog転送設定を記述します。

3.2 pcs コマンドによるクラスタ操作実機ログ

Red Hat系ディストリビューションでは、クラスタ設定を手動でXML編集するのではなく、ラッパーCLIツールである pcs(Pacemaker/Corosync Configuration System) を介して操作します。

実機環境(AlmaLinux 9.8)におけるインストール済みパッケージと利用可能なリソース規格を確認した結果が以下です。

bash – 実機環境におけるパッケージとリソース規格の確認

[user01@linuc-node01 ~]$ pcs --version; pacemakerd --version; corosync -v
0.11.11
Pacemaker 2.1.10-3.el9_8
Written by Andrew Beekhof and the Pacemaker project contributors
Corosync Cluster Engine, version '3.1.10'
Copyright (c) 2006-2021 Red Hat, Inc.

Built-in features: dbus systemd xmlconf vqsim nozzle snmp pie relro bindnow
Available crypto models: nss openssl
Available compression models: zlib lz4 lz4hc lzo2 lzma bzip2 zstd

[user01@linuc-node01 ~]$ pcs resource standards
lsb
ocf
service
systemd

[user01@linuc-node01 ~]$ pcs resource providers
heartbeat
openstack
pacemaker

[user01@linuc-node01 ~]$ pcs resource agents ocf:heartbeat | grep -E 'IPaddr|apache'
apache
IPaddr2

新規にクラスタを立ち上げる際の一連の標準コマンドフローは以下のステップで実行されます。

  1. クラスタ管理ユーザーのパスワード設定と認証
    全ノードで hacluster ユーザーのパスワードを設定し、pcs host auth linuc-node01 linuc-node02 -u hacluster を実行してノード間の相互通信トークンを交換します。
  2. クラスタの作成と初期同期
    pcs cluster setup my_ha_cluster linuc-node01 linuc-node02 を実行します。Corosyncの構成ファイルが自動生成され、両ノードに同期配信されます。
  3. クラスタデーモンの起動と自動起動有効化
    pcs cluster start --all でCorosyncおよびPacemakerを一括起動し、pcs cluster enable --all でOS起動時の自動起動を有効化します。
  4. 稼働状態の確認(pcs status)
    pcs status または crm_mon -1 を実行し、全ノードがOnlineであること、およびQuorumが正常に保持されていることを確認します。

3.3 リソースエージェント(RA)の規格(OCF, systemd, service)

Pacemakerが各種サービスを制御する際、仲介役となるスクリプト群を リソースエージェント(RA: Resource Agent) と呼びます。RAは以下の命名規則で指定します。

リソースエージェントの構文指定フォーマット

標準規格:プロバイダー:エージェント名

(例: ocf:heartbeat:IPaddr2systemd:httpd

代表的な規格には以下のものがあります。

  • OCF(Open Cluster Framework): クラスタ専用に設計された高度な規格です。start, stop だけでなく、定期的なヘルスチェックを行う monitor アクションを備え、詳細な戻り値(Exit Code)によってプロセスのハングアップを検出できます。
  • systemd: OS標準のsystemdユニット(.service)をそのままクラスタリソースとして起動・停止・監視します。
  • LSB(Linux Standard Base): /etc/init.d/ 配下の従来のSysVinitスクリプトを利用する規格です。

試験で最も頻出する 仮想IPアドレス(VIP: Virtual IP) およびWebサービスのリソース追加コマンド例は以下の通りです。

bash – pcsによる仮想IPリソースおよびWebサーバーリソースの登録

# 仮想IPアドレス(192.168.2.200/24)を10秒間隔で監視するリソースとして作成
[user01@linuc-node01 ~]$ sudo pcs resource create VirtualIP ocf:heartbeat:IPaddr2 \
    ip=192.168.2.200 cidr_netmask=24 op monitor interval=10s

# 第11回で構築したApache Webサーバーを15秒間隔で監視するリソースとして作成
[user01@linuc-node01 ~]$ sudo pcs resource create WebServer systemd:httpd \
    op monitor interval=15s

3.4 3大制約(location, colocation, order)の設計

Pacemakerにリソースを登録しただけでは、各ノードのCPU負荷やネットワーク構成に応じた配置ルールが定まりません。クラスタの動作ポリシーを厳密に定義するため、Pacemakerでは以下の 3大制約(Constraints) を設定します。

制約の種類 目的と役割 設定コマンド例(pcs)
location 制約(配置先) 特定のリソースをどのノードで優先的に稼働させるかをスコア(優先度)で決定する pcs constraint location WebServer prefers linuc-node01=50
colocation 制約(同居 / 排他) 2つのリソースを「同一ノードで同居させる」か「別ノードに分離させる」かを決定する pcs constraint colocation add WebServer with VirtualIP INFINITY
order 制約(順序性) リソース間の起動・停止の前後関係(依存順序)を決定する pcs constraint order VirtualIP then WebServer

上記の設定例では、colocation ... INFINITY によって「WebServerは必ずVirtualIPが稼働しているノードと同じノードで動く」ように束縛され、order ... then によって「VirtualIPが正常に割り当てられた後でWebServerが起動する(停止時は逆順)」という厳密な依存関係が確立されます。

4. 共有ストレージ同期とデータ整合性(実務拡張:DRBD)

HAクラスタでステートフルなWebアプリケーションやデータベースをフェイルオーバーさせる場合、系切り替え先ノードでも最新のデータが参照できなければなりません。外部の共有ストレージ(SAN/NAS)を導入せずにサーバー内蔵ディスクだけでデータ冗長化を実現する代表的なソフトウェアが DRBD(Distributed Replicated Block Device) です。主題2.13の公式明記範囲外ですが、現場のLinuxクラスタ運用ではPacemakerと組み合わせて極めて頻出の実務必須技術です。

DRBDのブロックレプリケーションと同期プロトコルA/B/C

図2: DRBDのブロックレプリケーションと同期プロトコルA/B/C

4.1 DRBD(Distributed Replicated Block Device)の動作原理

DRBDはLinuxカーネルモジュールとして動作し、TCP/IPネットワークを介して2台のホスト間でブロックデバイスをリアルタイムに二重化します。物理的には各ノードの内蔵ディスク(例: /dev/sdb1)を使用しながら、上位のファイルシステムやアプリケーションに対しては仮想的な単一のブロックデバイス(例: /dev/drbd0)として透過的に見せかけます。いわば 「ネットワーク経由のソフトウェアRAID 1」 です。

DRBDノードは通常、以下の役割分担で運用されます。

  • Primaryノード: 読み書き(Read/Write)が許可されたノードです。ファイルシステムをマウントしてサービスを提供します。アクティブ/スタンバイ構成では常に1台のみがPrimaryとなります。
  • Secondaryノード: Primaryからの更新ブロックを受信・書き込みのみ行う複製待機ノードです。データ保護のため、通常のファイルシステム直接マウントは禁止されています。

4.2 DRBDの3大同期プロトコル(Protocol A, B, C)

DRBDを実務で設計・運用するうえで最も重要なポイントとなるのが、更新書き込み完了通知(ACK)のタイミングを定義する 3つのレプリケーションプロトコル(Protocol A, B, C) の差異です。

プロトコル 同期方式 ACK(完了応答)のタイミング 耐障害性と適用ユースケース
Protocol A 非同期(Asynchronous) ローカルディスクへの書き込みが完了し、かつネットワーク送信バッファに書き込み要求が格納された時点でアプリケーションへACKを返す 性能最優先。長距離WAN越しのリモートディザスタリカバリ(DR)拠点への複製に用いる。Primaryが突発停止した場合に最新トランザクションが失われるリスクがある
Protocol B 準同期(Memory-synchronous) ローカルディスクへの書き込みが完了し、かつ相手側ノードのメモリ(ネットワーク受信バッファ)にデータが到着した時点でACKを返す 中間的特性。相手ノードの物理ディスクへのフラッシュ完了は待たない。相手ノードの全電源喪失と自ノードの故障が同時に起きない限りデータは保全される
Protocol C 完全同期(Synchronous) ローカルディスクと相手側ノードの物理ディスクの双方で書き込みが完全に完了した時点で初めてACKを返す 整合性絶対保証。LAN内のHAクラスタにおける標準設定。ネットワーク遅延がI/Oスループットに直結するが、Primary故障時にもデータ欠損が完全にゼロとなる

DRBDの設定ファイル(/etc/drbd.conf または /etc/drbd.d/*.res)内では、リソース定義の net ブロックにおいて protocol C; のように指定します。

4.3 クラスタファイルシステム(GFS2, OCFS2)の概要

DRBDをアクティブ/アクティブ構成(Dual-Primaryモード)で使用し、両ノードから同一のブロックデバイスを同時にマウントして読み書きする場合、ext4やXFSなどの通常ファイルシステムを使用するとメタデータ競合によってディスクが破損します。

そのため、複数ノードからの同時並行アクセスを調停できる クラスタファイルシステム の採用が必須となります。

  • GFS2(Global File System 2): Red Hat系で標準的な共有ストレージ用分散ファイルシステムです。
  • OCFS2(Oracle Cluster File System 2): Oracle Linuxや汎用Linuxで広く使われるクラスタファイルシステムです。
  • DLM(Distributed Lock Manager: 分散ロックマネージャ): どのノードがどのファイルブロックやinodeを占有・排他制御しているかをネットワーク経由で高速に同期合意するミドルウェアです。クラスタファイルシステムを正常に動作させる中核基盤となります。

5. キャパシティプランニングとクラウド上のシステム構成

高可用性システムを長期にわたり安定運用するためには、トラフィック増加に耐えうるキャパシティ設計と、クラウド基盤の特性を活かした柔軟なリソース配置が不可欠です。

5.1 スケールアップ vs スケールアウトの設計判断

システムの処理能力を拡張するアプローチには、大きく分けて以下の2通りが存在します。LinuC試験では両者の特徴とトレードオフが頻出します。

拡張方式 拡張手法 メリット デメリット・制約
スケールアップ(垂直拡張) 既存サーバーのCPU、メモリ、SSDなどのスペックを増強する 構成変更が不要でソフトウェアの改修が一切不要。単一ノードで整合性が完結する ハードウェアの上限(天井)がある。ハードウェア故障時の影響が大きく、パーツ交換時の停止を伴う
スケールアウト(水平拡張) 同等のサーバーを複数台並列に追加し、負荷分散(ロードバランシング)する 理論上無制限に拡張可能。1台が故障しても他ノードで縮退運転可能(SPOF排除) サーバー間のセッション共有(ステートレス化)や分散DBの整合性維持など、高度なアーキテクチャ設計が必要

5.2 ステートレス設計とセッション情報の外出し

Webサーバーを安全にスケールアウトするための絶対条件が ステートレス化(Stateless) です。各Webサーバーがユーザーのログインセッション情報をローカルメモリに保持している場合、ロードバランサーが別サーバーへリクエストを振り分けるとセッションが途切れてしまいます。

  • セッション外出し: セッション情報や一時データを、Webサーバー群の外部にある高速なインメモリKVS(RedisMemcached)に集約して共有します。これにより、Webサーバーはどのノードがいつ追加・削除されても安全に同一のセッションを処理できます。
  • DNSラウンドロビンとその限界: 1つのドメイン名に複数のIPアドレスを登録して順番に名前解決するDNSラウンドロビンは、最も安価な負荷分散手法ですが、「サーバーダウン時に自動で障害ノードを外せない(ヘルスチェック不可)」「クライアント側のDNSキャッシュにより負荷が偏る」という重大な欠点があります。商用環境ではL4/L7ロードバランサーの併用が必須です。

5.3 クラウドサービス(IaaS)上のシステム設計

AWSやAzure、GCPなどのクラウド環境におけるLinux運用では、オンプレミスと異なる以下のクラウド固有概念が出題されます。

クラウド概念 機能と設計上の注意点
永続化ストレージ vs エフェメラル 仮想マシン停止・終了後もデータが保持されるネットワーク型ブロックストレージ(EBS等)に対し、インスタンスの停止でデータが完全に消滅する高速ローカルディスク(エフェメラル/インスタンスストア)が存在する。データベースや重要データは必ず永続化ストレージに配置する。
セキュリティグループ 仮想サーバー単位で適用されるステートフルな仮想ファイアウォール。OS内部のnftables/firewalldと連動して多層防御を構成する。
オートスケーリングとマルチAZ CPU使用率やリクエスト数に応じてサーバー台数を自動増減させる。物理的に独立した複数のデータセンター(Availability Zone: AZ)にまたがってノードを分散配置することで、データセンター全体の停電や被災時にも無停止運用を実現する。

6. 典型的なシステムアーキテクチャ(Web3層モデルと非同期処理)

LinuC 202試験の主題2.13.4では、企業向けシステムで最も広く採用されている基本アーキテクチャの構造が出題されます。

6.1 Web3層アーキテクチャの役割分担

システムを機能ごとに独立した3つの論理層に分離し、保守性とスケーラビリティを高めたモデルが Web3層モデル です。

階層名 主なソフトウェア 担当役割と負荷分散
第1層:プレゼンテーション層(Web層) Nginx, Apache httpd, ロードバランサー クライアントからのHTTP/HTTPSリクエスト受付、TLS暗号化終端、静的コンテンツ配信、リバースプロキシによるAP層への転送。ステートレス化が容易で最もスケールアウトしやすい層。
第2層:アプリケーション層(AP層) PHP-FPM, Tomcat (Java), Node.js, Python/Gunicorn ビジネスロジックの実行、セッション管理、動的コンテンツ生成、DBクエリ発行。CPUバウンドな処理が集中する。
第3層:データベース層(DB層) PostgreSQL, MySQL / MariaDB, Redis データの永続化とトランザクション保証。プライマリ(書き込み)とレプリカ(読み取り)の分離(リードレプリカ)や、共有ストレージHAクラスタにより可用性を担保。

6.2 非同期処理とメッセージキュー(疎結合化)

大量のリクエストが集中した際、メール送信や画像変換、PDF出力などの重い処理を同期的に実行するとWeb層全体がハングアップします。これを防ぐため、メッセージキュー(RabbitMQ, Apache Kafka等) を介して処理要求をキューイングし、バックグラウンドのワーカープロセスが非同期に順次処理を行う 「疎結合(Loosely Coupled)アーキテクチャ」 が採用されます。

7. LinuC 202試験(主題2.13)重要ポイント総整理

LinuC 202試験の主題2.13「高可用性(HA)クラスタ」において、合否を分ける重要コマンド・設定ファイル・プロトコルの要点を総整理します。

7.1 記述式(コマ問)頻出コマンド・設定ディレクティブ一覧

記述式問題では、コマンドの正確なスペルや設定ファイルのフルパス、パラメータ名の入力が求められます。下表の項目は確実に記憶しておく必要があります。

分類 コマンド / パス / キーワード 機能・用途と出題パターン
キャパシティ スケールアップ vs スケールアウト 垂直拡張(単一スペック増強)と水平拡張(並列台数追加・ステートレス化)
アーキテクチャ Web3層モデル Web層(プレゼンテーション)、AP層(ロジック)、DB層(データ永続化)の3層分離
クラウドストレージ 永続化 vs エフェメラル インスタンス停止でデータ消滅する一時ストレージ(エフェメラル)の扱い
設定ファイル /etc/corosync/corosync.conf Corosyncの主設定ファイル。totem, nodelist, quorum セクションの構造が出題される
設定ファイル /etc/drbd.conf / /etc/drbd.d/*.res DRBDのリソース定義ファイル。protocol A|B|C;disk, device, meta-disk の記述
状態確認 pcs status / crm_mon クラスタのノード状態(Online/Offline)、クォーラム有無、リソース稼働状況を監視するコマンド
状態確認 /proc/drbd / drbdadm status DRBDのレプリケーション同期状態、接続状態(Connected)、ロール(Primary/Secondary)を確認する
クラスタ制御 pcs cluster setup / start / stop クラスタの新規構築、デーモン起動、停止を行う基本コマンド
リソース制御 pcs resource create / delete リソースエージェント(IPaddr2 等)をクラスタに追加・削除するコマンド
制約設定 pcs constraint location|colocation|order リソースの配置ノード、同居関係、起動順序を定義するコマンド
DRBD管理(実務拡張) drbdadm up / primary / secondary DRBDリソースのアクティベーションやロール昇格・降格を手動制御するコマンド

7.2 STONITH無効化(stonith-enabled=false)の試験的意味

Pacemakerのデフォルト設定では、データ安全性を最優先するため STONITHが有効(stonith-enabled=true になっています。そのため、フェンスデバイス(IPMI等)が登録されていない場合、Pacemakerはクラスタが危険な状態にあると判断し、いかなるリソースも起動しません。

LinuCのラボ試験や検証環境において、フェンスデバイスが存在しない状況で暫定的にリソースを動作させるために実行する必須コマンドが以下です。

bash – 検証環境におけるSTONITH一時無効化コマンド

[user01@linuc-node01 ~]$ sudo pcs property set stonith-enabled=false

試験では「検証環境でリソースが起動しない原因」や「フェンスデバイスなしでリソースを起動するためのクラスタプロパティ名」として stonith-enabled が頻出します。ただし、前述の通り本番環境でこの設定を行うとスプリットブレイン発生時にデータ破損を防止できないため、商用環境では設定禁止です。

7.3 DRBD同期プロトコルA/B/Cの判定盲点(実務拡張)

DRBDの同期プロトコル選定では、インフラ要件(ネットワーク遅延とデータ整合性の優先度)から最適なプロトコルを判断することが重要です。以下の判断基準を押さえておきましょう。

  • 「遠隔地(WAN)へのディザスタリカバリ」「ネットワーク遅延の影響を最小限に抑えたい」「多少のデータ損失が許容される」Protocol A(非同期)
  • 「半同期」「リモートノードのRAMへの書き込み完了でACK」「物理ディスクへの書き込みは待たない」Protocol B(準同期・メモリ同期)
  • 「同一データセンター内(LAN)」「障害時にも直前のコミットデータ損失を絶対に許容しない」「HAクラスタの一般的な推奨」Protocol C(完全同期)

8. 202試験総括:ネットワークサービスと堅牢インフラ運用の体系的完了

第9回から開始したLinuC 202試験対策は、本第16回をもって出題技術範囲のすべてを完了しました。

回数 出題主題 習得した実践コア技術
第9回 2.07 ネットワーククライアントの管理 PAM認証スタック(auth/account/password/session)とOpenLDAPディレクトリ基盤(DIT、slapd)
第10回 2.08 ドメインネームサーバー BINDによる権威/キャッシュDNS構築、ゾーン転送制御(TSIG)、DNSSEC、rndcコマンド運用
第11回 2.09 Webサービスとプロキシ(Apache / HTTPS) Apache httpdのバーチャルホスト、mod_sslによるTLS暗号化、アクセス制御(Requireディレクティブ)
第12回 2.09 Webサービスとプロキシ(Nginx / Squid) Nginxリバースプロキシによる負荷分散、SquidプロキシによるキャッシュとACLアクセス制限
第13回 2.10 電子メールサービス PostfixによるセキュアMTA構築(SMTP AUTH/STARTTLS)、DovecotによるIMAP/POP3運用
第14回 2.11 ファイル共有サービス SambaによるWindowsファイル共有・AD連携、NFSv4による分散ストレージ運用とRPC制御
第15回 2.12 システムセキュリティ OpenSSHサーバー堅牢化(重要度4)、Netfilter(nftables/iptables)、AIDE改ざん検知、VPNトンネル
第16回(今回) 2.13 高可用性(HA)クラスタ Pacemaker/Corosyncによるリソース制御、クォーラム合意、STONITH強制遮断、DRBDデータ同期

これらの技術要素は独立して存在するのではなく、例えば「DRBDとPacemakerで同期された冗長ストレージ上にSambaやNFSを展開し、OpenLDAPとPAMで集中認証を行い、外縁部をnftablesとVPNで防護する」といったように、実務の大規模エンタープライズインフラにおいて緊密に連携して稼働しています。

次回予告:シリーズ最終回(第17回)

次回は本連載の集大成となる 第17回:201・202試験 直前総まとめ&記述式コマ問完全マスター をお届けします。201試験(カーネル・高度ストレージ・Ansible・KVM・Docker)から202試験(各種ネットワークサービス・セキュリティ・HAクラスタ)までの全範囲を横断し、試験本番で合否を決定づける「重要記述式コマンド・設定ファイルパス・重要オプション」を完全総整理します。

前の記事
次の記事