如何移除 Service Fabric 節點類型
此文章說明如何透過將現有的節點類型從叢集移除,來調整 Azure Service Fabric 叢集的規模。 Service Fabric 叢集是一組由網路連接的虛擬或實體機器,可用來將您的微服務部署到其中並進行管理。 屬於叢集一部分的機器或 VM 都稱為節點。 虛擬機器擴展集是一個 Azure 計算資源,可以用來將一組虛擬機器當做一個集合加以部署和管理。 在 Azure 叢集中定義的每個節點類型,會設定為不同的擴展集。 隨後,您即可個別管理每個節點類型。 建立 Service Fabric 叢集之後,您可以透過移除節點類型 (虛擬機器擴展集) 與其所有節點,來水平調整叢集規模。 您可以隨時調整叢集,即使正在叢集上執行工作負載,也是如此。 在叢集進行調整時,您的應用程式也會自動調整。
警告
不建議經常使用此方法移除生產環境叢集的節點類型。 它是非常危險的命令,因為它會刪除節點類型後的虛擬機器擴展集資源。
持久性特性
使用 Remove-AzServiceFabricNodeType 時,安全性會優先於速度。 節點類型必須是銀級或金級持久性層級,因為:
- 銅級不提供關於儲存狀態資訊的任何保證。
- 銀級和金級持久性可以攔截對擴展集的任何變更。
- 金級也可提供您對擴展集下 Azure 更新的控制。
Service Fabric 會「協調」基礎結構變更和更新,如此資料就不會遺失。 但移除具銅級持久性的節點類型時,則可能遺失狀態資訊。 若要移除的是主要節點類型,且應用程式為無狀態,銅級則可接受。 當您在生產環境中執行具狀態工作負載時,最低設定應該是銀級。 同樣地,針對生產環境案例,主要節點類型應該一律為銀級或金級。
深入了解銅級持久性
當移除銅級的節點類型時,該節點類型中的所有節點會立即停機。 Service Fabric 不會攔截任何銅級節點擴展集更新,因此所有的 VM 會立即停機。 如果您有具狀態的任何項目在這些節點上,資料會遺失。 現在,即使您是無狀態的,Service Fabric 中的所有節點都會參與通道,因此整個鄰近的資料都會遺失,這可能會造成叢集本身不穩定。
移除節點類型
開始程序前,請先處理這項必要條件。
- 叢集狀況良好。
- 移除節點類型後仍會有足夠容量,例如要放置所需複本計數的節點數目。
若服務具有使用節點類型的位置條件約束,針對所有這類服務移開該節點類型。
- 修改應用程式/服務資訊清單,不再參考該節點類型。
- 部署變更。
接著驗證:
- 該節點類型的所屬節點已不再執行進行上述修改的所有服務。
- 所有服務皆狀況良好。
將非主要節點類型的節點類型取消標示 (跳過非主要節點類型)
- 找出部署所用的 Azure Resource Manager 範本。
- 在 Service Fabric 區段中,尋找節點類型相關區段。
- 將 isPrimary 屬性變更為 false。 * * 請勿移除此工作中的節點類型相關區段。
- 部署已修改的 Azure Resource Manager 範本。 * * 視叢集設定而定,此步驟可能需要一些時間。
接著驗證:
- 入口網站中的 Service Fabric 區段表示叢集已就緒。
- 叢集狀況良好。
- 屬於此節點類型的節點皆未標示為種子節點。
停用該節點類型中的各節點。
使用 PowerShell 連線至叢集,並執行下列步驟。
$nodeType = "" # specify the name of node type $nodes = Get-ServiceFabricNode foreach($node in $nodes) { if ($node.NodeType -eq $nodeType) { $node.NodeName Disable-ServiceFabricNode -Intent RemoveNode -NodeName $node.NodeName -Force } }
- 若為銅級持久性,請等待所有節點處於已停用狀態
- 若為銀級和金級持久性,某些節點將處於已停用狀態,其餘則為正在停用狀態。 針對狀態為正在停用的節點,查看詳細資料索引標籤,若全都停滯在確保基礎結構服務分割區的仲裁,便可放心繼續。
停止節點類型的資料。
使用 PowerShell 連線至叢集,並執行下列步驟。
foreach($node in $nodes) { if ($node.NodeType -eq $nodeType) { $node.NodeName Start-ServiceFabricNodeTransition -Stop -OperationId (New-Guid) -NodeInstanceId $node.NodeInstanceId -NodeName $node.NodeName -StopDurationInSeconds 10000 } }
等待節點類型的所有節點皆標示為關閉。
在原始的虛擬機器擴展集內,解除配置節點
登入已部署擴展集的 Azure 訂用帳戶,並移除虛擬機器擴展集。
$scaleSetName="myscaleset" $scaleSetResourceType="Microsoft.Compute/virtualMachineScaleSets" Remove-AzResource -ResourceName $scaleSetName -ResourceType $scaleSetResourceType -ResourceGroupName $resourceGroupName -Force
移除該節點類型的資料。
使用 PowerShell 連線至叢集,並執行下列步驟。
foreach($node in $nodes) { if ($node.NodeType -eq $nodeType) { $node.NodeName Remove-ServiceFabricNodeState -NodeName $node.NodeName -Force } }
等待該叢集的所有節點皆已移除。 這些節點不應顯示於 SFX。
自 Service Fabric 區段移除節點類型。
- 找出部署所用的 Azure Resource Manager 範本。
- 在 Service Fabric 區段中,尋找節點類型相關區段。
- 移除對應至該節點類型的區段。
- 僅限銀級以上的持久性叢集:請在叢集資源下
properties
新增applicationDeltaHealthPolicies
(如下所示),更新範本中的叢集資源,並將健全狀況原則設為略過 fabric:/System application health。 下列原則應會略過現有錯誤,但不允許發生新的健康情況錯誤。
"upgradeDescription": { "forceRestart": false, "upgradeReplicaSetCheckTimeout": "10675199.02:48:05.4775807", "healthCheckWaitDuration": "00:05:00", "healthCheckStableDuration": "00:05:00", "healthCheckRetryTimeout": "00:45:00", "upgradeTimeout": "12:00:00", "upgradeDomainTimeout": "02:00:00", "healthPolicy": { "maxPercentUnhealthyNodes": 100, "maxPercentUnhealthyApplications": 100 }, "deltaHealthPolicy": { "maxPercentDeltaUnhealthyNodes": 0, "maxPercentUpgradeDomainDeltaUnhealthyNodes": 0, "maxPercentDeltaUnhealthyApplications": 0, "applicationDeltaHealthPolicies": { "fabric:/System": { "defaultServiceTypeDeltaHealthPolicy": { "maxPercentDeltaUnhealthyServices": 0 } } } } },
- 部署已修改的 Azure Resource Manager 範本。 ** 此步驟需要一段時間,通常最多兩個小時。 這項升級會將設定變更為 InfrastructureService,因此需要重新啟動節點。 在此情況下即會略過
forceRestart
。 參數upgradeReplicaSetCheckTimeout
用於指定 Service Fabric 等待分割區轉為安全狀態 (若尚未處於安全狀態) 的時間上限。 當節點的所有分割區皆通過安全性檢查,Service Fabric 便會於該節點繼續進行升級。 參數upgradeTimeout
的值可縮減為 6 小時,但應使用安全性最高的 12 小時。
接著驗證:
- 入口網站中的 Service Fabric 資源顯示已就緒。
從 ARM 範本移除節點類型相關資源的所有參考。
- 找出部署所用的 Azure Resource Manager 範本。
- 從範本中移除虛擬機器擴展集及節點類型相關的其他資源。
- 部署變更。
接下來:
- 等候部署完成。
移除已不再使用的節點類型相關資源。 範例 Load Balancer 和公用 IP。
- 若要移除這些資源,您可使用步驟 6 中用於指定特定資源類型和 API 版本的相同 PowerShell 命令。
- 針對銀級和金級持久性,叢集中剩餘的任何修復工作,其目標為已移除之 nodetype 中的任何節點,應該使用以下命令完成:
Complete-ServiceFabricRepairTask -TaskId <repair task name>
注意
若 Load Balancer 相同,且 IP 重複用於不同節點類型,則此為選擇性步驟。
下一步
- 深入了解叢集持久性特性。
- 深入了解節點類型和虛擬機器擴展集。
- 深入了解調整 Service Fabric 叢集。