AWS環境における可用性・耐障害性実現の考え方とは?

    この記事ではクラウド案件の中でも人気をAzureと二分するAWSに焦点を当てて、AWS環境における高可用性・耐障害性の実現方法について考えていきたいと思います。

    なお今回は、HAソリューションやAWSの環境に詳しくない方でもスムーズに読み進められるように、各構成や手順については省略せず、細かく記した上で「なぜその手順が必要なのか?」「バックでどのように動いているのか?」「やってしまいがちな失敗」を多く記載しています。

    実際に構築されない方でも、当記事を参考にすることで、HAソリューションによるAWSの可用性向上を短時間で理解できるでしょう。この記事を参考にしつつ、ぜひAWSのフリーアカウントを作って手順を試してみてはいかがでしょうか。

    AWSについて

    AWSとは、Amazonが提供するクラウドプラットフォームサービスです。サーバーだけでなく、ストレージや仮想デスクトップ、IoTに関するものまで、さまざまなサービスが用意されています。

    まずは、AWSの特徴や機能などを紹介します。

    セキュリティ機能

    AWSは高い技術で構成されたクラウドサービスです。特徴として、高度なセキュリティで情報が守られていることが挙げられます。どれほど優れているかというと、軍隊やグローバル銀行、国家機密を扱う組織が利用する要件を満たせるように設計されているほどです。決して漏えいしてはいけない情報を、強固なセキュリティで守ります。

    また、ISO27001やSOC、PCIなどの世界に通用する規格のセキュリティ標準やコンプライアンス認証を約90も満たしており(2020年6月時点)、顧客データを扱う117ものサービス全てが、データを暗号化する機能を備えています。AWSは世界中にハードウエア群が点在していますが、中でもアメリカの情報機関向けに作られた「AWS Secret Region」は、より高度なセキュリティで構成されています。これは、中央情報局(CIA)や連邦捜査局(FBI)などの重要な機関が利用することを前提とした環境です。

    このように、Amazonの技術力は高く評価されており、特にAWSのセキュリティはトップレベルであるといえるでしょう。

    豊富なサービス

    豊富な機能やサービスがそろっていることも、AWSの強みといえるでしょう。仮想サーバーやストレージ、ネットワークなどの基盤サービスから、データベースなどのミドルウエアまで利用できます。

    アプリケーションにはAIやビックデータなどのトレンドを構築するためのツールや、IoTをサポートする環境まで多く準備されています。各サービスはGUIインターフェースで操作できるため、コマンドラインによる難しい操作は、ほとんど必要としないでしょう。

    自由度の高いAPIを持ち、顧客のニーズに合わせた柔軟なアプリケーションが作れます。また、エンジニアをサポートするプログラミングツールも豊富に取りそろえています。充実した機能の中でも、Elastic Compute Cloud(EC2)はよく使用される人気のサービスです。これは仮想サーバーをクラウド上に構築し、あらゆるアプリケーションを動作できます。

    EC2はNETFLIX、airbnb、ANAやCookpadなど、名だたる企業が利用しています。強固なセキュリティはもちろんのこと、容易にスケールを変更できることもあり、さまざまなシーンに対応できるのです。グラフィック処理が必要なサービスには、GPUを搭載したインスタンスを利用するなど、高いパフォーマンスが求められる業務にも対応できます。

    従量課金制の料金設定

    AWSは使用した分だけを支払う、従量課金制を導入しています。予測ではなく、実稼働に基づいて計算されるのです。繁忙期は料金が高くなりますが、システムへのアクセスが少ない閑散期ではコストを抑えられます。そのため、無駄に費用が発生することはないでしょう。

    使いたい時に使えることもあり、開発や試験においてもコストメリットがあります。仮にAWSではなく実機を購入してしまうと、初期費用だけでなく、ランニングコストもかかってしまうでしょう。一時的な使い方や、短期プロジェクトによる構築であれば、従量課金制を利用した方が初期費用もかかりません。

    リージョンのグローバルネットワーク

    AWSのクラウドプラットフォームやインフラは、世界中に広がっています。本社のあるアメリカ東西はもちろんのこと、日本や中国、シンガポールなどのアジア、フランクフルトやロンドンなどのヨーロッパにも点在します。全てデータセンターで管理されているため、安心・安全なシステムを提供できるのです。

    これらは全てスループットの高いネットワークで接続されているため、グローバルな冗長化構成を構築すれば、BCP対策や高可用性を実現できるでしょう。

    その理由は、完全に冗長化された100GbEファイバーネットワークのバックボーンを備えているからです。このような優れた基盤により、パケット損失の低減や低レイテンシーを実現しています。サービスの利用はどこにいても世界中のインフラを選択できます。例えば出張で海外に行ったとしても、出張先のリージョンに環境を移行すれば、よりパフォーマンスの高い環境でサービスを利用できます。

    AWS(EC2)の可用性の現実

    AWSは非常に多くのサービスで構成されています。その中でも、SIerが提案する機会として多くありがちなものが、IaaS(EC2)になるでしょう。(なぜIaaSが対象になるのかについては、この後ご説明致します。)クラウドにおける可用性について、よくある誤解が「クラウドにシステムを構築すれば、可用性については全てクラウドベンダーが担保してくれる」といった認識です。

    実はこの認識は正しくありません。クラウドのサービスには「SaaS」「PaaS」「IaaS」などといった形態のサービスが提供されています。この中でSaaSとPaaSについては、確かにクラウドベンダーの方でサービスが止まっても自動復旧する仕組みを提供しています。

    しかしIaaSについてはどうでしょうか?IaaSは「Infrastructure as a Service」の略称である通り、サービスの本質は基盤側にあります。つまり、基盤側についてはクラウドベンダー側で責任も持ってくれますが、基盤の上で動くOSより上位のミドルウェアやアプリケーションのレイヤについては、利用者の方で責任持つ必要があります。

    この構成を利用者とクラウドベンダーの間で責任を共有する「責任共有モデル」と呼びます。いくら優れたプラットフォームを提供するAWSを利用しても、アプリケーションも含めた高い可用性を実現するための設計や構築は、利用者で実施しなければなりません。設計をするためには、要件定義も必要になります。どの程度のレベルで可用性を実現させるのか、自社の業務に見合った条件の整理が必要になるでしょう。

    利用者とベンダーの「責任共有モデル」図

    ソフトウエアに耐障害性が求められる理由

    ここでもう1つ大事なポイントがあります。それは、システムの障害原因の内訳です。従来システムの障害原因といえば、「ハードウエア」に起因するものを指すことが一般的でした。

    しかし最近は「ソフトウエア」に起因する障害がハードウエアに起因する障害を逆転する統計も出ています。この背景としては、ハードウエアの信頼性は年々向上しているのに対し、ソフトウエアは人が作るものなのでそれ程昔と状況が変わらない。結果として相対的にソフトウエア起因の障害が目立つようになってきたと考えられます。

    つまり、現在は「ハードウエアを気にするのであれば、同じくらいソフトウエアにも気を遣う必要がある」と言えます。

    それではソフトウエア=上記のオレンジ色の箇所を守るにはどうすればよいのでしょうか?まず、すぐに思いつくものが、AWSのAuto RecoveryのようなIaaSに提供されている自動復旧機能を使うことです。Auto Recoveryは物理ホスト等の障害を検知したら、EC2の仮想インスタンスを別の物理サーバー上で自動復旧してくれます。Auto Recoveryはとても便利な機能ですが、見ている対象はあくまでハードウエアの障害であり、ソフトウエアの障害は検知してくれません。仮に、夜間に自動でシステムを処理する機能があるとします。これが業務に大きな影響を及ぼすものであれば、何らかの理由で停止してしまうと大変です。IaaSで提供される自動復旧の仕組みはこのようなハードウエアの障害を見ているものが一般的です。

    それでは、IaaS環境ではソフトウエアの障害は検知できないのでしょうか?

    Iaas上でのHAクラスター構成図

    HAクラスタ構成で高可用性を実現

    ソフトウエアの障害検知を実現させるものがが、IaaS上でのHAクラスタ構成です。IaaSで対応できない領域をHAクラスタで対応することで、基盤側からアプリケーションまでをフルに「相互補完」が可能となります。

    AWSの高スループットを実現させるネットワーク基盤と、仮想マシンのHAクラスタを利用すれば、アプリケーションの障害や死活監視をしながら、自動的なフェールオーバーをスムーズに実現できるでしょう。

    IaasとHAクラスターによる相互補完図

    ここでAWSに詳しい方だと「AWSでは便利な『マネージドサービス』が提供されている。例えばDBのマネージドサービスであるRDS(Relational Database Service)を使うと構築や運用は楽だし、マルチAZオプションのような冗長構成もあるので、わざわざIaaSに構築する必要性は無いのでは?」と疑問に思われるかもしれません。確かにRDSは構築や運用をAWSの方でやってくれるので非常に楽です。また冗長構成もできます。

    しかしRDSは容易に構築できる代わりに、機能的な自由度が制限されている特徴があります。例えば、DBのバージョンが決まっている、カスタマイズ対応が難しい、メンテナンススケジュールはAWSに従うなどといったものです。「既存の環境を極力そのままクラウドに移行したい」「現行の仕様をRDSに合わせたくない」というニーズは根強く、このようなケースの場合はIaaSのEC2上に個別にDBなどの環境を構築する必要があります。

    クラウド上での構築スタイルPaaSとIaaSの比較表

    当社はいち早くHAクラスタのクラウド対応に取り組んでおり、特にAWS(EC2)については既に多くの導入実績があります。

    しかしHAクラスタソフトに詳しい方だと、このような疑問をお持ちになるかもしれません。「HAクラスタは通常稼動系と待機系のサーバーの間で共有ストレージを使ってデータを共有する。AWSのように共有ストレージが使えない環境ではどうやってHAクラスタを構築するのだ?」

    当社ではデータレプリケーション製品のDataKeeper(データキーパー)をリリースしています。DataKeeperはブロックレベルでリアルタイムに稼動系と待機系のローカルディスク同士を同期し、その同期している領域を共有ストレージとしてHAクラスタソフトに使わせられます。

    HAクラスタソフトは、当社で開発販売しているLifeKeeper(ライフキーパー、Linux版およびWindows版あり)、もしくはWindowsServer標準のHAクラスタ機能のWSFC(Windows Server Failover Clustering)が対応します。

    これを実際にAmazon EC2に適用すると次のような概念図になります。
    AZ(Availability Zone)をまたいだ仮想インスタンス間でHAクラスタを構成し、EBS(Elastic Block Store)を各仮想位スタンスにローカルティスクとして割り当て、その間をDataKeeperでレプリケーションして共有ストレージの代わりとします。

    AmazonEC2上の構成の概念図

     

    なお、当社ではAmazon EC2環境において既に下記の構成をサポートしています。

    No.HAクラスタソフトレプリケーションソフトOS
    1 LifeKeeperDataKeeperLinux
    2 LifeKeeperDataKeeperWindows
    3WSFCDataKeeperWindows

    最後に

    HAソリューションによるAWSの高可用性・耐障害性の実現方法について、ご理解いただけましたでしょうか?

    具体的にどのような構成に対応しており、どのようにクライアントを稼動系のノードにルーティングさせるのか、その具体的な仕組については、次の記事でご紹介いたします。ぜひ続けてお読みください。

    「ルートテーブルシナリオによるEC2のHAクラスター構成」を読む

     

    SNSでもご購読できます。