2012-04-17 16 views
4

私は、コマンドラインプログラムを実行しているが(Redisのことを起こる)は、Windows AzureのWorkerロール内の、これまでのところは良いAzureのサービス定義ファイル - ProgramEntryPoint、実行時のIPアドレスとポート

<WorkerRole name="Worker" vmsize="Small"> 
    <Runtime executionContext="limited"> 
     <Environment> 
     <Variable name="ADDRESS"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='Redis']/@address" /> 
     </Variable> 
     <Variable name="PORT"> 
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='Redis']/@port" /> 
     </Variable> 
     </Environment> 
     <EntryPoint> 
     <ProgramEntryPoint commandLine="redis-server.exe" setReadyOnProcessStart="true" /> 
     </EntryPoint> 
    </Runtime> 
    <Endpoints> 
     <InternalEndpoint name="Redis" protocol="tcp" port="6379" /> 
    </Endpoints> 
    </WorkerRole> 

を次のようにProgramEntryPointを使用して(できます)。 は、私は今あなたが、私はそのマスターは、IPアドレスとポートを使用しているスレーブサーバに伝える必要があります見ることができます別のWorkerRole

<WorkerRole name="SlaveWorker" vmsize="Small"> 
    <Runtime executionContext="limited"> 
     <EntryPoint> 
     <ProgramEntryPoint commandLine="echo slaveof %ADDRESS% %PORT% | redis-server.exe -" setReadyOnProcessStart="true" /> 
     </EntryPoint> 
    </Runtime>  
    <Imports> 
     <Import moduleName="Diagnostics" /> 
     <Import moduleName="RemoteAccess" /> 
    </Imports> 
    <Endpoints> 
     <InternalEndpoint name="Redis" protocol="tcp" port="6379" /> 
    </Endpoints>  
    </WorkerRole> 

にサーバーのスレーブ・インスタンスを実行したいです。 Azureがその役割のためのネットワークリソースを割り当てておくまで、私は知らないものです。私はseen @smarx do something along these linesです。仕事に行くのではない -

しかし、私は私の場合

  1. に私は1つの役割で環境変数を設定し、別でそれらを使用するように願っています。このと間違って物事のカップルがあるかもしれないと思います。

  2. 権利データは、私はRedisの-SERVER.EXEにそれを渡す必要がある道が始まり


    におけるエコーとの有効なエントリポイントとして認識されていない利用可能であったとしても
  1. コードを使用して ワーカーロールのランタイムIPアドレスとポートを知る唯一の方法ですか、設定ファイルに ファイルがないのですか?
  2. 私がIPアドレスとポートを取得できれば、 コマンドラインをpowershellスクリプトまたはバッチファイルにプッシュする唯一の方法ですか?

あなたのご意見ありがとうございます。

答えて

2

あるインスタンスが別のIPアドレスを知る唯一の方法は、a)プログラムによって取得するか、b)他のインスタンスがそれを既知の場所(テーブルストレージなど)にパブリッシュする場合です。あなたのケースでは、スレーブロールにRoleEnvironmentにアクセスするスタートアップタスクを(Powershellを介して)実行させ、環境変数をマスタのIPアドレスで設定するのが最も簡単な場合があります。これを「シンプル」タイプとすると、ProgramEntryPointが(ブロッキングする)前に実行され、コマンドラインでenv varを使用することができます。しかし、ここで

カップル思考:

  1. がどのように使用してロール内で複数インスタンスを処理していますか?単一のインスタンスを実行することだけを計画していますか?
  2. 2つの異なる役割が必要ですか?選挙を経てマスターとなる2つのインスタンスを持つ単一のロールはどうしてでしょうか?
+0

回答ありがとうRyan(遅れて申し訳ありませんが、私は電子メールの回答を購読していたと思っていましたが、そうではありませんでした)。 –

+0

1.私は、VMごとに1つのredisインスタンスを実行しようとしていました。 2.私は同じことを思っていました。スケールアウトするためにインスタンスを使用することができれば、確かに便利です。各インスタンスは異なるポートでリスンする必要があります。私はredisが選挙を内部的にどうやってどうやって行うのか、あるいはそれぞれのredisサーバにコマンドを送信し、それを適切に構成する役割スタートアッププログラムが必要かどうかはわかりません。研究のための話題。 –

関連する問題