主題2.13:システムアーキテクチャ

  • 2023年3月31日
  • IT

2.13.1 高可用システムの実現方式

高可用システム

可用性(Availability)

・システムを継続して利用できる度合いのことである
・コンピュータウイルスは可用性に影響を及ぼす

システム設計

・RPO(Recovery Point Objective:目標復旧時点)
どの時点まで復旧するかという指標です。RPOが2日なら、2日前のデータまで復旧したいということであり、RPOの数値が小さいほど失われるデータが少なくなります。
例えば、24時間365日の連続稼働を要求されるようなミッションクリティカル(業務にとって必要不可欠)なシステムでは停止直前(0:ゼロ)の値を求められますので、通常のバックアップだけではなく、データをリアルタイムにコピー(複製)する「レプリケーション」を導入します。RPOを小さくしようとするに従って、採用するバックアップアーキテクチャのコストは高くなります。

・RTO(Recovery Time Objective:目標復旧時間)
どのくらいの時間で(いつまでに)復旧するかという指標です。RTOの数値が小さいほどシステムの復旧時間を短くしたいということになります。
例えば、ミッションクリティカルなシステムではRPOと同様に0(ゼロ)に近い値を求められますので、稼働系システムと同じ待機系システムを遠隔地に準備しておき、障害発生時にすぐに切り替えられる「ホットスタンバイ」を導入します。RTOを小さくしようとするに従って、採用する高可用システムのコストは高くなります。

システム構築

・MTBF(Mean Time Between Failures:平均故障間隔)
故障などで停止するまでに連続して稼動している時間の平均値です。MTBFの値が大きいほど信頼性が高いと言えます。

・MTTR(Mean Time To Repair:平均修復時間)
復旧に要する時間です。MTTRの値が小さいほど復旧が早く保守性が高いと言えます。

・稼働率
システム全体の稼働状況を表します。以下の式で求められます。

稼働率 = MTBF /(MTBF+MTTR)

冗長化

1台のサーバでサービスを提供すると、そのサーバが故障しただけでサービスを提供できなくなります。予備として複数台のサーバを使用して冗長化することで、システムのダウンタイム(停止時間)を最小限に抑えて可用性を向上させることができます。このようなシステム構成を「HAクラスタ(高可用性クラスタ)」と呼びます。
※クラスタ(cluster:一群、塊)とは、本試験においては、信頼性向上や負荷分散などを目的として、複数のサーバを一群にまとめて動作させるシステムのことです。

スプリットブレイン

クラスタ内の各サーバ(ノード)は互いに監視し合っていますので、ノード間で通信ができなくなると、アクティブなマスターノードが複数発生してしまうスプリットブレイン(split brain:分離脳)という事象が発生します。これにより、例えばマスターノードがそれぞれの情報をファイルに書き込むことでデータが破損したり、共有リソースの整合性が取れなくなる恐れがあります。

Pacemaker(ペースメーカー)

クラスタのリソース制御を行うオープンソースソフトウェアです。もともとはHeartbeat(ハートビート)という名称で開発されていましたが、リソース制御機能だけが切り離されて独立したものです。Corosyncなどのクラスタ制御ソフトウェアと組み合わせてHAクラスタを構成します。
リソースとはPacemakerが監視・制御する対象のことであり、具体的にはデーモンやファイルシステム、仮想IPアドレスなどのことを指します。これらの制御を行うプログラムを「RA(リソースエージェント)」と呼びます。
また、スプリットブレインの対策の一つとして「STONITH(Shoot The Other Node In The Head)」という機能があります。STONITHは問題のノードを強制的に電源停止や再起動を行い、スプリットブレインを回避します。

Corosync(コロシンク)

Red Hatが支援しているOpenAISプロジェクトから生まれたオープンソースのクラスタ制御ソフトウェアです。Corosyncにはリソース制御機能が無いため、Pacemakerと組み合わせてHAクラスタを構成します。

ロードバランシング(負荷分散)

Webサーバなどに対してクライアントアクセスが増加すると、単一のサーバでは処理が追い付かなくなったり、サーバがダウンするなど、サービス提供に影響を及ぼすような障害となります。こうした状況への対応策の一つとして、サーバを複数用意し、複数のノードに処理を分散することで全体としての許容負荷を上げることを負荷分散(ロードバランシング)と言います。
負荷分散の機能をクラスタで実現させるのがロードバランスクラスタです。主な構成要素として、負荷分散装置(ロードバランサ)と実際のサービスを提供する複数のサーバ(バックエンドサーバ)から構成されます。

ディザスタリカバリ(DR : Disaster Recovery)

ディザスタリカバリ(DR : Disaster Recovery)とは、地震や火事などの災害からシステムを復旧すること、またはその計画を意味します。物理的に同じ拠点でHAクラスタを構成するだけでは大きな災害時にシステムが停止してしまうので、物理的な遠隔地にスタンバイサーバなどを設置したりバックアップを保管したりします。
データをリアルタイムにコピー(複製)する遠隔レプリケーションや遠隔へのフェイルオーバーを整備することは、技術面、コスト面等ではやや敷居が高いですが、可用性確保という面ではほぼリアルタイムな復旧を実現できる選択肢となりえます。

2.13.2 キャパシティプランニングとスケーラビリティの確保

キャパシティプランニング

リソースを測定する際に利用する主なコマンド

リソースの最適化

スケールアップ/スケールダウン
スケールアップは単一サーバのリソースを増強することです。CPUやメモリ、ディスクを増設したり、高スペックなものに交換するなどしてサーバの性能を上げます。
スケールダウンは逆にリソースを縮小してサーバの性能を下げることです。

スケールアウト/スケールイン
スケールアウトはサーバの台数を増やしてシステム全体の性能を上げることです。複数のサーバに処理を振り分けることで負荷分散(ロードバランシング)します。
スケールインはシステムを構成するサーバの台数を減らすことです。

ロードバランサ

・複数のサーバに処理を分散する
・クライアントの情報を参照して前回と同じサーバに振り分ける

DNSラウンドロビン

・DNS権威サーバに、1つのホスト名に対して複数のIPアドレスのAレコード(またはAAAAレコード)を登録しておく
・DNS権威サーバがクライアントに複数のIPアドレスを順番に返す

2.13.3 クラウドサービス上のシステム構成

クラウドサービス

クラウドの特徴

・物理的な制約にとらわれず、迅速に柔軟に仮想マシンを利用できる
・ディザスタリカバリやバックアップ対策として複数のリージョンを選択できる
・オンプレミスに比べて拡張性が高い

クラウドにおける3つのサービス

SaaS(Software as a Service)
ソフトウエアをサービスとして提供します。ユーザはインフラも開発環境も意識することなく、単純にソフトウエアを利用する、というサービスを受けることができます。

PaaS(Platform as a Service)
ソフトウエアの開発、実行環境をサービスとして提供します。ユーザは環境構築や保守に気を遣わずに、開発に専念できます。

IaaS(Infrastructure as a Service)
サーバ、ストレージ、ネットワーク等、仮想化されたインフラ環境をサービスとして提供するサービスモデルです。HaaS(Hardware as a Service)と呼ばれることもあります。

クラウドのストレージ

エフェメラルストレージ(ephemeral:一時的な)
メモリ(RAM)のようにインスタンス(クラウド上の仮想マシン)を停止するとデータが消失するストレージです。揮発性ストレージとも呼ばれます。
永続化ストレージよりもI/Oが高速なので一時ストレージとして利用します。

永続化ストレージ
インスタンスを停止・起動しても永続的にデータを保持するストレージです。不揮発性ストレージとも呼ばれます。

クラウドのネットワーク

固定IPアドレス
インスタンスの起動時に固定で割り当てられるIPアドレスです。

フローティングIPアドレス
インスタンスへの割り当てを動的に変更できる仮想IPアドレスです。
高可用性クラスタでは、稼働系(アクティブ)に障害が発生した場合、稼働系に割り当てていたフローティングIPアドレスをクラスタ制御ソフトウェアが解放し、待機系(スタンバイ)に割り当てし直します。こうすることで、フェイルオーバー発生後もクライアントは同じIPアドレスにアクセスできます。

クラウドのセキュリティ

テナントネットワーク
アカウントごとに割り当てられたプライベートな仮想ネットワークです。それぞれのテナントネットワークは独立していますが、ルーティングを設定すると他のテナントネットワークとも通信できるようになります。

セキュリティグループ
インスタンスへのアクセスを制御する、クラウド側のファイアウォール機能です。アクセスを許可するホストやプロトコル、ポートなどiptablesコマンドのような設定を、クラウドの管理コンソールから簡単に行えます。(管理コンソールは、Webブラウザでインスタンスの構築やデータベース管理など、クラウド機能を設定・管理するツールです。)

クラウドの主要な技術

オブジェクトストレージ
データを「オブジェクト」として扱う、ディレクトリのような階層構造を持たないストレージです。オブジェクトは一意なIDとメタデータ(データの作成日や格納場所などの情報)を持ち、これらによってデータが特定され読み書きが行われます。各オブジェクトにはHTTP経由でURLでアクセスできます。

オートスケーリング
システム負荷の増減時に、あらかじめ設定したポリシーに従って、自動的にインスタンスの追加(スケールアウト)・削除(スケールイン)を行う機能です。ポリシーに設定したCPUなどのリソースのしきい値やスケジュールをトリガーとして、オートスケールが実行されます。

メッセージングシステム(キュー)
キュー(待ち行列)を介してメッセージをやり取りすることで、異なるアプリケーション同士が非同期に連携できる仕組みです。

2.13.4 典型的なシステムアーキテクチャ

典型的なシステム構成

Web3層モデル

・各層をそれぞれ冗長化することによって可用性やスケーラビリティを高めることができる
・Webサーバ:Apache HTTP Server、nginx
・アプリケーションサーバ:Apache、Gunicorn、Apache Tomcat
・データベースサーバ:MySQL/MariaDB、PostgreSQL

Webアプリケーションの構成
LAMP…Linux(OS)+ Apache HTTP Server(Webサーバ)+ MySQL/MariaDB(DBMS)+ PHP/Perl/Python(プログラミング言語)
LAPP…Linux(OS)+ Apache HTTP Server(Webサーバ)+ PostgreSQL(DBMS)+ PHP/Perl/Python(プログラミング言語)

リバースプロキシサーバ

・不特定多数のクライアントから特定のサーバへのリクエストを中継する
・サーバの負荷を軽減するために静的なコンテンツをキャッシュする

CDN

・Webサーバやネットワークの負荷を軽減するために、複数拠点のサーバにWebコンテンツを複製し配信する仕組み
・クライアントはキャッシュサーバから高速にコンテンツを表示、ダウンロードできる
・オリジナルのコンテンツを持つサーバを「オリジンサーバ」と呼ぶ
・キャッシュサーバにコンテンツをキャッシュする仕組みとしてリバースプロキシを使用

メッセージングシステム(メッセージングキュー)

・送信側アプリケーションが「プロデューサー」、受信側アプリケーションが「コンシューマー」