Availability Zones をまたがる Service Fabric マネージド クラスターのデプロイ

Azure の Availability Zones は高可用性を備えたサービスで、アプリケーションとデータをデータセンターの障害から保護します。 可用性ゾーンは、Azure リージョン内に独立した電源、冷却手段、ネットワークを備えた一意の物理的な場所です。

Service Fabric マネージド クラスターは、ゾーンの回復性を提供するために、複数の Availability Zones にまたがるデプロイをサポートしています。 このように構成すると、重要なシステム サービスとアプリケーションの高可用性によって、単一障害点の発生を防ぐことができます。 Azure Availability Zones は一部のリージョンでのみ使用できます。 詳細については、「Azure の Availability Zones の概要」をご覧ください。

Note

Availability Zone のスパニングは、Standard SKU クラスターでのみ使用できます。

サンプル テンプレートを使用できます。Service Fabric クロス可用性ゾーン テンプレート

ゾーンの回復性に優れた Azure Service Fabric マネージド クラスターのトポロジ

注意

可用性ゾーンをまたいでプライマリ ノード タイプを拡張する利点が実際に得られるのは 3 つのゾーンの場合だけであり、2 つの場合は得られません。

Availability Zones (AZ) 間で分散された Service Fabric クラスターでは、クラスター状態の高可用性が確保されます。

マネージド クラスターの推奨トポロジーには、以下のリソースが必要です。

  • クラスター SKU は Standard である必要があります。
  • 最適な回復性を得るには、プライマリ ノード タイプに少なくとも 9 つ (各 AZ に 3 つ) のノードが必要ですが、サポートされる最小数は 6 つ (各 AZ に 2 つ) です。
  • 最適な回復性を得るには、セカンダリ ノードの種類に少なくとも 6 個のノードが必要ですが、サポートされる最小数は 3 個です。

Note

サポートされている Availability Zone のデプロイは 3 つのみです。

Note

マネージド クラスター内の仮想マシンのスケールセットを、ゾーンにまたがらないクラスターからゾーンにまたがるクラスターへの一括変更を実行することはできません。

Azure Service Fabric 可用性ゾーンのアーキテクチャを示す図Azure Service Fabric 可用性ゾーンのアーキテクチャ

ゾーンにまたがる仮想マシン スケール セット内の FD と UD の形式を示すサンプル ノード リスト

ゾーンにまたがる仮想マシン スケール セット内の FD と UD の形式を示すサンプル ノード リスト。

ゾーン間でのサービス レプリカの分散: ゾーンにまたがる node 型にサービスがデプロイされている場合、レプリカが必ず別々のゾーンに存在するように配置されます。 これらの各ノードの種類に存在するノード上の障害ドメインはゾーン情報を使用して構成されているため、この分離が保証されます (つまり、FD = fd:/zone1/1 など)。 たとえば、サービスに 5 個のレプリカまたはインスタンスがある場合、分散は 2-2-1 となり、ランタイムは AZ 間での均等な分散を試みます。

ユーザー サービス レプリカの構成: クロス可用性ゾーン node 型にデプロイされたステートフル ユーザー サービスは、レプリカ数のターゲット値 9、最小値 5 という構成値を使用して構成する必要があります。 この構成を使用すると、1 つのゾーンがダウンした場合でも 6 つのレプリカが他の 2 つのゾーンで稼働しているため、サービスを機能させることができます。 このようなシナリオでは、アプリケーションのアップグレードも実行できます。

ゾーン ダウンのシナリオ: ゾーンがダウンすると、そのゾーン内のすべてのノードがダウン状態として表示されます。 これらのノードのサービス レプリカもダウンします。 他のゾーンにレプリカがあるため、正常に動作しているゾーンにプライマリ レプリカがフェールオーバーすることで、サービスは引き続き応答します。 ターゲット レプリカ数にまだ到達しておらず、かつ仮想マシン (VM) 数が、定義されている最小ターゲット レプリカ サイズを上回っているため、サービスは警告状態として表示されます。 結果として、Service Fabric ロード バランサーでは、構成されているターゲット レプリカの数と一致するように、作業ゾーンでレプリカが起動します。 この時点で、サービスは正常と表示されるはずです。 ダウンしたゾーンが復帰すると、ロード バランサーによってすべてのサービス レプリカがすべてのゾーンにわたって均等に分散されます。

ネットワーク構成

詳細については、「Service Fabric マネージド クラスターのネットワーク設定を構成する」を参照してください。

ゾーンの回復性に優れた Azure Service Fabric マネージド クラスターを有効にする

ゾーン回復性のある Azure Service Fabric マネージド クラスターを有効にするには、次の ZonalResiliency プロパティを含める必要があります。これにより、クラスターのゾーン回復性の有無を指定します。

{
  "apiVersion": "2021-05-01",
  "type": "Microsoft.ServiceFabric/managedclusters",
  "properties": {
  ...
  "zonalResiliency": "true",
  ...
  }
}

既存のゾーン回復性がないクラスターをゾーン回復可能に移行する (プレビュー)

複数の可用性ゾーンにまたがっていない既存の Service Fabric マネージド クラスターを、複数の可用性ゾーンにまたがるようにインプレース移行できるようになりました。 サポートされるシナリオとして、3 つの可用性ゾーンがあるリージョンに作成されたクラスターや、デプロイ後に 3 つの可用性ゾーンが使用できるようになったリージョンのクラスターなどがあります。

要件:

注意

ゾーン回復性がある構成に移行すると、ロード バランサーを介した外部接続が一時的に失われることがありますが、クラスターの正常性に影響はありません。 これは、ゾーン障害に対する回復性があるネットワークにするために、新しいパブリック IP を作成する必要がある場合に発生します。 必要に応じて移行の計画を立ててください。

  1. まず、新しい IP が必要かどうか、およびゾーン回復性を高めるために移行する必要があるリソースを決定します。 マネージド クラスターのリソースの現在の可用性ゾーンの回復状態を取得するには、次の API 呼び出しを使用します。

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ServiceFabric/managedClusters/{clusterName}/getazresiliencystatus?api-version=2022-02-01-preview
    

    または、次のように Az モジュールを使用できます。

    Select-AzSubscription -SubscriptionId {subscriptionId}
    Invoke-AzResourceAction -ResourceId /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ServiceFabric/managedClusters/{clusterName} -Action getazresiliencystatus -ApiVersion 2022-02-01-preview
    

    このコマンドで、次のような応答が得られるはずです。

    {
    "baseResourceStatus" :[
      {
      "resourceName": "sfmccluster1"
      "resourceType": "Microsoft.Storage/storageAccounts"
      "isZoneResilient": false
      },
      {
      "resourceName": "PublicIP-sfmccluster1"
      "resourceType": "Microsoft.Network/publicIPAddresses"
      "isZoneResilient": false
      },
      {
      "resourceName": "primary"
      "resourceType": "Microsoft.Compute/virutalmachinescalesets"
      "isZoneResilient": false
      }
    ],
    "isClusterZoneResilient": false
    }
    

    パブリック IP リソースがゾーン回復性がない場合、クラスターの移行によって外部接続が短時間失われます。 この接続の切断は、移行によって新しいパブリック IP が設定され、クラスターの完全修飾ドメイン名 (FQDN) が新しい IP に更新されるためです。 パブリック IP リソースがゾーン回復性がある場合、移行によってパブリック IP リソースまたは FQDN は変更されず、外部接続に影響はありません。

  2. 顧客が開始した変換を使用し、マネージド クラスター用に作成された基礎ストレージ アカウントのローカル冗長ストレージ (LRS) からゾーン冗長ストレージ (ZRS) への変換を開始します。 移行する必要があるストレージ アカウントのリソース グループは、マネージド クラスター リソースと同じサブスクリプションの "SFC_ClusterId" (例: SFC_9240df2f-71ab-4733-a641-53a8464d992d) の形式になります。

  3. ゾーン プロパティを既存のノードの種類に追加する

    この手順では、ノードの種類に関連付けられているマネージド仮想マシン スケール セットをゾーン回復性として構成し、追加された新しい VM が可用性ゾーン (ゾーン VM) 全体にデプロイされるようにします。 指定されたノードの種類がプライマリである場合、パブリック IP の移行を実行し、必要に応じてクラスター FQDN DNS 更新と共に実行するようにトリガーして、ゾーンの回復性を高めます。 getazresiliencystatus API を使用して、このステップの影響を理解します。

  • apiVersion 2022-02-01-preview 以降を使用します。

  • ["1", "2", "3"] に設定した zones パラメーターを既存のノードの種類に追加する:

    {
       "apiVersion": "2024-02-01-preview",
       "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
       "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]",
       "location": "[resourcegroup().location]",
       "dependsOn": [
         "[concat('Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'))]"
       ],
       "properties": {
         ...
         "isPrimary": true,
         "zones": ["1", "2", "3"]
         ...
       }
    },
    {
       "apiVersion": "2024-02-01-preview",
       "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
       "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeNameSecondary'))]",
       "location": "[resourcegroup().location]",
       "dependsOn": [
         "[concat('Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'))]"
       ],
       "properties": {
         ...
         "isPrimary": false,
         "zones": ["1", "2", "3"]
         ...
       }
    }
    
  1. ノードの種類をスケーリングしてゾーン ノードを追加し、リージョン ノードを削除します。

    この段階で、Virtual Machine Scale Sets はゾーン回復性としてマークされます。 そのため、スケールアップする場合は新しく追加されたノードはゾーンになり、スケールダウンする場合はリージョン ノードは削除されます。 このアプローチでは、ノードの種類の vmInstanceCount プロパティを調整することで、容量要件に沿った任意の順序で柔軟にスケーリングできます。

    たとえば、初期 vmInstanceCount が 6 (6 つのリージョン ノードを示す) に設定されている場合、次の 2 つのデプロイを実行できます。

    • 最初のデプロイ vmInstanceCount を 12 に増やし、6 つのゾーン ノードを追加します。
    • 2 回目のデプロイ vmInstanceCount を 6 に減らして、リージョン ノードをすべて削除します。

    プロセス中、getazresiliencystatus API を確認して、以下に図示した進捗状況を取得します。 各ノードの種類に最低 6 個のゾーン ノードと 0 個のリージョン ノードがあれば、プロセスは完了とみなされます。

    {
    "baseResourceStatus" :[
      {
      "resourceName": "sfmccluster1"
      "resourceType": "Microsoft.Storage/storageAccounts"
      "isZoneResilient": true
      },
      {
      "resourceName": "PublicIP-sfmccluster1"
      "resourceType": "Microsoft.Network/publicIPAddresses"
      "isZoneResilient": true
      },
      {
      "resourceName": "ntPrimary"
      "resourceType": "Microsoft.Compute/virutalmachinescalesets"
      "isZoneResilient": false
      "details": "Status: InProgress, ZonalNodes: 6, RegionalNodes: 6"
      },
      {
      "resourceName": "ntSecondary"
      "resourceType": "Microsoft.Compute/virutalmachinescalesets"
      "isZoneResilient": true
      "details": "Status: Done, ZonalNodes: 6, RegionalNodes: 0"
      }
    ],
    "isClusterZoneResilient": false
    }
    

    Note

    ノードを追加または削除するたびに Service Fabric クラスターのアップグレードが開始されるため、プライマリ ノードの種類のスケーリング プロセスにはさらに時間が必要です。

  2. ゾーン障害に対するクラスターの回復性をマークする

    このステップは、ノード型のすべての将来のデプロイが可用性ゾーン間にまたがり、クラスターが AZ (可用性ゾーン) 障害に対して引き続き耐性があるため、将来のデプロイに役立ちます。 クラスター ARM テンプレートにzonalResiliency: true を設定し、クラスターをゾーン回復性対応としてマークするためのデプロイを行い、新しいノードの型をデプロイした場合に常に複数の可用性ゾーンにまたがるようにします。 この更新は、すべてのノードの種類に少なくとも 6 個のゾーン ノードと 0 個のリージョン ノードがある場合にのみ許可されます。

    {
      "apiVersion": "2022-02-01-preview",
      "type": "Microsoft.ServiceFabric/managedclusters",
      "zonalResiliency": "true"
    }
    

    完了すると、ポータルの [概要 ->Zonal resiliency Trueに類似したプロパティ] の更新された状態を確認することもできます。

  3. すべてのリソースがゾーンの回復性を検証する

    マネージド クラスターのリソースの可用性ゾーンの回復状態を検証するには、次の GET API 呼び出しを使用します。

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ServiceFabric/managedClusters/{clusterName}/getazresiliencystatus?api-version=2022-02-01-preview
    

    この API 呼び出しで、次のような応答が得られるはずです。

    {
     "baseResourceStatus" :[
       {
       "resourceName": "sfmccluster1"
       "resourceType": "Microsoft.Storage/storageAccounts"
       "isZoneResilient": true
       },
       {
       "resourceName": "PublicIP-sfmccluster1"
       "resourceType": "Microsoft.Network/publicIPAddresses"
       "isZoneResilient": true
       },
       {
         "resourceName": "ntPrimary"
         "resourceType": "Microsoft.Compute/virutalmachinescalesets"
         "isZoneResilient": true
         "details": "Status: Done, ZonalNodes: 6, RegionalNodes: 0"
       },
       {
         "resourceName": "ntSecondary"
         "resourceType": "Microsoft.Compute/virutalmachinescalesets"
         "isZoneResilient": true
         "details": "Status: Done, ZonalNodes: 6, RegionalNodes: 0"
       }
     ],
     "isClusterZoneResilient": true
    }
    

    問題が発生した場合は、サポートにお問い合わせください。

Service Fabric マネージド クラスターで FastZonalUpdate を有効にする (プレビュー)

Service Fabric マネージド クラスターでは、可用性ゾーンあたりの最大アップグレード ドメイン数を減らすことで、クラスターとアプリケーションのアップグレードを高速化できます。 現在の既定の構成では、複数の AZ nodetype に最大 15 個のアップグレード ドメイン (UD) を含めることができます。 この多数の UD によってアップグレード速度が低下していました。 新しい構成により最大 UD が減り、更新が高速化され、アップグレードの安全性はそのまま維持されます。

更新するには、ARM テンプレートを介して、zonalUpdateMode プロパティを "fast" に設定し、ノードの追加や各 nodetype へのノードの削除などのノードの種類属性を変更する必要があります (必要な手順 2 と 3 を参照)。 Service Fabric マネージド クラスター リソースの apiVersion は、2022-10-01-preview 以降である必要があります。

  1. 新しいプロパティ zonalUpdateMode を使用して ARM テンプレートを変更します。
   "resources": [
        {
            "type": "Microsoft.ServiceFabric/managedClusters",
            "apiVersion": "2022-10-01-preview",
            '''
            "properties": {
                '''
                "zonalResiliency": true,
                "zonalUpdateMode": "fast",
                ...
            }
        }]
  1. クラスターにノードを追加するには、az sf cluster node add PowerShell コマンドを使用します。

  2. クラスターからノードを削除するには、az sf cluster node remove PowerShell コマンドを使用します。