상태 비저장 전용 노드 유형을 사용하여 Azure Service Fabric 클러스터 배포

Service Fabric 노드 유형은 특정 시점에 상태 저장 서비스가 노드에 배치될 수 있다는 가정 하에 제공됩니다. 상태 비저장 노드 유형은 노드 유형에 대한 이러한 가정을 변경하므로 노드 유형에서 더 빠른 스케일 아웃 작업, Bronze 내구성에 대한 자동 OS 업그레이드 지원, 단일 가상 머신 확장 집합에서 100개 넘는 노드로 스케일 아웃 등 다른 기능을 사용할 수 있습니다.

  • 주 노드 유형은 상태 비저장으로 구성할 수 없음
  • 상태 비저장 노드 유형은 Bronze 내구성 수준에서만 지원됨
  • 상태 비저장 노드 유형은 Service Fabric Runtime 버전 7.1.409 이상에서만 지원됩니다.

사용 가능한 샘플 템플릿: Service Fabric 상태 비저장 노드 유형 템플릿

Service Fabric 클러스터에서 상태 비저장 노드 유형 사용

클러스터 리소스에서 하나 이상의 노드 유형을 상태 비저장으로 설정하려면 isStateless 속성을 true로 설정합니다. 상태 비저장 노드 유형을 사용하여 Service Fabric 클러스터를 배포하는 경우 클러스터 리소스에 하나 이상의 주 노드 유형을 포함해야 합니다.

  • 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')]"
    }    
    ],
}

상태 비저장 노드 유형에 대한 가상 머신 확장 집합 구성

상태 비저장 노드 유형을 사용하려면 다음과 같은 방법으로 기본 가상 머신 확장 집합 리소스를 구성해야 합니다.

  • VM을 100개 넘게 확장해야 하는 경우 false로 설정해야 하는 singlePlacementGroup 속성 값입니다.
  • 확장 집합의 upgradePolicy롤링으로 설정되어야 합니다.
  • 롤링 업그레이드 모드를 사용하려면 애플리케이션 상태 확장 또는 상태 프로브를 구성해야 합니다. 상태 프로브 또는 애플리케이션 상태 확장 구성에 대한 자세한 내용은 이 문서를 참조합니다. 아래에 제안된 상태 비저장 노드 유형에 대한 기본 구성으로 상태 프로브를 구성합니다. 애플리케이션이 노드 유형에 배포되면 상태 프로브/상태 확장 포트를 변경하여 실제 애플리케이션 상태를 모니터링할 수 있습니다.

참고 항목

상태 비저장 노드 유형과 함께 자동 크기 조정을 사용하는 동안 스케일 다운 작업 후 노드 상태가 자동으로 정리되지 않습니다. 자동 크기 조정 중에 다운 노드의 NodeState를 정리하기 위해 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"
            }
            }
        },
    ]
}

여러 가용성 영역이 있는 상태 비저장 노드 유형 구성

여러 가용성 영역에 걸쳐 있는 상태 비저장 노드 유형을 구성하려면 다음과 같은 몇 가지 변경 사항과 함께 여기 문서를 따르세요.

  • 여러 배치 그룹을 사용하도록 설정해야 하는 경우 singlePlacementGroup: false를 설정합니다.
  • 위에서 언급한 대로 upgradePolicy: 롤링을 설정하고 애플리케이션 상태 확장/상태 프로브를 추가합니다.
  • 가상 머신 확장 집합에 대해 platformFaultDomainCount: 5를 설정합니다.

참고로 여러 가용성 영역이 있는 상태 비저장 노드 유형을 구성하기 위한 템플릿을 참조하세요.

네트워킹 요구 사항

공용 IP 및 Load Balancer 리소스

가상 머신 확장 집합 리소스에서 VM을 100개 이상 확장하려면 해당 가상 머신 확장 집합에서 참조하는 부하 분산 장치와 IP 리소스가 모두 표준 SKU를 사용해야 합니다. SKU 속성 없이 부하 분산 장치 또는 IP 리소스를 만들면 100개 이상의 VM 확장을 지원하지 않는 기본 SKU가 만들어집니다. 표준 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"
    }
}

참고 항목

공용 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"
        }
    }
    ]
}

표준 SKU Load Balancer 아웃바운드 규칙

표준 Load Balancer 및 표준 공용 IP는 기본 SKU 사용과 비교할 때 아웃바운드 연결에 새로운 기능 및 서로 다른 동작을 도입합니다. 표준 SKU로 작업하는 경우 아웃바운드 연결을 하려는 경우 표준 공용 IP 주소 또는 표준 공용 Load Balancer를 사용하여 명시적으로 정의해야 합니다. 자세한 내용은 아웃바운드 연결Azure 표준 Load Balancer를 참조하세요.

참고 항목

표준 템플릿은 기본적으로 모든 아웃바운드 트래픽을 허용하는 NSG를 참조합니다. 인바운드 트래픽은 Service Fabric 관리 작업에 필요한 포트로 제한됩니다. NSG 규칙은 요구 사항에 맞게 수정할 수 있습니다.

참고 항목

표준 SKU SLB를 사용하는 Service Fabric 클러스터는 각 노드 유형에 포트 443에서 아웃바운드 트래픽을 허용하는 규칙이 있는지 확인해야 합니다. 클러스터 설정을 완료하는 데 필요하기 때문입니다. 이 규칙이 없으면 배포가 실패합니다.

클러스터에서 상태 비저장 노드 유형을 사용하도록 마이그레이션

모든 마이그레이션 시나리오에 대해 새로운 상태 비저장 전용 노드 유형을 추가해야 합니다. 기존 노드 유형은 상태 비저장 전용으로 마이그레이션할 수 없습니다.

기본 SKU와 함께 부하 분산 장치 및 IP를 사용하던 클러스터를 마이그레이션하려면 먼저 표준 SKU를 사용하여 완전히 새로운 부하 분산 장치 및 IP 리소스를 만들어야 합니다. 이러한 리소스는 내부에서 업데이트할 수 없습니다.

새 LB 및 IP는 사용하려는 새 상태 비저장 노드 유형에서 참조되어야 합니다. 위의 예제에서는 상태 비저장 노드 형식에 사용할 새 가상 머신 확장 집합 리소스를 추가합니다. 이러한 가상 머신 확장 집합은 새로 생성된 LB 및 IP를 참조하고 Service Fabric 클러스터 리소스에서 상태 비저장 노드 유형으로 표시됩니다.

시작하려면 기존 Resource Manager 템플릿에 새 리소스를 추가해야 합니다. 해당 리소스는 다음과 같습니다.

  • 표준 SKU를 사용하는 공용 IP 리소스입니다.
  • 표준 SKU를 사용하는 Load Balancer 리소스입니다.
  • Virtual Machine Scale Sets를 배포하는 서브넷에서 참조하는 NSG

리소스 배포가 완료되면 원래 클러스터에서 제거하려는 노드 형식의 노드를 사용하지 않도록 설정할 수 있습니다.

다음 단계