次の方法で共有


ステートレス専用ノード タイプを使用した Azure Service Fabric クラスターのデプロイ

Service Fabric ノード タイプには、ある時点でステートフル サービスがノードに配置されるという固有の前提があります。 ステートレス ノード タイプを使用することで、ノード タイプに対するこの仮定を変更します。これにより、ノード タイプでスケールアウト操作の高速化、ブロンズ持続性での自動 OS アップグレードのサポート、および単一の仮想マシン スケール セット内の 100 以上のノードへのスケールアウトなどの他の機能を使用することができます。

  • プライマリ ノード タイプをステートレスに構成することはできません
  • ステートレス ノード タイプは、ブロンズ持続性レベルでのみサポートされています
  • ステートレス ノード タイプは Service Fabric ランタイム バージョン 7.1.409 以上でのみサポートされています

サンプル テンプレートを使用できます。Service Fabric のステートレス ノード タイプのテンプレート

Service Fabric クラスターでステートレス ノード タイプを有効化する

クラスター リソースで 1 つまたは複数のノード タイプをステートレスとして設定するには、isStateless プロパティを true に設定します。 ステートレス ノード タイプで Service Fabric クラスターをデプロイする場合は、クラスター リソースに少なくとも 1 つのプライマリ ノード タイプがあるようにしてください。

  • Service Fabric クラスター リソース apiVersion は、"2020-12-01-preview" 以上である必要があります。
{
    "nodeTypes": [
    {
        "name": "[parameters('vmNodeType0Name')]",
        "applicationPorts": {
            "endPort": "[parameters('nt0applicationEndPort')]",
            "startPort": "[parameters('nt0applicationStartPort')]"
        },
        "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]",
        "durabilityLevel": "Silver",
        "ephemeralPorts": {
            "endPort": "[parameters('nt0ephemeralEndPort')]",
            "startPort": "[parameters('nt0ephemeralStartPort')]"
        },
        "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]",
        "isPrimary": true,
        "isStateless": false, // Primary Node Types cannot be stateless
        "vmInstanceCount": "[parameters('nt0InstanceCount')]"
    },
    {
        "name": "[parameters('vmNodeType1Name')]",
        "applicationPorts": {
            "endPort": "[parameters('nt1applicationEndPort')]",
            "startPort": "[parameters('nt1applicationStartPort')]"
        },
        "clientConnectionEndpointPort": "[parameters('nt1fabricTcpGatewayPort')]",
        "durabilityLevel": "Bronze",
        "ephemeralPorts": {
            "endPort": "[parameters('nt1ephemeralEndPort')]",
            "startPort": "[parameters('nt1ephemeralStartPort')]"
        },
        "httpGatewayEndpointPort": "[parameters('nt1fabricHttpGatewayPort')]",
        "isPrimary": false,
        "isStateless": true,
        "vmInstanceCount": "[parameters('nt1InstanceCount')]"
    }    
    ],
}

ステートレス ノード タイプ用に仮想マシン スケール セットを構成する

ステートレス ノード タイプを有効にするには、基になる仮想マシン スケール セットのリソースを次の方法で構成する必要があります。

  • singlePlacementGroup プロパティは、100 台を超える VM に拡張する場合は false に設定する必要があります。
  • スケール セットのupgradePolicyは、Rollingに設定する必要があります。
  • ローリング アップグレード モードを使用するには、アプリケーション正常性拡張機能または正常性プローブが構成されている必要があります。 正常性プローブまたはアプリケーションの正常性拡張機能の構成の詳細については、こちらのドキュメントを参照してください。次に示すように、ステートレス ノード タイプの既定の構成を使用して正常性プローブを構成します。 アプリケーションがノード タイプにデプロイされると、正常性プローブまたは正常性拡張機能のポートを変更して、アプリケーションの実際の正常性を監視できます。

Note

ステートレスなノード タイプで自動スケーリングを使用している間、スケールダウン操作後は、ノードの状態は自動的には消去されません。 自動スケーリング時にダウン ノードのノードの状態を消去するには、Service Fabric 自動スケーリング ヘルパーを使用することをお勧めします。

{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.Compute/virtualMachineScaleSets",
    "name": "[parameters('vmNodeType1Name')]",
    "location": "[parameters('computeLocation')]",
    "properties": {
        "overprovision": "[variables('overProvision')]",
        "upgradePolicy": {
          "mode": "Rolling",
          "automaticOSUpgradePolicy": {
            "enableAutomaticOSUpgrade": true
          }
        },
        "platformFaultDomainCount": 5
    },
    "virtualMachineProfile": {
    "extensionProfile": {
    "extensions": [
    {
    "name": "[concat(parameters('vmNodeType1Name'),'_ServiceFabricNode')]",
    "properties": {
        "type": "ServiceFabricNode",
        "autoUpgradeMinorVersion": false,
        "publisher": "Microsoft.Azure.ServiceFabric",
        "settings": {
            "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
            "nodeTypeRef": "[parameters('vmNodeType1Name')]",
            "dataPath": "D:\\\\SvcFab",
            "durabilityLevel": "Bronze",
            "certificate": {
                "thumbprint": "[parameters('certificateThumbprint')]",
                "x509StoreName": "[parameters('certificateStoreValue')]"
            },
            "systemLogUploadSettings": {
                "Enabled": true
            },
        },
        "typeHandlerVersion": "1.1"
    }
    },
    {
        "type": "extensions",
        "name": "HealthExtension",
        "properties": {
            "publisher": "Microsoft.ManagedServices",
            "type": "ApplicationHealthWindows",
            "autoUpgradeMinorVersion": true,
            "typeHandlerVersion": "1.0",
            "settings": {
            "protocol": "tcp",
            "port": "19000"
            }
            }
        },
    ]
}

複数の Availability Zones を持つステートレス ノード タイプの構成

複数の Availability Zones にまたがるステートレス ノード タイプを構成するには、次のようないくつかの変更と共に、こちらのドキュメントに従ってください。

  • 複数の配置グループを有効にする必要がある場合は、singlePlacementGroup : false を設定します。
  • upgradePolicy: Rollingを設定して、上述したようにアプリケーション正常性拡張機能または正常性プローブを追加します。
  • 仮想マシン スケール セットに platformFaultDomainCount : 5 を設定します。

複数の Availability Zones を持つステートレス ノード タイプの構成に関する参照情報については、テンプレートを参照してください

ネットワーク要件

パブリック IP とロード バランサーのリソース

仮想マシン スケール セット リソースで 100 以上の VM へのスケーリングを有効にするには、その仮想マシン スケール セットによって参照されているロード バランサーと IP リソースの両方で Standard SKU が使用されている必要があります。 SKU プロパティを使わずに IP リソースを作成すると、100 より多くの VM へのスケーリングがサポートされない Basic SKU が作成されます。 Standard SKU ロード バランサーは、既定で外部からのトラフィックをすべてブロックします。外部のトラフィックを許可するには、NSG をサブネットにデプロイする必要があります。

{
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Network/publicIPAddresses",
    "name": "[concat('LB','-', parameters('clusterName')]",
    "location": "[parameters('computeLocation')]",
    "sku": {
        "name": "Standard"
    }
}
{
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Network/loadBalancers",
    "name": "[concat('LB','-', parameters('clusterName')]", 
    "location": "[parameters('computeLocation')]",
    "dependsOn": [
        "[concat('Microsoft.Network/networkSecurityGroups/', concat('nsg', parameters('subnet0Name')))]"
    ],
    "properties": {
        "addressSpace": {
            "addressPrefixes": [
                "[parameters('addressPrefix')]"
            ]
        },
        "subnets": [
        {
            "name": "[parameters('subnet0Name')]",
            "properties": {
                "addressPrefix": "[parameters('subnet0Prefix')]",
                "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', concat('nsg', parameters('subnet0Name')))]"
              }
            }
          }
        ]
    },
    "sku": {
        "name": "Standard"
    }
}

Note

パブリック IP およびロード バランサー リソースへの SKU のインプレース変更を行うことはできません。

仮想マシン スケール セットの NAT 規則

ロード バランサーのインバウンド NAT 規則は、仮想マシン スケール セットの NAT プールと一致する必要があります。 各仮想マシン スケール セットに一意のインバウンド NAT プールが必要です。

{
"inboundNatPools": [
    {
        "name": "LoadBalancerBEAddressNatPool0",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "50999",
            "frontendPortRangeStart": "50000",
            "protocol": "tcp"
        }
    },
    {
        "name": "LoadBalancerBEAddressNatPool1",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "51999",
            "frontendPortRangeStart": "51000",
            "protocol": "tcp"
        }
    },
    {
        "name": "LoadBalancerBEAddressNatPool2",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "52999",
            "frontendPortRangeStart": "52000",
            "protocol": "tcp"
        }
    }
    ]
}

Standard SKU Load Balancer のアウトバウンド規則

Standard パブリック IP では、Basic SKU の使用時と比べて、アウトバウンド接続に新しい機能と異なる動作が導入されています。 Standard SKU を操作するときにアウトバウンド接続が必要な場合は、Standard パブリック IP アドレスまたは Standard パブリック Load Balancer で明示的に定義する必要があります。 詳細については、アウトバウンド接続Azure Standard Load Balancer に関するページを参照してください。

Note

標準テンプレートでは、既定ですべてのアウトバウンド トラフィックを許可する NSG が参照されます。 インバウンド トラフィックは、Service Fabric 管理操作に必要なポートに制限されます。 NSG 規則は、要件に合わせて変更できます。

Note

Standard SKU SLB を使用しているすべての Service Fabric クラスターでは、ポート 443 での送信トラフィックを許可する規則を確実に各ノード タイプに設定する必要があります。 これはクラスターの設定を完了するために必要であり、このルールのないデプロイは失敗します。

クラスターでステートレス ノード タイプの使用に移行する

すべての移行シナリオで、新しいステートレス専用ノード タイプを追加する必要があります。 既存のノードの種類をステートレス専用に移行することはできません。

Basic SKU で IP を使っていたクラスターを移行するには、最初に Standard SKU を使ってまったく新しい IP リソースを作成する必要があります。 これらのリソースをインプレースで更新することはできません。

使用する新しいステートレス ノード タイプで、新しい LB と IP が参照されている必要があります。 上の例では、ステートレス ノード タイプとして使用するよう新しい仮想マシン スケール セットのリソースが追加されています。 これらの仮想マシン スケール セットは、新しく作成された LB と IP を参照し、Service Fabric クラスター リソース内でステートレス ノード タイプとしてマークされます。

まず、既存の Resource Manager テンプレートに新しいリソースを追加する必要があります。 これらのリソースには次が含まれます。

  • Standard SKU を使用したパブリック IP リソース。
  • Standard SKU を使用した Load Balancer リソース。
  • 仮想マシン スケール セットをデプロイするサブネットによって参照されている NSG。

リソースのデプロイが完了したら、元のクラスターから削除したいノード タイプのノードを無効にしていくことができます。

次の手順