1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

― ロードバランシング 3 方式+フェイルオーバークラスタ入門 ―

1
Posted at

こんにちは、Webアプリ開発を3年行っています。
また、オンプレのサーバー管理も行っています。

本記事では「サーバーロードバランス」と「フェイルオーバークラスタ」の代表的な構成を、メリット/デメリットとあわせてまとめます。試験対策のメモや現場ノウハウを整理したものなので、インフラ初学者~中級者の復習に使ってください

1. なぜロードバランシングが必要か

アクセス集中への対策

1 台構成では CPU・メモリ・I/O がボトルネックになりがち

可用性(サービス停止リスク)の低減

障害発生時に “もう 1 台” へ逃がす仕組みがあると MTTR¹ を縮小できる

拡張性・柔軟性

キャパシティ計画が立てやすく、段階的なスケールアウトが可能

¹ Mean Time To Recovery:平均復旧時間

  1. 代表的なロードバランス方式
方式 概要 主要メリット 主なデメリット
DNS ラウンドロビン 1 つの FQDN に複数の A/AAAA レコードを設定し、DNS で応答 IP をランダム返却 ・低コスト(DNS のみ)
・導入が簡単
・死活監視不可 → 障害サーバーへもトラフィック
・負荷ベースの振り分け不可
・キャッシュ TTL により切替にラグ
ハード/ソフトロードバランサ L4/L7 スイッチや LVS・nginx などがフロントに立ち、バックエンドを監視して振り分け ・充実したヘルスチェック
・多彩なアルゴリズム(RR・LeastConn 等)
・SSL 終端や HTTP/2, gRPC などの付加機能
・機器/ソフトの導入・設定コスト
・LB 自体が SPOF ⇒ 冗長化必須
Virtual IP (VIP) 方式 各ノードが同じ仮想 IP を共有し、自律的に ARP を制御(Keepalived など) ・専用機器不要でコスパ◎
・双方向監視で障害ノードを自動切離し
・全ノードに監視デーモン導入が必要
・心拍/負荷情報交換でネットワーク負荷増
  • 導入が簡単 - 死活監視不可 → 障害サーバーへもトラフィック
  • 負荷ベースの振り分け不可
  • キャッシュの TTL で切替にラグ
    ハード/ソフトロードバランサ L4/L7 スイッチや LVS・nginx などがフロントに立ち、バックエンドを監視して振り分け - 充実したヘルスチェック
  • 多彩なアルゴリズム(RR・LeastConn 等)
  • SSL 終端や HTTP/2, gRPC 等の付加機能 - 機器/ソフトの導入・設定コスト
  • LB 自体が SPOF² → 冗長化必須
    Virtual IP (VIP) 方式 各ノードが同じ仮想 IP を共有し、自律的に ARP を制御(Keepalived 等) - 専用機器不要でコスパ◎
  • 双方向監視で障害ノードを自動切離し - すべてのノードに監視デーモン導入が必要
  • 心拍/負荷情報の交換でネットワーク負荷増

² Single Point of Failure:単一障害点

2.1 DNS ラウンドロビン実装例

txt
example.com. 300 IN A 203.0.113.10
example.com. 300 IN A 203.0.113.11

TTL を短めにしておくと切替ラグを多少緩和できますが、完全なフェイルオーバはできません。

2.2 Keepalived(VIP 方式)のイメージ

conf
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  virtual_ipaddress {
    192.0.2.100/24
  }
  track_script {
    chk_nginx
  }
}

track_script でアプリのヘルスチェックを行い、失敗時に優先度を下げてフェイルオーバします。

3. フェイルオーバークラスタ(高可用性)

ロードバランサは リクエスト分散、クラスタは サービス継続 が目的という違いがあります。ここでは 2 ノード構成を想定します。

3.1 ディスク配置モデル

以下を Qiita の Markdown テーブル形式 に変換しました。前回と同じスタイルで改行に <br> を使用しています。

モデル データ保持 利用例 注意点
共有ディスク方式 両ノードが同一 SAN/LUN をマウント ・DB クラスタ
・ファイルサーバ
・SAN コスト
・ファイバ配線
ディスクミラー方式 各ノードがローカルディスクを相互同期 ・Hyper-V Replica
・DRBD
・ネットワーク帯域を圧迫

3.2 ノード構成

Active/Passive

通常は 1 台のみ稼働 → 障害時に待機系へ フェイルオーバ

Active/Active

双方が現役稼働 → 片系障害時は残りへトラフィック集中

どちらもクラスタリングソフト(Pacemaker, WSFC など)が心拍監視を行います。

4. 仮想化環境でのネットワークモード(おまけ)

モード 特徴 典型ユース
ブリッジ 仮想 NIC と物理 NIC が同一セグメント 本番 Web+DB
NAT ホスト OS がアドレス変換 社内検証環境
ホストオンリー ホストとゲストのみで閉じたネット ローカル実験

5. まとめ

スモールスタートなら DNS ラウンドロビン → 障害検知は別途考慮

可用性重視なら VIP or LB でヘルスチェック付き分散

性能+機能拡張が必要なら専用ロードバランサを冗長構成で導入

DB などステートフル領域は フェイルオーバークラスタで瞬断に備える

自分の案件や予算、障害許容度に応じて組み合わせることで、堅牢かつスケーラブルなインフラを実現できます。

参考リンク

Keepalived オフィシャル

NGINX Plus – 負荷分散機能一覧

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?