1

自動スケーリングの使用方法を示す Microsoft の例に取り組んでいます ( http://www.windowsazure.com/en-us/develop/net/how-to-guides/autoscaling/ )。クラウドにインストールされた worker ロールはパフォーマンス カウンターを生成し、ローカルでは、コンソール アプリケーションがこのカウンターを読み取り、自動スケーリングを適用します。

すべて問題ないように見えます。パフォーマンス カウンターは WADPerformanceCountersTable から利用でき、コンソール アプリケーションはストレージに正しくアクセスしますが、WADPerformanceCountersTable 内でワーカー ロールを見つけることができません。これは生成された例外です:

Autoscaling General Error: 2001 : 
Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.DataPointsCollection.DataPointsCollectionException:
Could not retrieve performance counter with name '\Processor(_Total)\% Processor Time'
for target 'WorkerRoleExample' from the WADPerformanceCountersTable table. ---> 
System.ArgumentOutOfRangeException: Could not retrieve the role with alias 'WorkerRoleExample' from the service information store.
Please review the service information store to fix this.

自動スケーリング アプリケーション ブロックの構成ファイル (両方のファイルはコンソール アプリケーションの一部です):

rules.xml:

<?xml version="1.0" encoding="utf-8" ?>
<rules xmlns="http://schemas.microsoft.com/practices/2011/entlib/autoscaling/rules">
  <constraintRules>
    <rule name="default" enabled="true" rank="1" description="The default constraint rule">
      <actions>
        <range min="1" max="2" target="WorkerRoleExample"/>
      </actions>
    </rule>
  </constraintRules>
  <reactiveRules>
    <rule name="ScaleUpOnHighUtilization" rank="10" description="Scale up the web role" enabled="true" >
      <when>
        <any>
          <greaterOrEqual operand="WebRoleA_CPU_Avg_5m" than="60"/>
        </any>
      </when>
      <actions>
        <scale target="WorkerRoleExample" by="1"/>
      </actions>
    </rule>
    <rule name="ScaleDownOnLowUtilization" rank="10" description="Scale up the web role" enabled="true" >
      <when>
        <all>
          <less operand="WebRoleA_CPU_Avg_5m" than="60"/>
        </all>
      </when>
      <actions>
        <scale target="WorkerRoleExample" by="-1"/>
      </actions>
    </rule>
  </reactiveRules>
  <operands>
    <performanceCounter alias="WebRoleA_CPU_Avg_5m"
                        performanceCounterName="\Processor(_Total)\% Processor Time"
                        source ="WorkerRoleExample"
                        timespan="00:05:00" aggregate="Average"/>
  </operands>
</rules>

サービス.xml:

<?xml version="1.0" encoding="utf-8" ?>
<serviceModel xmlns="http://schemas.microsoft.com/practices/2011/entlib/autoscaling/serviceModel">
  <subscriptions>
    <subscription name="TestingWorkerRole"
                  certificateThumbprint="**************"
                  subscriptionId="**************"
                  certificateStoreLocation="CurrentUser"
                  certificateStoreName="My">
      <services>
        <service dnsPrefix="**************" slot="Staging">
          <roles>
            <role alias="AutoscalingApplicationRole"
                  roleName="WorkerRoleExample"
                  wadStorageAccountName="targetstorage"/>
          </roles>
        </service>
      </services>
      <storageAccounts>
        <storageAccount alias="targetstorage"
          connectionString="DefaultEndpointsProtocol=https;AccountName=*****;AccountKey=*******">
        </storageAccount>
      </storageAccounts>
    </subscription>
  </subscriptions>
</serviceModel>

クラウドで実行されているワーカー ロールは、パフォーマンス カウンターを生成します。

public override bool OnStart()
{
    // Set the maximum number of concurrent connections 
    ServicePointManager.DefaultConnectionLimit = 12;

    CreatePerformanceCounters();

    return base.OnStart();
}

private static void CreatePerformanceCounters()
{
    DiagnosticMonitorConfiguration diagConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();

    var procTimeConfig = new PerformanceCounterConfiguration();
    procTimeConfig.CounterSpecifier = @"\Processor(_Total)\% Processor Time";
    procTimeConfig.SampleRate = TimeSpan.FromSeconds(10);

    diagConfig.PerformanceCounters.DataSources.Add(procTimeConfig);
    diagConfig.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);

    DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagConfig);
}
4

1 に答える 1

1

services.xml で、これを変更してみてください。

<role alias="AutoscalingApplicationRole"
              roleName="WorkerRoleExample"
              wadStorageAccountName="targetstorage"/>

これに:

<role alias="WorkerRoleExample"
              roleName="WorkerRoleExample"
              wadStorageAccountName="targetstorage"/>

rules.xml要素のtarget属性で、要素のscale一致alias attributeを探します- 探していましたが、見つかりませんでした。roleservices.xmlWorkerRoleExample

上記の代わりに、rules.xml で次のように変更した場合にも機能します。

<scale target="WorkerRoleExample" by="1"/>

これに:

<scale target="AutoscalingApplicationRole" by="1"/>
于 2013-04-22T11:47:38.580 に答える