サーバークラスタリングの構成を調べてみる

# はじめに
直近で、サーバーのクラスタリング構成について調べる機会があったので、この記事では、サーバークラスタリングの代表的な構成方法と、それぞれの利点などについてざっくり紹介していきます。クラスタリングを理解することで、システム全体の信頼性や性能を飛躍的に向上させる方法を学んでいこうと思います。


# クラスタリングの基本の考え方
### クラスタリングって何？
クラスタリングは、複数のサーバーを連携させて1つのシステムとして動作させる技術です。この技術は、システムの耐障害性、信頼性を高め、負荷を分散し、全体のパフォーマンスを向上させる目的で導入されます。単一のサーバーが障害を起こした場合でも、他のサーバーがその役割を引き継ぐことで、システム全体が停止することを防ぐことができます。

### なぜクラスタリングをするの？
何らかの原因でシステムがダウンしてしまうと、ビジネスにとって大きな損失になってしまいます。そして、一瞬のダウンタイムでも多くの取引が失われる可能性があります。このような状況を避けるためには、システムが常に利用可能であることが求められます。

しかし、システムが100%完璧に動作することは難しく、ハードウェアの故障やネットワークの問題、さらにはサイバー攻撃など、予期せぬトラブルはいつでも発生する可能性があります。こうしたリスクに対処するためには、クラスタリングが非常に有効です。

クラスタリングを導入することで、システムは複数のサーバーによって支えられ、万が一1台のサーバーがダウンしたとしても、他のサーバーがその役割を引き継ぐため、システム全体のダウンタイムを最小限に抑えることができます。

さらに、クラスタリングはシステムの処理能力を向上させる効果もあります。たとえば、大量のリクエストが一度に発生する場合でも、クラスタリングによって負荷が分散されるため、各サーバーが効率的にリクエストを処理できます。これにより、サービスのパフォーマンスが向上し、ユーザーに快適な利用体験を提供することが可能になります。

# クラスタリング構成の紹介
主なクラスタリング構成方法の概要を紹介していきます。

### Active-Activeクラスタリング
#### 概要と特徴
Active-Activeクラスタリングでは、複数のサーバーが同時に稼働し、全てのサーバーが負荷を分散して処理を行います。この構成では、各サーバーが均等にリクエストを処理し、全てのサーバーが常にアクティブな状態で動作しています。これにより、1つのサーバーが障害を起こしても、他のサーバーがその処理を瞬時に引き継ぐため、システム全体の可用性が非常に高まります。

常に高可用性が求められる金融システムや、世界中に分散したユーザーへ低遅延でサービスを提供する必要があるグローバルなウェブサービスに適しています。

#### メリット 
各サーバーがリクエストを分担するため、全体のパフォーマンスが向上し、大量のトラフィックに耐えられたり、すべてのサーバーが稼働中のため、障害時のリカバリが迅速で、ユーザーに影響を与えにくいです。また、新たなサーバーを追加することで容易にシステムのキャパシティを拡張することができます。
#### デメリット
設定が複雑であり、各サーバー間のデータ同期や負荷分散の調整が必要であることや、全てのサーバーをアクティブ状態に保つため、ハードウェアおよび運用コストが高い。

### Active-Standbyクラスタリング
#### 概要と特徴
Active-Standbyクラスタリングは、一方のサーバーがアクティブに動作し、片方のサーバーは待機状態（Standby）になります。アクティブなサーバーに障害が発生した場合、スタンバイサーバーが自動的にアクティブとなり、業務を引き継ぎます。基本的には２台のサーバーで構成される。

バックオフィスシステムや中小規模のアプリケーションで、一定の冗長性が必要だが、コストを抑えたい場合に適しています。また、可用性が求められるが、負荷が高くないシステムにおいても効果的です。

また、Active-Standby構成は、さらに以下の３パターンに分けられます。
- **ホットスタンバイ**
ホットスタンバイ構成では、スタンバイサーバーがアクティブサーバーと同じデータをリアルタイムで保持し、すぐに処理を引き継げる状態にあります。アクティブサーバーが障害を起こした場合、スタンバイサーバーはほぼ瞬時にアクティブ状態に切り替わり、サービスを継続します。
- **コールドスタンバイ**
コールドスタンバイ構成では、スタンバイサーバーは通常は停止しており、アクティブサーバーが障害を起こした際に手動または自動で起動されます。起動後に必要なデータがロードされ、システムが復旧するまでには時間がかかることがあります
- **ウォームスタンバイ**
ウォームスタンバイ構成では、スタンバイサーバーは電源がオンで稼働していますが、完全にはアクティブな状態ではありません。（OSは起動しているが、DBMSは起動していないなど）障害発生時に必要なデータやサービスがロードされ、アクティブ状態に移行するまでにはある程度の時間がかかりますが、コールドスタンバイよりも早く復旧が完了します。


#### メリット
Active-Activeよりも設定が簡単で、サーバー間の同期や管理が比較的容易です。
また、障害発生時に迅速にしっかりフェイルオーバーが行われるため、システムダウンを回避することができます。
#### デメリット
スタンバイサーバーが通常は待機状態のため、実質動いているサーバーは１台だけになるため、リソースの利用効率が低いことや、障害発生時にスタンバイサーバーがアクティブ化するまでタイムラグがある程度あるため、短時間でもサービス停止が発生する。


# その他のクラスタリングの構成に出てくる概念など

### ロードバランシング
ロードバランシングは、「ロードバランサー」という専用のハードウェアやソフトウェアを用いてリクエストを複数のサーバーに均等に振り分けることで、システム全体の負荷を分散します。ロードバランサーがリクエストの流量を監視し、リクエストの状況に応じて最適なサーバーに振り分け、サーバーの負荷を均等化します。

サーバーを追加することで容易にシステム全体の処理能力を拡張できることや、個々のサーバーがダウンしても、他のサーバーで対応可能なため、システム全体が停止することがないこと、また、トラフィックが均等に分散されるため、特定のサーバーに負荷が集中することもなく、全体のパフォーマンスが向上につながる結果になります。
しかし、ロードバランサー自体が障害を起こすと、全システムが影響を受けるため、ロードバランサの冗長化も必須です。


### 高可用性クラスタリング（HAクラスタリング）
高可用性クラスタリング（HAクラスタリング）は、特にシステムの可用性を最大限に高めることを目的としたクラスタリング手法です。サーバーをペアリングし、片方がダウンした場合には、もう片方のサーバーが即座にサービスを引き継ぎます。

このHAクラスタリングの構成方法にはいくつか種類があり、前述した、Active-ActiveクラスタリングやActive-Standbyクラスタリングなどの構成を適用させて行います。

※可用性とは、システムが継続して稼働できる能力のこと。

### データベースサーバのクラスタリング構成について
データベースのクラスタリングには、様々な手法が利用されます。
ここでは、その一部を簡単に紹介します。

- **レプリケーション**
データを複数のサーバーに複製し、各サーバーでデータを同期させる技術です。一般的には、災害対策として、レプリカを作るようなイメージです。可用性向上を目的として、アクティブなデータベースサーバーに何かあったときに、スタンバイサーバーを使って素早く復旧を行う目的で利用されます。
- **シャーディング**
レコードを物理的に分割し、それぞれを異なるサーバーに保存することで、特定のデータへのアクセス負荷を分散し、全体の処理能力を向上させる手法です。
- **RAID** 
RAID（Redundant Array of Independence Disks）は複数のディスクを組み合わせてデータを保存する技術で、耐障害性や性能自体の向上が期待できます。クラスタリングされたデータベースでRAIDを利用することで、ディスク障害時のデータ損失を防ぎ、さらにパフォーマンスを改善します。
※RAIDの中にも、RAID0やRAID1,RAID2,RAID5など色々な方法があります。

など




# まとめ
以上で、今回調べてたり勉強した内容をざっくり書きました。
クラスタリングは、システムの信頼性と性能を向上させるために非常に有効な技術ですが、適切な構成方法を選択するためにも予算感や規模感を考慮した選択が重要です。

# 参照
「達人に学ぶ DB設計 徹底指南書 第2版」ミック著

https://ameblo.jp/bakery-diary/entry-12640432971.html

https://bccs.sios.jp/ha-cluster/

https://www.ibm.com/docs/ja/iis/11.5?topic=topologies-database-clustering