ビジネスの成長に伴い、データアクセスと同時使用量の需要が増加し、静的ファイルが頻繁に変更されます。 これらの課題に対処するために、企業は、Web サービスの継続的な運用を可能にし、データの整合性と共有を維持し、冗長データストレージのコストを削減する、高可用性と共有ストレージベースの Web アーキテクチャをセットアップする必要があります。
ソリューションアーキテクチャ
次の図は、デフォルト構成の完了後に設定するソリューションのアーキテクチャを示しています。 リソースプランに基づいて特定の構成を変更できます。 ただし、ソリューションの最終的なアーキテクチャは、図に示されているアーキテクチャと同様である必要があります。
このソリューションのアーキテクチャには、次のインフラストラクチャとクラウドサービスが含まれています。
Classic Load Balancer(CLB)インスタンス、Elastic Compute Service(ECS)インスタンス、NAS ファイルシステムなどのリソースがデプロイされる仮想プライベートクラウド(VPC)。
2 つの ECS インスタンスを同じ VPC に接続してインスタンス間の通信を可能にし、基本的なネットワークセグメンテーションと分離を提供する 2 つの vSwitch。
同じリージョン内の異なるゾーンにデプロイされ、高可用性と高パフォーマンスのバックエンドサーバーグループを形成する 2 つの ECS インスタンス。
ネットワークトラフィックをバックエンドサーバーに転送して単一障害点(SPOF)を排除するインターネットに接続された CLB インスタンス。 1 つのバックエンドサーバーに障害が発生した場合、CLB インスタンスはリクエストを他の正常なバックエンドサーバーに分散して、サービスの継続性と安定性を確保します。
複数の Web サーバー間でデータへの共有アクセスとデータ同期を提供して、データの整合性を確保する 2 つの NAS ファイルシステム。 スクリプト、inotify-tools、および sync ツールを使用して、プライマリ NAS システムとセカンダリ NAS システム間の自動増分バックアップとスイッチオーバーを有効にします。
ソリューションのデプロイ
クイックデプロイ
Resource Orchestration Service(ROS)は、数回クリックするだけでリソースを作成および構成できるサービスです。 ROS を使用して、高可用性と共有ストレージベースの Web サービスを迅速にデプロイできます。
VPC を作成します。
2 つの vSwitch を作成します。
セキュリティグループとセキュリティグループルールをセキュリティグループに作成します。
2 つのプリエンプティブル ECS インスタンスを作成し、インスタンスに Web サービスをデプロイします。
インターネットに接続された CLB インスタンスを作成し、2 つのプリエンプティブル ECS インスタンスをバックエンドサーバーとして CLB インスタンスに追加します。
異なるゾーンに 2 つの汎用 NAS ファイルシステムを作成します。 1 つの汎用 NAS ファイルシステムはプライマリ NAS ファイルシステムとして使用され、もう 1 つの汎用 NAS ファイルシステムはセカンダリ NAS ファイルシステムとして使用されます。
自動化スクリプト、inotify-tools、および sync ツールを使用して、プライマリ NAS ファイルシステムとセカンダリ NAS ファイルシステム間の増分バックアップとスイッチオーバーを有効にします。
こちらをクリックします。 表示されるページで、上部ナビゲーションバーの左上隅にあるリージョンを選択します。 この例では、中国 (杭州) が選択されています。
スタック名セクションで、スタック名を変更します。 [テンプレートパラメータの構成] セクションで、ECS インスタンスと NAS ファイルシステムをデプロイするゾーンを選択し、ECS インスタンスタイプを選択して、ECS インスタンスのパスワードを構成します。 必要なパラメータを構成し、構成を確認して、[作成] をクリックして、高可用性と共有ストレージベースの Web サービスをデプロイするために使用するスタックを作成します。
スタックが作成されると、スタック詳細ページの [スタック情報] タブのステータスパラメータの値は [作成済み] になります。
[出力] タブをクリックし、作成されたリソースを表示してアクセスし、ソリューションを確認します。
手動デプロイ
高可用性と共有ストレージベースの Web サービスを手動でデプロイするには、次の手順を実行します。
(オプション) ステップ 1: ECS インスタンスを作成し、Web サービスをデプロイする
ソリューションのデプロイに使用できる ECS インスタンスをすでに作成し、そのインスタンスに Web サービスをデプロイしている場合は、この手順をスキップしてください。
ECS コンソールにログインし、インスタンス購入ページに移動し、カスタム購入 タブをクリックし、画面の指示に従って ECS インスタンス (ECS_01) を作成します。
次のパラメータをメモしておきます。
課金方法: プリエンプティブルインスタンスを選択します。
重要このトピックでは、テストコストを削減するためにプリエンプティブル ECS インスタンスが使用されます。 従量課金制の ECS インスタンスと比較して、プリエンプティブル ECS インスタンスはコストを節約できます。 デフォルトでは、インスタンスの作成後、少なくとも 1 時間はプリエンプティブル ECS インスタンスを確実に実行できます。 1 時間後、市場価格が入札価格を超えるか、インスタンスタイプのリソースが不足している場合、インスタンスは自動的に解放されます。 プリエンプティブルインスタンスが解放される前に、インスタンスデータをバックアップしてください。
ECS インスタンスを長期間実行する場合は、課金方法パラメータをサブスクリプションまたは従量課金に設定することをお勧めします。
リージョン: ビジネスに近いリージョンを選択することをお勧めします。 この例では、中国 (杭州) が選択されています。
イメージ: Alibaba Cloud Linux 3 イメージバージョンを選択します。
パブリック IP アドレス: パブリック IPv4 アドレスを割り当てる を選択します。
セキュリティグループ: 新しいセキュリティグループを選択し、セキュリティグルーブタイプパラメータを基本セキュリティグループに設定し、IPv4 ポート/プロトコルのオープンセクションで SSH (TCP:22) と HTTP (TCP:80) を選択します。
[ログイン資格情報]: [カスタムパスワード] を選択し、[ログイン名] パラメータを
ecs-user
に設定し、ログインパスワードを指定します。詳細設定 - リソースグループ:
高可用性テストリソースグループ
という名前のリソースグループを作成し、ドロップダウンリストから選択します。
ビジネス要件に基づいて他のパラメータを構成します。 詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。
ECS インスタンスに Web サービスをデプロイします。
ECS インスタンスに接続します。 詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
サンプル Web サービスをインストールします。
curl -fsSL https://help-static-aliyun-doc.aliyuncs.com/tech-solution/install-ha-web.sh|bash
ECS インスタンスに Web サービスがデプロイされている場合は、ブラウザのアドレスバーに ECS インスタンスのパブリック IP アドレス (例:
http://123.1.XX.XX
) を入力して、インスタンス上の Web サービスにアクセスできます。
ステップ 2: 共有ストレージとディザスタリカバリのために NAS ファイルシステムをデプロイする
このソリューションでは、NAS ファイルシステムを使用して共有ストレージを提供し、inotify-tools とリモート同期 (rsync) ユーティリティを使用して、NAS ファイルシステム間でプライマリ/セカンダリ増分バックアップとスイッチオーバーを実行します。
プライマリ/セカンダリ増分バックアップ: プライマリ NAS ファイルシステムのデータが変更されると、増分バックアップが実行され、プライマリ NAS ファイルシステムからセカンダリ NAS ファイルシステムにデータ変更が同期されます。
プライマリ/セカンダリスイッチオーバー: プライマリ NAS ファイルシステムの可用性が自動的にチェックされます。 プライマリ NAS ファイルシステムが使用可能な場合、プライマリ NAS ファイルシステムはサービスの提供を続けます。 それ以外の場合、セカンダリ NAS ファイルシステムへのスイッチオーバーが実行されます。 プライマリ NAS ファイルシステムが回復すると、プライマリ NAS ファイルシステムへのスイッチバックが実行されます。
このバックアップおよびディザスタリカバリソリューションは、制限のある基本的な方法にすぎません。 ビジネス要件に基づいてソリューションを最適化できます。
このソリューションには、プライマリ NAS ファイルシステムからセカンダリ NAS ファイルシステムへの単方向データバックアップやスイッチオーバーなど、単方向操作のみが含まれます。 実際のビジネスシナリオでは、ファイルの読み取りと書き込みが行われる場合、プライマリ NAS ファイルシステムに障害が発生したときに追加のポリシーを適用する必要があります。
書き込み可用性の要件が高くない場合は、NAS ファイルシステムのプライマリ/セカンダリスイッチオーバーが実行されたときにファイルの書き込みを無効にできます。
書き込み可用性の要件が高い場合は、プライマリ NAS ファイルシステムが回復した直後に、ECS インスタンスによってホストされるアプリケーションのファイル操作をプライマリ NAS ファイルシステムのマウントディレクトリにリダイレクトしないでください。 プライマリ NAS ファイルシステムのダウンタイム中にセカンダリ NAS ファイルシステムにファイルが作成された場合は、ファイルをプライマリ NAS ファイルシステムに同期してから、プライマリ NAS ファイルシステムに切り替えます。 スイッチバック中は、セカンダリ NAS ファイルシステムでファイルの変更が発生しないようにするか、セカンダリ NAS ファイルシステムのファイルの変更をプライマリ NAS ファイルシステムに同期してください。
NAS ファイルシステムをマウントする ECS インスタンスが 実行中 状態であることを確認します。
NAS コンソール にログインします。
左側のナビゲーションウィンドウで、ファイルシステムファイルシステムリスト を選択します。
異なるゾーンに 2 つの NAS ファイルシステムを作成します。
プライマリ NAS ファイルシステムとして NAS ファイルシステムを作成します。
[ファイルシステムの作成] をクリックします。 [ファイルシステムの選択] ダイアログボックスで、[汎用 NAS ファイルシステムの作成] を選択します。 次のパラメータをメモしておきます。 その他のパラメータの構成方法については、「ファイルシステムを作成する」をご参照ください。
リージョン: ECS インスタンスが作成されるリージョンを選択します。 この例では、中国 (杭州) が選択されています。
ゾーン: 杭州ゾーン F を選択します。
ストレージクラス: キャパシティを選択します。
プロトコルタイプ: NFS を選択します。
VPC: ECS インスタンスが存在する VPC を選択します。
ステップ a を繰り返して、中国 (杭州) リージョン内の別のゾーンにセカンダリ NAS ファイルシステムとして NAS ファイルシステムを作成します。 例: 杭州ゾーン K。
ステップ 1 で作成した ECS インスタンスに NAS ファイルシステムをマウントします。
たとえば、プライマリ NAS ファイルシステムを ECS インスタンスの
/nas_master
パスに、セカンダリ NAS ファイルシステムを ECS インスタンスの/nas_backup
パスにマウントするとします。ファイルシステムリストページで、プライマリ NAS ファイルシステムを見つけ、操作列の [マウント] をクリックします。
画面の指示に従って、NAS ファイルシステムをマウントします。
次の表に示すパラメーターに注意し、ビジネス要件に基づいて他のパラメーターを構成します。詳細については、「NAS コンソールで NFS ファイルシステムをマウントする」をご参照ください。
パラメータ
説明
例
ECS インスタンスの選択
ステップ 1 で作成した ECS インスタンスを選択します。
ECS_01
マウントパス
ECS インスタンスの絶対パスを入力します。
/nas_master
自動マウント
デフォルトでは、[起動時に自動マウント] が選択されています。 ECS インスタンスを再起動するときに、ファイルシステムを再マウントする必要はありません。
[起動時に自動マウント]
プロトコルタイプ
NFSv3 を選択します。
NFSv3
ステップ a から c を繰り返して、セカンダリ NAS ファイルシステムを ECS インスタンスのパスにマウントします。 この例では、
/nas_backup
パスが使用されています。
共有アクセスを提供するファイルを、プライマリ NAS ファイルシステムがマウントされている
/nas_master
パスに移動します。ECS インスタンスに接続します。詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
共有アクセスを提供するファイルをプライマリ NAS ファイルシステムに移動します。
sudo cp -Lvr <共有アクセスを提供するファイルの絶対パス> <NAS ファイルシステムのマウントパス>
たとえば、Web サービスのフロントエンド html フォルダとフォルダ内のファイルを /usr/share/nginx/html パスから、プライマリ NAS ファイルシステムがマウントされている
/nas_master
パスに移動します。sudo cp -Lvr /usr/share/nginx/html /nas_master
ECS インスタンスに接続します。 詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
inotify-tools と rsync ユーティリティをインストールします。
sudo yum install inotify-tools rsync
NAS ファイルシステムのゾーン間ディザスタリカバリを実装するためのスクリプトを準備します。
スクリプトをダウンロードします。
sync_nas.sh
: このスクリプトは、inode notify (inotify) メカニズムと sync ツールを使用して、プライマリ NAS ファイルシステムのデータ変更をセカンダリ NAS ファイルシステムに自動的に同期します。 このスクリプトは、ビジネス要件に基づいて変更できます。sync_check_switch.sh
: このスクリプトは、プライマリ NAS ファイルシステムが使用可能かどうかを確認します。 プライマリ NAS ファイルシステムが使用可能な場合、プライマリ NAS ファイルシステムはサービスの提供を続けます。 それ以外の場合、スクリプトはサービスをセカンダリ NAS ファイルシステムに切り替えます。 プライマリ NAS ファイルシステムが回復すると、スクリプトはサービスをプライマリ NAS ファイルシステムに戻します。 このスクリプトは、ビジネス要件に基づいて変更できます。
sudo wget -P /etc/systemd/system/ https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20231017/pftz/sync_nas.sh sudo wget -P /etc/systemd/system/ https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20230925/wmaj/sync_check_switch.sh
スクリプトに実行権限を付与します。
sudo chmod +x /etc/systemd/system/sync_nas.sh sudo chmod +x /etc/systemd/system/sync_check_switch.sh
システム起動時にスクリプトが起動するように構成します。 これにより、ECS インスタンスが障害から回復した後、プライマリ NAS ファイルシステムの可用性をチェックし、NAS ファイルシステムのプライマリ/セカンダリスイッチオーバーを実行できるようになります。
sync-check-switch.service
ファイルを作成します。sudo vi /etc/systemd/system/sync-check-switch.service
ファイルに次の内容を追加します。
Esc
キーを押し、:wq
と入力し、Enter
キーを押してファイルを保存して閉じます。[Unit] Description=Sync Check Switch After=network.target [Service] ExecStart=/etc/systemd/system/sync_check_switch.sh RestartSec=3 Restart=always [Install] WantedBy=default.target
sync-nas.service
ファイルを作成します。sudo vi /etc/systemd/system/sync-nas.service
ファイルに次のコンテンツを追加します。
[Esc]
キーを押し、:wq
と入力し、[Enter]
キーを押してファイルを保存して閉じます。[Unit] Description=Sync NAS Service After=network.target [Service] ExecStart=/etc/systemd/system/sync_nas.sh Restart=always RestartSec=3 [Install] WantedBy=default.target
次のコマンドを実行して、systemd 構成を再読み込みします。
sudo systemctl daemon-reload
次のコマンドを実行して、スクリプトを起動し、システム起動時にスクリプトが起動するように有効にします。
sudo systemctl start sync-nas.service sudo systemctl enable sync-check-switch.service sudo systemctl start sync-check-switch.service sudo systemctl enable sync-nas.service
ステップ 3: CLB インスタンスをデプロイしてビジネスの高可用性を実現する
Web サービスがデプロイされている ECS インスタンスをコピーする
高可用性アーキテクチャには、少なくとも 2 つの ECS インスタンスが必要です。 ステップ 1 で作成した ECS インスタンスをコピーして、オペレーティングシステム、Web サーバー、データベースなど、同じ環境構成とデータを持つ新しいインスタンスを作成できます。
Web サービスがデプロイされている ECS インスタンス (ECS_01) からカスタムイメージを作成します。
ECS コンソール にログインします。
左側のナビゲーションウィンドウで、
を選択します。上部ナビゲーションバーで、コピーする ECS インスタンスが存在するリージョンを選択します。
[インスタンス] ページで、コピーする ECS インスタンスを見つけ、[操作] 列の
を選択します。[イメージ名] フィールドにイメージ名を入力し、[リソースグループ] ドロップダウンリストから
High-availability Test Resource Group
を選択して、[OK] をクリックします。左側のナビゲーションウィンドウで、
を選択します。 [イメージ] ページの [カスタムイメージ] タブで、カスタムイメージの作成の進行状況を表示します。イメージの作成プロセスには数分かかります。 カスタムイメージが作成されると、[進捗状況] 列に 100% が表示され、[ステータス] 列に [利用可能] が表示されます。
カスタムイメージから ECS インスタンス (ECS_02) を作成します。
左側のナビゲーションウィンドウで、
を選択します。
CLB インスタンスを作成する
CLB インスタンスは、ネットワークトラフィックをさまざまなバックエンドサーバーに転送して、SPOF を排除します。 バックエンドサーバーに障害が発生した場合、CLB インスタンスはリクエストを他の正常なバックエンドサーバーに分散して、サービスの継続性と安定性を確保します。
CLB コンソール にログインします。
上部ナビゲーションバーの左上隅で、リソースグループを選択し、リージョンを選択します。この例では、
High-availability Test Resource Group
リソースグループが選択されています。[インスタンス] ページで、[CLB の作成] をクリックします。
次のパラメータをメモしておき、ビジネス要件に基づいて他のパラメータを構成します。 詳細については、「CLB インスタンスを作成する」をご参照ください。
課金方法: 従量課金。 CLB インスタンスは、従量課金制の課金方法のみをサポートしています。
リージョン: ECS インスタンスが存在するリージョンを選択します。 この例では、中国 (杭州) が選択されています。
インスタンスの課金方法: CLCU 別課金を選択します。
インスタンスタイプ: インターネットを選択します。
IP バージョン: IPv4 を選択します。
[リソースグループ]:
High-availability Test Resource Group
を選択します。
インスタンス ページで、作成した CLB インスタンスを見つけ、[操作] 列の [リスナーの設定] をクリックし、画面の指示に従ってパラメータを構成します。
次の表で説明されているパラメータをメモしておき、ビジネス要件に基づいて他のパラメータを構成します。 詳細については、「CLB インスタンスを構成する」をご参照ください。
ステップ
説明
プロトコルとリスナー
[リスナープロトコルの選択]:
HTTPS
を選択します。[リスニングポート]:
80
と入力します。
バックエンドサーバー
[デフォルトサーバーグループ] を選択し、[さらに追加] をクリックして、作成した 2 つの ECS インスタンスを追加します。 ポートパラメータを 80 に設定します。
ヘルスチェック
バックエンドサーバーの状態を監視するために、ヘルスチェックをオンにすることをお勧めします。 これにより、バックエンドサーバーの可用性を判断できます。