2012-12-19 8 views
8

私は複数のウェブロール間の負荷のバランスをとるためにazureが提供するオプションを試していました。なぜRoleEnvironment.StatusCheckイベントを購読するのではなく、LoadBalancerProbeを使用する必要がありますか?

これを行う方法は3つあります。

最初は何もしないで、デフォルトの(ラウンドロビン)実装を行うようにします。

2番目の可能性は、ServiceDefinitionFileにカスタムLoadBalancerProbeを定義することです。これは試しても動作しませんでした。私の理解から、カスタムのaspxページは、その役割に対してステータスチェックが実行されるたびに呼び出されます。 HTTPレスポンスコードに応じて、ロールのステータスはビジー状態に変わります。しかし、これは決して起こっていません。 また、私は実際にカスタムLoadBalancingProbeを定義するための例を見つけることができませんでした。

私はこれを行うための代替方法を探しました。

ここでiamはRoleEnvironment.StatusCheckイベントに登録しています。これにより、いくつかのロジックを実装することができ、結果に応じて、役割の状態をビジー状態と使用可能状態に設定します。

私の質問1)カスタムLoadBalancerProbeがMSDNの説明どおりに動作すると仮定すると、StatusCheckEventの購読とカスタムプローブの使用の違いは何ですか?

2)カスタムロードバランサプローブが機能しないのはなぜですか? iamは、現在のところAzureエミュレータでテストしていますが、トラフィックはまだエミュレータでビジー状態に設定されているにも関わらず、Webroleインスタンスにルーティングされていることを十分に認識しています。 しかし、私のカスタムプローブはwebroleinstancesのステータスをまったく変更しません。

私の知る限り、webrole instance_n_0のステータスをビジー状態に設定する必要があります。

public class LoadBalanceController : Controller 
{ 

    public ActionResult Index() 
    { 

     WebOperationContext woc = WebOperationContext.Current; 
     if(RoleEnvironment.CurrentRoleInstance.Id.ToLower().Contains("_0")) 
     { 
      woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.ServiceUnavailable; 
     }else 
     { 
      woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; 

     }   

     return View(); //not relevant 
    } 

アイブ氏はまた私のservicedefinitionfileをconfigeredとカスタムプローブで定義されたhealthcheck.aspxを呼び出すときに、このコントローラ/アクションにリダイレクトするようにルートを設定します。

<LoadBalancerProbes> 
    <LoadBalancerProbe name="WebRoleBalancerProbeHttp" protocol="http" path="healthcheck.aspx" intervalInSeconds="5" timeoutInSeconds="100"/> 
</LoadBalancerProbes> 
... 
<InputEndpoint name="EndpointWeb" protocol="http" port="80" loadBalancerProbe="WebRoleBalancerProbeHttp"/> 

ルート:

routes.MapRoute(
      name: "HealhCheck", 
      url: "healthcheck.aspx", 
      defaults: new { controller = "LoadBalance", action = "Index", id = UrlParameter.Optional } 

     ); 

答えて

0

カスタムプローブは、その差のために働いていない理由わからない:ヘルスチェックイベントはインスタンスが利用可能かどうかを発表することができますが、あなたドンこれがどれほど頻繁に呼び出されるかという点で柔軟性はありません。また、カスタムポート(またはポートタイプ)でリッスンする別個のサービスを起動することもできません。

任意のタイプのポートリスナーを作成して、別個のexeでもヘルスを判断できるので、カスタムプローブではるかに柔軟性があります。

仮想マシンでは、仮想マシンにはゲストエージェントが実行されておらず、ヘルスチェックイベントが提供されていないため、これはヘルスプローブの唯一の方法です。

関連する問題