跨可用性區域部署 Service Fabric 受控叢集
可用性區域是高可用性供應項目,可保護應用程式和資料不受資料中心故障所影響。 可用性區域是 Azure 區域內獨特的實體位置,配備獨立的電源、冷卻和網路。
Service Fabric 受控叢集支援跨多個可用性區域進行部署,以提供區域復原能力。 這項設定可確保重要系統服務和應用程式具有高可用性,能夠防止單一失敗點的發生。 只有經選定的區域才會提供 Azure 可用性區域。 如需詳細資訊,請參閱 Azure 可用性區域概觀。
注意
只有標準 SKU 叢集才能進行可用性區域跨越。
有提供範例範本:Service Fabric 跨可用性區域範本
可讓 Azure Service Fabric 受控叢集具有區域復原能力的拓撲
注意
跨可用性區域之間主要節點類型的優點,實際上只會針對三個區域看到,而非僅兩個區域。
分散於 可用性區域 (AZ) 的 Service Fabric 叢集可確保叢集狀態的高可用性。
受控叢集的建議拓撲需要下列資源:
- 必須是標準的叢集 SKU
- 主要節點類型應該至少有 9 個節點 (每個 AZ 中 3 個) 才能獲得最佳復原能力,但最少有 6 個 (每個 AZ 中 2 個) 時便可支援。
- 次要節點類型應該至少有六個節點,以獲得最佳復原能力,但支援最少三個節點。
注意
僅支援部署 3 個可用性區域。
注意
無法將受控叢集中的虛擬機器擴展集從非跨區域叢集就地變更為跨區域叢集。
此圖顯示 Azure Service Fabric 的可用性區域結構
範例節點清單會描述跨區域虛擬機器擴展集的 FD/UD 格式
跨區域分佈服務複本:當服務部署在跨區域的節點類型時,系統會放置複本,以確保其位於不同的區域。 當每個節點類型中的容錯網域都已設定區域資訊(例如 FD = fd:/zone1/1 等)時,可確保此區隔。 例如:對於服務的五個復本或實例,散發是 2-2-1,運行時間會嘗試確保跨 AZ 的相等分配。
使用者服務複本設定:部署在跨可用性區域節點類型上的具狀態使用者服務應使用下列組態進行設定:目標 = 9、最小值 = 5 的複本計數。 當某個區域停止運作時,此組態可協助服務保持正常運作,因為仍有 6 個複本會在另外兩個區域中持續運作。 這類案例中的應用程式升級也會順利進行。
區域停止運作案例:當某個區域停止運作時,該區域中的所有節點都會顯示為停止運作。 這些節點上的服務複本也會停止運作。 因為其他區域中有複本,所以服務會在主要複本容錯移轉至正常運作的區域時保持有回應的狀態。 服務會以警告狀態顯示,因為不符合目標複本計數,而且虛擬機 (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 受控叢集現在可以就地移轉至跨可用性區域。 受支援的案例包含在具有三個可用性區域的區域中建立的叢集,以及在部署後提供三個可用性區域的區域中建立的叢集。
需求:
- 標準 SKU 叢集。
- 區域中的三個可用性區域。
注意
移轉到區域復原設定可能會導致透過負載平衡器的外部連線能力短暫中斷,但不會影響叢集健康情況。 當需要建立新的公用 IP 以使網路具有區域失敗復原能力時,就會發生這種情況。 請相應地規劃移轉。
首先,判斷是否需要新的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,而且不會對外部連線造成影響。
使用 客戶起始的轉換,起始針對受控叢集建立的基礎記憶體帳戶從本地備援記憶體 (LRS) 轉換為區域備援記憶體 (ZRS)。 需要移轉的儲存體帳戶的資源群組將在與受控叢集資源相同的訂用帳戶下採用 "SFC_ClusterId" (例如,SFC_9240df2f-71ab-4733-a641-53a8464d992d) 形式。
將區域屬性新增至現有的節點類型
此步驟會將與節點類型相關聯的受控虛擬機擴展集設定為區域復原性,確保新增至該節點的任何新 VM 都會部署在可用性區域 (分區 VM) 之間。 如果指定的節點類型是主要節點類型,資源提供者會視需要執行公用IP的移轉,以及叢集 FQDN DNS 更新,以成為區域復原。
getazresiliencystatus
使用 API 瞭解此步驟的含意。
使用 apiVersion 2022-02-01-preview 或更高版本。
將
zones
參數設定為["1", "2", "3"]
現有的節點類型:{ "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"] ... } }
調整節點類型以新增 區域 節點並移除 區域 節點
在這個階段,虛擬機器擴展集 會標示為區域復原。 因此,相應增加時,新增的節點將會是區域性節點,而相應減少時,將會移除區域節點。 此方法可讓您彈性地調整
vmInstanceCount
節點類型上的 屬性,以符合容量需求的任何順序進行調整。例如,如果初始 vmInstanceCount 設定為 6(表示六個區域節點),您可以執行兩個部署:
- 第一個部署:將 vmInstanceCount 增加至 12,以新增 6 個 區域性節點。
- 第二個部署:將 vmInstanceCount 減少為 6,以移除所有 區域 節點。
在整個程式中,您可以檢查
getazresiliencystatus
API 以擷取進度狀態,如下所示。 一旦每個節點類型至少有六個區域節點和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 }
注意
主要節點類型的調整程式需要額外的時間,因為節點的每個新增或移除都會起始 Service Fabric 叢集升級。
標記叢集對區域失敗的復原能力
這一步驟有助於未來的部署,因為其確保未來所有節點類型的部署皆跨可用性區域,因此叢集仍然能夠容忍 AZ 失敗。 在叢集 ARM 範本中設定
zonalResiliency: true
並進行部署以將叢集標記為區域復原能力,並確保所有新節點類型部署跨可用性區域。 只有在所有節點類型至少有六個區域節點和0個區域節點時,才允許此更新。{ "apiVersion": "2022-02-01-preview", "type": "Microsoft.ServiceFabric/managedclusters", "zonalResiliency": "true" }
完成後,您還可以在入口網站中類似於
Zonal resiliency True
的概觀 -> 屬性下查看已更新狀態。驗證所有資源皆為區域復原能力
若要驗證受控叢集資源的可用性區域復原狀態,請使用下列 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 或更新版本。
- 使用新的屬性 zonalUpdateMode 修改 ARM 範本。
"resources": [
{
"type": "Microsoft.ServiceFabric/managedClusters",
"apiVersion": "2022-10-01-preview",
'''
"properties": {
'''
"zonalResiliency": true,
"zonalUpdateMode": "fast",
...
}
}]
使用 az sf cluster node add PowerShell 命令將節點新增至叢集。
使用 az sf cluster node remove PowerShell 命令從叢集中移除節點。