背景: MVC3 アプリケーションを 2 つの Azure Web ロール インスタンスにデプロイしましたが、これらのインスタンスの 1 つが失敗する可能性をテストする方法について混乱しています。
インスタンスの 1 つがオフラインになったときに Web ロール コードがシームレスに動作することをテストする方法はありますか?
それらのいずれかを手動で停止できますか? または、すべてのトラフィックをサーバーの 1 つに強制するようにロード バランサーを構成しますか?
ありがとう!
背景: MVC3 アプリケーションを 2 つの Azure Web ロール インスタンスにデプロイしましたが、これらのインスタンスの 1 つが失敗する可能性をテストする方法について混乱しています。
インスタンスの 1 つがオフラインになったときに Web ロール コードがシームレスに動作することをテストする方法はありますか?
それらのいずれかを手動で停止できますか? または、すべてのトラフィックをサーバーの 1 つに強制するようにロード バランサーを構成しますか?
ありがとう!
インスタンスへの RDP アクセスが有効になっている場合、インスタンスが正常に実行されている場合でも、コードをまったく記述せずに、LoadBalancer から 1 つまたは複数のインスタンスを非常に簡単に削除できます。インスタンスに RDP を実行し、PowerShell スクリプトを使用してインスタンスをロードバランサーから切り離すだけです。次のブログで、正確な手順を説明しました。
上記の詳細は、合計 M インスタンスから N インスタンスを削除して、負荷テストを実行するのにも役立ちます。
StatusCheck イベントを使用してステータスを Busy に設定すると、インスタンスはロードバランサーからそれ以上リクエストを受信しなくなります。インスタンスにメッセージを送信するコードを記述して、インスタンスをしばらくの間ビジー状態に設定することができます (たとえば、キューを使用)。
public override bool OnStart()
{
RoleEnvironment.StatusCheck += RoleEnvironmentStatusCheck;
return base.OnStart();
}
// Use the busy object to indicate that the status of the role instance must be Busy
private volatile bool busy = true;
private void RoleEnvironmentStatusCheck(object sender, RoleInstanceStatusCheckEventArgs e)
{
If (this.busy)
{
// Sets the status of the role instance to Busy for a short interval.
// If you want the role instance to remain busy, add code to
// continue to call the SetBusy method
e.SetBusy();
}
}
さらに、(Windows Azure ポータルまたはリモート デスクトップを使用して) インスタンスを再起動することもできます。
Steve Marx (別名 smarx) は、 WazMonkeyというツールを開発しました。これは、 Amazon AWS で壊れたインスタンスをシミュレートするために netflix チームによって開発されたツールChaos Monkeyの Azure 版です。WazMonkey は、windows azure クラウド サービスのインスタンスをランダムに終了して、クラウド アプリケーションの回復力をテストします。