Windows Azure仮想マシンの自動スケール

Posted: 2013/07/01 カテゴリー: Uncategorized
タグ:, , , ,

先週開催されたBuildで、Windows Azureクラウド サービス、仮想マシン、Webサイトに対する自動スケール機能のプレビューがリリースされました。

自動スケール: 実際の使用量をベースにした、アプリの動的なスケールアップ/ダウン

Windows Azureの主要な利点の1つは、需要の変化に応じてアプリケーションを動的にスケールできることです。ですが、以前は、アプリケーションのスケールを手動で変更するか、アプリケーションを自動的にスケールするために (WASABi (英語 / 日本語 (機械翻訳))やMetricsHubといった) 追加のツールを使う必要がありました。本日、自動スケールがWindows Azureに直接組み込まれることを発表します。本日のリリースで、クラウド サービス、仮想マシン、Webサイトに対して、自動スケールが有効化されました (モバイル サービスのサポートは、近いうちに予定されています)。

Windows Azureクラウド サービス、Webサイトでは、Windows Azure管理ポータルで対象のクラウド サービス、Webサイトに進み、「スケール」タブを選択することで、簡単に自動スケールの設定を行うことができます。

しかし、Windows Azure仮想マシンには「スケール」タブがありません。Windows Azure仮想マシンでは、どのように自動スケールを有効化するのでしょうか?

その方法に進む前に、3つのアプリケーション実行環境のスケーリングについて、復習しておきましょう。

Windows Azureクラウド サービス

PaaS型のWindows Azureクラウド サービスでは、クラウド サービスに、2つのデプロイメント (運用、またはステージング) があります。デプロイメントには、1つ以上のロール (Webロール、またはワーカー ロール) が含まれます。ロールには、1つ以上のインスタンスが含まれます。(SLAのためには、ロールに対して2つ以上のインスタンスが必要です。)

インスタンスの実体はVMです。Windows Azureは、マシン障害時やホストOS、ゲストOSの更新時にも、指定されたインスタンスのサイズ (スペック) と台数を維持され続けるようにします。 (たとえば、Webロールとして2CPUコア Mサイズ4台、ワーカーロールとして4CPUコア Lサイズ 2台、といった形で指定します。)

ロールに含まれる各インスタンスは、完全に均質で、まったく同じサーバー機能を提供します。インターネットからのアクセスは、Windows Azureロード バランサーを経由する必要があり、このロード バランサーがリクエストの負荷分散を行います。

これまでも、手動のスケールアウト、スケールインは容易でした。単に、管理ポータルやAPIで、ロールのインスタンス数を増減するだけです。デプロイされたパッケージ (cspkgファイル) の中に、ロールのテンプレート (アプリケーション コード) が含まれているので、スケールアウトの場合は、新規ゲストOSを準備し、アプリケーション コードを展開すれば、既存のインスタンスと均質な新規インスタンスが出来上がります。後は、Windows Azureロード バランサーのルーティング先に、この新規インスタンスが追加されるだけです。

スケールインも同様です。既存インスタンスの一部が削除され、Windows Azureロード バランサーのルーティング先からも外されます。

今回の新機能である自動スケールは、このスケーリング処理を、手動ではなく自動で行うものです。

Windows Azure Webサイト

Windows Azure Webサイトでは、無料、共有、標準という3つの層があります。無料層、共有層は、1つのVM上で多くのユーザーのWebサイトが同時に稼働する、マルチテナント型です。標準層では、自分だけが占有するVMの上で、自分のWebサイトを実行できます。いずれの場合でも、インスタンス数 (Webサイトが動くWebサーバー (VM) の数) を構成可能です。

手動でインスタンス数を増減することで、簡単にスケールアウト、スケールインが可能です。また、今回の新機能である自動スケールを使うことで、自動的にスケーリングすることも可能です。

Windows Azure仮想マシン

Windows Azure仮想マシンでは、仮想マシンは、1つのOSディスクと、0個以上のデータ ディスクから構成されます。OSディスクは、Windows ServerやLinuxのOSがインストールされたディスクです。1つのイメージ (OSディスクのテンプレート) をもとに、異なるOSディスクを作成して、複数の仮想マシンを起動可能です。

1つ以上の仮想マシンを、1つの「クラウド サービス」に配置できます。仮想マシンを新規作成すると、(特定のcloudapp.netホスト名に関連付けられた) 新規クラウド サービスの中に配置されます。2つ目以降の仮想マシンの作成時には、既存の仮想マシンに「接続」するオプションを選択することで、既存のクラウド サービスに、追加の仮想マシンを配置可能です。複数の仮想マシンを同じクラウド サービスに配置することで、(Windows Azureロード バランサーを介さない) 仮想マシン間の直接通信が可能になります。

また、1つのクラウド サービスに配置された複数の仮想マシンのうちの一部の仮想マシンを「可用性セット」に配置することができます。1つの可用性セットに配置された複数の仮想マシンは、2つの異なるラックに配置されることで、ラック ワイドな障害が発生したとしても、すべての仮想マシンに同時に障害が起きないことが保証されています。

インターネットからアクセスされる仮想マシンには「エンドポイント」を指定することで、Windows Azureロード バランサー経由でのアクセスを許可できます。クラウド サービス内の複数のカ仮想マシンが同じサーバー機能を提供している場合は、「負荷分散エンドポイント」を作成することで、ロード バランサーに負荷分散させることもできます。

これらを踏まえると、たとえば、Windows Azure仮想マシンで複数の均質なWebサーバーを起動してスケーリングしたい場合は、Webサーバーのイメージを作成しておき、1つのクラウド サービス内の1つの可用性セットに複数の仮想マシンを配置し、それらの仮想マシンに対して負荷分散エンドポイントを作成することになります。

手動でスケールアウトする場合は、同じイメージを基にして既存の可用性セットに新規仮想マシンを追加し、その仮想マシンを負荷分散エンドポイントのルーティング先にも追加します。手動でスケールインする場合は、可用性セット内の仮想マシンを停止します。(停止すれば、負荷分散エンドポイントのルーティング先からは自動的に外されます。)

今回の新機能である自動スケールは、このスケーリング処理を、手動ではなく自動で行うものです。スケーリングの対象は、個別の「仮想マシン」ではなく、「クラウド サービス」内の「可用性セット」です。

これで、なぜ、管理ポータルの「仮想マシン」に「スケール」タブが存在しないか分かったはずです。

仮想マシンの自動スケールを設定するには、管理ポータルで、対象の「仮想マシン」ではなく、対象の複数の仮想マシンが属する「クラウド サービス」の「スケール」タブに進みます。これによって、Windows Azureクラウド サービス、Webサイトの場合と類似した、自動スケールの設定画面が表示されます。

可用性セットにある仮想マシン数が、自動スケール可能な仮想マシン数 (インスタンス数) の上限となるので、事前にスケールアウトの上限までの仮想マシンを追加しておく必要があります。

スケールインした場合は、VMは停止されます。最近の改善で、停止されたVMの課金は行われなくなっています!

1

2

コメント
  1. Vito より:

    Great post! I was able to easily find the “hidden feature”

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中