はじめに
前回の記事では、デュアルシステムやデュプレックスシステムなど、障害に備えるための構成を学びました。
しかし、実際のシステムでは、障害対策だけでなく処理性能の向上も重要です。
例えば、人気のネットショップを考えてみましょう。
普段は問題なく利用できても、大規模なセールが始まるとアクセスが急増します。
その結果、
- Webページの表示が遅くなる
- 商品検索に時間がかかる
- 注文処理が完了しない
- サーバに負荷が集中して停止する
といった問題が発生する可能性があります。
このような問題に対応する方法の一つが、複数のコンピュータを連携させることです。
複数台を組み合わせれば、障害に備えたり、大量の処理を分担したりできます。
今回は、次の技術を学びます。
高信頼性・高性能システム
│
├─ クラスタリングとクラスタシステム
│ │
│ ├─ HAクラスタ
│ │ └─ フェールオーバークラスタ
│ │
│ ├─ 負荷分散クラスタ
│ │
│ └─ リソースの共有方式
│ ├─ シェアードエブリシング
│ └─ シェアードナッシング
│
└─ グリッドコンピューティング
それでは、基本から理解していきましょう。
1. クラスタリングとは
1-1. クラスタリングの基本
**クラスタリング(Clustering)**とは、複数のコンピュータを連携させ、まとまったシステムとして動作させる技術です。
また、このように構成されたシステムを**クラスタシステム(Cluster System)**と呼びます。
Clusterには「集まり」「群れ」という意味があります。
例えば、3台のサーバを連携させる構成を考えてみましょう。
利用者
│
▼
┌─────────────────┐
│ クラスタシステム │
│ │
│ ┌─────────────┐ │
│ │ サーバA │ │
│ └─────────────┘ │
│ │
│ ┌─────────────┐ │
│ │ サーバB │ │
│ └─────────────┘ │
│ │
│ ┌─────────────┐ │
│ │ サーバC │ │
│ └─────────────┘ │
└─────────────────┘
利用者から見ると、複数のサーバが連携して一つのサービスを提供しています。
ただし、クラスタシステムは必ずしも一台のコンピュータのように見えるとは限りません。
どのように連携し、どの程度一体化して見えるかは、クラスタの種類や構成によって異なります。
1-2. クラスタリングの目的
クラスタリングには、大きく分けて2つの目的があります。
① 信頼性・可用性の向上
サーバが故障しても、別のサーバが処理を引き継げるようにします。
通常時
サーバA:稼働中
サーバB:待機中
↓
サーバAが故障
↓
サーバBが処理を引き継ぐ
このような構成は、主にサービス停止時間の短縮を目的としています。
② 処理性能の向上
複数のサーバに処理を分担させることで、全体の処理能力を高めます。
利用者
│
▼
負荷分散
│
┌─────────┼─────────┐
│ │ │
▼ ▼ ▼
サーバA サーバB サーバC
1台では処理しきれない要求を、複数台で分担します。
このように、クラスタリングには信頼性を高める目的と、性能を高める目的があることが重要です。
2. HAクラスタ
2-1. HAクラスタとは
**HAクラスタ(High Availability Cluster)**とは、システムの可用性を高めることを目的としたクラスタ構成です。
HAはHigh Availabilityの略で、日本語では高可用性と呼ばれます。
可用性とは、必要なときにシステムやサービスを利用できる性質のことです。
例えば、銀行のシステムや企業の基幹システムなどでは、長時間のサービス停止を避ける必要があります。
そこで、複数のサーバを連携させて障害に備えます。
2-2. HAクラスタの仕組み
代表的な構成の一つが、主系と待機系を用意する方式です。
利用者
│
▼
┌────────────┐
│ サーバA │
│ 主系 │
│ 稼働中 │
└──────┬─────┘
│
状態を監視
│
┌──────▼─────┐
│ サーバB │
│ 待機系 │
└────────────┘
サーバBはサーバAの状態を監視します。
サーバAに障害が発生した場合、サーバBが処理を引き継ぎます。
この仕組みによって、サービス停止時間の短縮を目指します。
ただし、HAクラスタを構築しても、必ず無停止になるわけではありません。
障害検知や切替処理に時間がかかる場合があります。
2-3. HAクラスタの特徴
HAクラスタの特徴は次のとおりです。
- 複数のサーバで障害に備える
- サーバの稼働状態を監視する
- 障害時に別のサーバへ処理を引き継ぐ
- サービス停止時間の短縮を目指す
HAクラスタでは、単にサーバを2台用意するだけでなく、障害を検知し、適切に切り替える仕組みが重要になります。
3. フェールオーバークラスタ
3-1. フェールオーバークラスタとは
**フェールオーバークラスタ(Failover Cluster)**とは、稼働中のサーバに障害が発生した場合、別のサーバへ処理を切り替えるクラスタ構成です。
HAクラスタを実現する代表的な方式の一つです。
前回の記事でも、フェールオーバーについて学びました。
フェールオーバーとは、障害時に待機系などへ処理を切り替えることでしたね。
フェールオーバークラスタでは、この仕組みをクラスタ全体で実現します。
3-2. フェールオーバークラスタの動作
通常時はサーバAが業務処理を行います。
【通常時】
利用者
│
▼
┌──────────┐
│ サーバA │
│ 稼働中 │
└──────────┘
┌──────────┐
│ サーバB │
│ 待機中 │
└──────────┘
サーバAが故障すると、クラスタの仕組みが障害を検知します。
【障害発生】
┌──────────┐
│ サーバA │
│ 故障! │
└──────────┘
│
▼
障害を検知
│
▼
┌──────────┐
│ サーバB │
│ 処理引継ぎ│
└──────────┘
その後、サーバBがサービスを提供します。
【切替後】
利用者
│
▼
┌──────────┐
│ サーバB │
│ 稼働中 │
└──────────┘
これにより、サーバAが故障してもサービスを継続・再開できます。
3-3. フェールオーバークラスタで重要な技術
フェールオーバークラスタでは、次の仕組みが重要になります。
① ヘルスチェック
**ヘルスチェック(Health Check)**とは、サーバやサービスが正常に動作しているかを確認することです。
例えば、一定間隔で応答を確認します。
監視サーバ
│
│ 応答確認
▼
サーバA
│
└─ 正常応答
応答がなくなった場合、障害の可能性があると判断します。
ただし、通信障害によって応答できないだけの場合もあるため、複数の情報から状態を判断することが重要です。
② ハートビート
**ハートビート(Heartbeat)**とは、クラスタを構成するサーバ間で定期的に状態を確認するための通信です。
サーバA ◀──────▶ サーバB
ハートビート
ハートビートが途絶えると、相手のサーバに障害が発生した可能性があります。
③ スプリットブレイン
**スプリットブレイン(Split Brain)**とは、クラスタ内の通信障害などによって、複数のサーバが自分を主系だと判断してしまう状態です。
例えば、次のような状況です。
サーバA サーバB
主系 待機系
│ │
└──── 通信断 ─────┘
│ │
▼ ▼
自分が主系! 自分が主系!
両方のサーバが同じデータへ書き込みを行うと、データの破損や不整合につながる可能性があります。
これを防ぐために、**クォーラム(Quorum)**による多数決や、**フェンシング(Fencing)**による異常系統の切り離しなどが利用されます。
🍯 フェールオーバークラスタでは「故障したら切り替える」だけでなく、「誤って両方が稼働しないようにする」ことも重要です。
4. 負荷分散クラスタ
4-1. 負荷分散クラスタとは
**負荷分散クラスタ(Load Balancing Cluster)**とは、複数のサーバに処理を振り分けることで、システム全体の処理能力や応答性を高めるクラスタ構成です。
例えば、Webサイトに大量のアクセスが発生した場合を考えてみましょう。
1台のWebサーバでは処理しきれなくなることがあります。
そこで、複数のWebサーバを用意します。
利用者
│
▼
┌─────────────────┐
│ ロードバランサ │
└────────┬────────┘
│
┌────────┼────────┐
│ │ │
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│Web A │ │Web B │ │Web C │
└──────┘ └──────┘ └──────┘
このように、利用者からの要求を複数のサーバへ分散します。
4-2. ロードバランサとは
**ロードバランサ(Load Balancer)**とは、複数のサーバへ処理を振り分ける装置やソフトウェアです。
例えば、利用者から100件のリクエストが届いたとします。
100件のリクエスト
│
▼
ロードバランサ
│
┌─────┼─────┐
│ │ │
▼ ▼ ▼
33件 33件 34件
│ │ │
▼ ▼ ▼
Web A Web B Web C
均等に振り分ければ、1台への負荷集中を軽減できます。
ただし、実際にはサーバの処理能力や現在の負荷に応じて振り分けることもあります。
4-3. 代表的な負荷分散方式
ロードバランサでは、さまざまな振り分け方式が利用されます。
① ラウンドロビン方式
**ラウンドロビン(Round Robin)**とは、サーバへ順番にリクエストを振り分ける方式です。
リクエスト1 → サーバA
リクエスト2 → サーバB
リクエスト3 → サーバC
リクエスト4 → サーバA
リクエスト5 → サーバB
仕組みがシンプルであることが特徴です。
ただし、各リクエストの処理負荷が異なる場合、負荷が均等になるとは限りません。
② 最少接続方式
**最少接続方式(Least Connections)**とは、現在の接続数が少ないサーバへ新しい接続を振り分ける方式です。
例えば、
サーバA:10接続
サーバB: 3接続
サーバC: 7接続
という状況なら、サーバBが選ばれます。
接続時間が長いサービスなどで利用されることがあります。
③ 重み付きラウンドロビン方式
**重み付きラウンドロビン(Weighted Round Robin)**とは、サーバごとに重みを設定して振り分ける方式です。
例えば、
サーバA:高性能 → 重み3
サーバB:標準 → 重み2
サーバC:低性能 → 重み1
と設定すると、振り分けの目安は次のようになります。
サーバA:3/6
サーバB:2/6
サーバC:1/6
高性能なサーバへ多くのリクエストを振り分けられます。
4-4. 負荷分散クラスタのメリット
① 処理能力を向上できる
複数のサーバでリクエストを処理できるため、全体の処理能力を高められます。
② サーバを追加しやすい
アクセス数が増えた場合、サーバを追加することで処理能力を拡張できる場合があります。
このように、サーバの台数を増やして処理能力を高めることを**スケールアウト(Scale Out)**と呼びます。
一方、既存サーバのCPUやメモリを増強することは**スケールアップ(Scale Up)**と呼びます。
③ 障害時の影響を軽減できる
適切なヘルスチェックを行っていれば、故障したサーバを振り分け対象から外せます。
サーバA:正常
サーバB:故障
サーバC:正常
↓
サーバA・Cへ振り分け
ただし、ロードバランサ自体が単一障害点にならないよう、ロードバランサの冗長化も重要です。
5. HAクラスタと負荷分散クラスタの違い
ここまでの内容を整理しましょう。
| 比較項目 | HAクラスタ | 負荷分散クラスタ |
|---|---|---|
| 主な目的 | 可用性の向上 | 処理能力・応答性の向上 |
| 基本的な考え方 | 障害時に処理を引き継ぐ | 複数台で処理を分担 |
| 代表的な構成 | 主系・待機系 | 複数の稼働サーバ |
| 代表的な技術 | フェールオーバー | ロードバランシング |
| 期待する効果 | サービス停止時間の短縮 | 負荷集中の軽減 |
ただし、実際のシステムでは両方の考え方を組み合わせることがあります。
例えば、Webサーバを3台用意して負荷分散し、そのうち1台が故障しても残り2台でサービスを継続する構成です。
この場合、性能向上と可用性向上の両方を目指しています。
6. シェアードエブリシングとシェアードナッシング
クラスタシステムでは、複数のコンピュータがCPU・メモリ・ストレージなどの資源をどのように利用するかも重要です。
ここでは、代表的な2つの考え方を学びます。
- シェアードエブリシング
- シェアードナッシング
6-1. シェアードエブリシングとは
**シェアードエブリシング(Shared Everything)**とは、複数の処理主体がCPU・メモリ・ストレージなどの主要な資源を共有する構成です。
代表的な例として、共有メモリ型のマルチプロセッサシステムがあります。
シェアードエブリシング
┌──────────────────┐
│ 共有資源 │
│ │
│ CPU・メモリ │
│ ストレージ │
└────────┬─────────┘
│
┌──────┼──────┐
│ │ │
▼ ▼ ▼
処理A 処理B 処理C
複数の処理が共通の資源を利用します。
メリット
- データを共有しやすい
- 処理間で情報をやり取りしやすい
- データの一元管理を行いやすい
デメリット
- 共有資源へのアクセスが集中する可能性がある
- 資源の競合が発生する場合がある
- 共有部分が性能上のボトルネックになる可能性がある
例えば、複数の処理が同じメモリ領域へ頻繁にアクセスすると、競合が発生することがあります。
6-2. シェアードナッシングとは
**シェアードナッシング(Shared Nothing)**とは、各コンピュータがCPU・メモリ・ストレージなどの資源を独立して持つ構成です。
シェアードナッシング
┌────────┐
│ノードA │
│CPU │
│メモリ │
│保存領域│
└────────┘
┌────────┐
│ノードB │
│CPU │
│メモリ │
│保存領域│
└────────┘
┌────────┐
│ノードC │
│CPU │
│メモリ │
│保存領域│
└────────┘
各ノードが独立した資源を持ち、必要に応じてネットワーク経由で連携します。
メリット
- 共有資源の競合を避けやすい
- ノードを追加して処理能力を拡張しやすい
- 障害の影響を限定できる場合がある
デメリット
- ノード間の通信が必要になる
- データの分散管理が複雑になる場合がある
- データの整合性や配置を考える必要がある
例えば、大量のデータを複数のノードへ分割して保存する分散データベースなどで利用されます。
6-3. シェアードディスクとの違い
クラスタ構成では、**シェアードディスク(Shared Disk)**という方式も重要です。
これは、各ノードがCPUやメモリを独立して持ちながら、ストレージを共有する構成です。
シェアードディスク
┌────────┐ ┌────────┐
│ノードA │ │ノードB │
│CPU │ │CPU │
│メモリ │ │メモリ │
└───┬────┘ └────┬───┘
│ │
└──────┬───────┘
│
▼
┌──────────────┐
│ 共有ストレージ│
└──────────────┘
シェアードディスクは、シェアードエブリシングと同じ意味ではありません。
CPUやメモリまで共有するのか、ストレージだけを共有するのかという違いがあります。
なお、共有ストレージを利用する場合は、複数ノードからの同時書き込みによるデータ破損を防ぐ仕組みも重要です。
6-4. 共有方式の比較
| 比較項目 | シェアードエブリシング | シェアードディスク | シェアードナッシング |
|---|---|---|---|
| CPU | 共有する構成 | ノードごとに独立 | ノードごとに独立 |
| メモリ | 共有する構成 | ノードごとに独立 | ノードごとに独立 |
| ストレージ | 共有する構成 | 共有 | ノードごとに独立 |
| 特徴 | 共通資源を利用 | データを共有しやすい | 資源の独立性が高い |
| 主な課題 | 共有資源の競合 | 共有ストレージの競合・障害 | データ分散・整合性管理 |
🍯 はちみつ屋さんで例えると
シェアードエブリシング
みんなで同じ調理場・道具・材料を使って、はちみつ商品を作るイメージです。
シェアードディスク
それぞれの作業場と道具を持っていますが、材料倉庫は共有します。
シェアードナッシング
それぞれが自分の作業場・道具・材料を持って作業します。
シェアードナッシングでは独立性が高い一方、材料の在庫状況などを共有するには連絡が必要になります。
7. グリッドコンピューティング
7-1. グリッドコンピューティングとは
**グリッドコンピューティング(Grid Computing)**とは、ネットワーク上に存在する複数のコンピュータの計算資源を連携させ、大規模な処理を実行する技術です。
Gridには「格子状の網」という意味があります。
例えば、1台のコンピュータでは何日もかかる計算を考えてみましょう。
その計算を複数のコンピュータへ分割し、並行して実行します。
大規模な計算
│
▼
処理を分割
│
┌──────────┼──────────┐
│ │ │
▼ ▼ ▼
コンピュータA コンピュータB コンピュータC
│ │ │
▼ ▼ ▼
計算A 計算B 計算C
│ │ │
└──────────┼──────────┘
│
▼
結果を統合
このように、複数のコンピュータが協力して計算を行います。
7-2. グリッドコンピューティングの特徴
グリッドコンピューティングには、次のような特徴があります。
① 分散した計算資源を利用する
ネットワーク上に存在する複数のコンピュータを利用します。
これらのコンピュータは、必ずしも同じ場所に設置されている必要はありません。
② 異なる組織の資源を利用できる
大学や研究機関など、異なる組織が保有する計算資源を連携させる構成もあります。
③ 大規模な計算に適している
大量の計算を分割して実行できる場合、処理時間を短縮できます。
ただし、すべての処理が効率よく分割できるわけではありません。
処理間の通信や結果の統合に時間がかかる場合もあります。
7-3. グリッドコンピューティングの利用例
代表的な利用分野として、次のようなものがあります。
- 科学技術計算
- 気象シミュレーション
- 物理学の研究
- 大規模なデータ解析
- 医薬品開発に関する計算
例えば、研究機関が大量のシミュレーションを実行する場合、複数のコンピュータへ計算を分配できます。
8. クラスタコンピューティングとグリッドコンピューティングの違い
ここも応用情報技術者試験で押さえておきたいポイントです。
どちらも複数のコンピュータを利用しますが、一般的な構成や管理方法に違いがあります。
| 比較項目 | クラスタコンピューティング | グリッドコンピューティング |
|---|---|---|
| 基本的な考え方 | 複数台を連携させたシステム | 分散した計算資源を連携 |
| 主な目的 | 可用性・性能の向上 | 大規模な計算資源の活用 |
| 管理 | 一元的に管理されることが多い | 複数の管理主体にまたがる場合がある |
| 設置場所 | 同一拠点・近接拠点が多い | 地理的に離れていてもよい |
| コンピュータの種類 | 比較的統一されることが多い | 異なる種類が混在する場合がある |
| 利用例 | Webシステム、DBシステム | 科学技術計算、研究用途 |
ただし、これらは典型的な特徴であり、厳密に区別できない構成もあります。
例えば、地理的に離れたクラスタも存在します。
重要なのは、クラスタは複数台を一つのシステムとして連携させること、グリッドは分散した計算資源を集めて活用することです。
9. 高信頼性と高性能を両立するには
実際のシステムでは、可用性と性能の両方が求められます。
例えば、ネットショップを考えてみましょう。
利用者
│
▼
┌────────────────┐
│ ロードバランサ │
└───────┬────────┘
│
┌────────┼────────┐
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│Web A│ │Web B│ │Web C│
└─────┘ └─────┘ └─────┘
│ │ │
└────────┼────────┘
│
▼
┌──────────────┐
│ APサーバ群 │
└───────┬──────┘
│
▼
┌──────────────┐
│ DBクラスタ │
└──────────────┘
この構成では、複数の技術を組み合わせています。
Webサーバ
負荷分散クラスタによって、アクセスを複数台へ振り分けます。
APサーバ
複数台で業務処理を分担することで、処理能力を高めます。
DBサーバ
HAクラスタなどを利用し、障害時のサービス停止時間を短縮します。
ただし、この構成でもロードバランサやネットワーク、共有ストレージなどが単一障害点になっていると、そこが故障した際にサービス全体へ影響する可能性があります。
そのため、システム全体の信頼性を考えるときは、サーバだけでなく通信経路やストレージも含めて設計することが重要です。
10. 応用情報技術者試験で押さえたいポイント
今回の内容で特に重要なのは、次の違いです。
① HAクラスタと負荷分散クラスタ
HAクラスタ
→ 障害に強くする
負荷分散クラスタ
→ 処理を分担して性能を高める
② フェールオーバーとロードバランシング
フェールオーバー
→ 障害時に別のサーバへ切り替える
ロードバランシング
→ 複数のサーバへ処理を振り分ける
③ シェアードエブリシングとシェアードナッシング
シェアードエブリシング
→ 主要な資源を共有する
シェアードナッシング
→ 各ノードが独立した資源を持つ
④ クラスタとグリッド
クラスタ
→ 複数台を連携させて
一つのシステムとして動作させる
グリッド
→ 分散した計算資源を連携させて
大規模な計算を実行する
まとめ
この記事で覚えること
- クラスタリングは、複数のコンピュータを連携させて一つのシステムとして動作させる技術
- HAクラスタは、システムの可用性向上を目的としたクラスタ
- フェールオーバークラスタは、障害時に別のサーバへ処理を切り替えるクラスタ
- ヘルスチェックは、サーバやサービスの正常性を確認する仕組み
- ハートビートは、クラスタを構成するサーバ間で状態を確認する通信
- スプリットブレインは、複数のサーバが自分を主系と判断してしまう状態
- 負荷分散クラスタは、複数のサーバへ処理を分担させる構成
- ロードバランサは、複数のサーバへリクエストを振り分ける装置やソフトウェア
- ラウンドロビン方式は、サーバへ順番にリクエストを振り分ける方式
- 最少接続方式は、接続数が少ないサーバへ振り分ける方式
- シェアードエブリシングは、主要な計算資源を共有する構成
- シェアードディスクは、各ノードがCPU・メモリを持ち、ストレージを共有する構成
- シェアードナッシングは、各ノードが独立した資源を持つ構成
- グリッドコンピューティングは、分散した計算資源を連携させ、大規模な処理を実行する技術
🍯 はちみつメモ
クラスタリングは「複数のコンピュータをチームにする技術」!
**HAクラスタは「誰かが倒れても仕事を続けるチーム」、負荷分散クラスタは「みんなで仕事を分担するチーム」**と考えると覚えやすいよ。
シェアードエブリシングは資源を共有、シェアードナッシングは資源を独立させる構成。
そして、グリッドコンピューティングは、離れた場所にあるコンピュータの計算能力を集めて、大きな仕事に取り組む仕組みだよ!