Service Fabric應用程式升級

Azure Service Fabric應用程式是服務的集合。 升級期間,Service Fabric比較新應用程式清單與先前版本,並判斷應用程式中哪些服務需要更新。 Service Fabric服務清單中的版本號碼與先前版本中的版本號碼進行比較。 如果服務沒有變更,該服務不會升級。

注意

ApplicationParameters 不會在應用程式升級期間保留。 為了保留目前的應用程式參數,使用者應先取得參數,並傳遞參數至升級 API 通話,如下所示:

$myApplication = Get-ServiceFabricApplication -ApplicationName fabric:/myApplication
$appParamCollection = $myApplication.ApplicationParameters

$applicationParameterMap = @{}
foreach ($pair in $appParamCollection)
{
    $applicationParameterMap.Add($pair.Name, $pair.Value);
}

Start-ServiceFabricApplicationUpgrade -ApplicationName fabric:/myApplication -ApplicationTypeVersion 2.0.0 -ApplicationParameter $applicationParameterMap -Monitored -FailureAction Rollback

輪流升級概觀

在滾動應用程式升級中,升級會分階段執行。 在每個階段,升級會適用于該群集中的節點子集,稱為更新網域。 因此,應用程式在整個升級期間仍然可以使用。 升級期間,該群集可能包含新舊版本的混合。

因此,這兩個版本必須向前和向後相容。 如果不相容,應用程式系統管理員負責進行多階段升級,以維持可用性。 在多階段升級中,第一個步驟是升級至與先前版本相容的應用程式的中間版本。 第二個步驟是升級最終版本,該版本會中斷與更新前版本的相容性,但與中間版本相容。

當您設定群集時,更新網域會指定于群集清單中。 更新網域不會以特定順序接收更新。 更新網域是應用程式的邏輯部署單位。 更新網域可允許服務在升級期間保持高可用性。

如果升級已適用于群集中的所有節點,則有可能進行非輪流升級,而當應用程式只有一個更新網域時,就是這種情況。 不建議使用這個方法,因為服務會關閉,且在升級時無法使用。 此外,當只有一個更新網域設定一個群集時,Azure 不會提供任何保證。

升級完成後, (實例) 的所有服務和複本都會維持在同一個版本中,例如,如果升級成功,將會更新為新版本;如果升級失敗且已卷回,就會卷回至舊版本。

升級期間的健康狀態檢查

升級時,必須設定健康情況 (,否則可能會使用預設值) 。 當所有更新網域在指定的結束時間內升級,且所有更新網域都視為正常時,升級就表示為成功。 健康更新網域表示更新網域通過健康情況政策中指定的所有健康情況檢查。 例如,健康情況政策可能會強制要求應用程式實例內的所有服務都必須健康,因為健康情況是由 Service Fabric。

系統在升級期間的健康Service Fabric與檢查是服務與應用程式不可知。 也就是說,系統不會執行任何服務特定測試。 例如,您的服務可能有輸送量需求,但Service Fabric沒有檢查輸送量的資訊。 請參閱健康 狀態文章 ,以查看執行檢查。 升級期間發生的檢查包括測試應用程式套件是否已正確複製、實例是否已啟動等。

應用程式健康狀態是應用程式子實體的匯總。 簡言之,Service Fabric應用程式報告的健康情況來評估應用程式的健康情況。 它也會用這種方式評估應用程式所有服務的健康情況。 Service Fabric匯總其子項的健康情況 ,例如服務複本,進一步評估應用程式服務的健康情況。 一旦應用程式健康狀態策略符合,升級就可以繼續進行。 如果違反健康情況原則,應用程式升級會失敗。

升級模式

我們建議的應用程式升級模式為受監視模式,這是常用的模式。 監控模式會在一個更新網域上執行升級,如果所有健康情況檢查都 (根據指定的) ,會自動移至下一個更新網域。 如果健康情況檢查失敗且/或已達時,更新網域會重新升級,或是將模式變更為未監視的手動模式。 您可以設定升級,為失敗的升級選擇這兩種模式之一。

未監視手動模式需要在更新網域每次升級後手動介入,以啟動下一個更新網域的升級。 系統Service Fabric健康狀態檢查。 系統管理員先執行健康情況或狀態檢查,再開始下一個更新網域的升級。

升級預設服務

應用程式清單中定義的某些預設服務參數也可以升級為應用程式升級的一部分。 只有支援透過 Update-ServiceFabricService 變更的服務參數,才能在升級期間變更。 在應用程式升級期間變更預設服務的行為如下所示:

  1. 新應用程式清單中不存在於該群集中的預設服務會建立。
  2. 先前及新應用程式清單中的預設服務會更新。 新應用程式清單中預設服務的參數會覆寫現有服務的參數。 如果更新預設服務失敗,應用程式升級會自動卷起。
  3. 如果新應用程式清單中不存在的預設服務存在於該群集中,則刪除它們。 請注意,刪除預設服務會導致刪除該服務的所有狀態,且無法復原。

當應用程式升級復原時,預設服務參數會還原回其舊值,然後再開始升級,但已刪除的服務無法以舊狀態重新建立。

提示

EnableDefaultServicesUpgrade組組設定設定必須為true,才能啟用規則 2) 和) (預設服務更新和刪除) 。 從版本 5.5 開始,Service Fabric支援此功能。

使用 HTTPS 端點升級多個應用程式

使用 HTTP S 時,您必須小心不要針對同一個應用程式的不同實例使用相同的。 原因是Service Fabric無法升級其中一個應用程式實例的證書。 例如,如果應用程式 1 或應用程式 2 都想要將 cert 1 升級為 cert 2。 升級發生時,Service Fabric程式可能已經清理了與 http.sys 的證書 1 註冊,即使另一個應用程式仍在使用它。 若要避免發生Service Fabric,請偵測到該埠上已有另一個應用程式實例已註冊憑證 (,http.sys) 作業失敗。

因此Service Fabric不支援在不同應用程式實例中使用相同的升級兩個不同的服務。 換句話說,您無法在同一個埠上的不同服務上使用相同的憑證。 如果您需要在同一個埠上擁有共用憑證,您必須確保服務放在具有位置限制式的不同電腦上。 或者,如果Service Fabric每個應用程式實例的每個服務,請考慮使用動態埠。

如果您看到 HTTPs 的升級失敗,錯誤警告:「HTTP Server API Windows HTTP Server API 不支援多個共用埠的應用程式憑證」。

應用程式升級流程圖

本段落後的流程圖可協助您瞭解應用程式Service Fabric程式。 具體來說,此流程說明的時空狀況 ,包括HealthCheckStableDuration、HealthCheckRetryTimeoutUpgradeHealthCheckInterval,如何協助控制某個更新網域的升級是否成功或失敗。

The upgrade process for a Service Fabric Application

下一個步驟

升級您的應用程式 使用 Visual Studio會引導您完成應用程式升級,Visual Studio。

使用 PowerShell 升級應用程式 會引導您完成使用 PowerShell 的應用程式升級。

使用升級參數控制應用程式 升級的方法

瞭解如何使用資料序列化,讓您的應用程式升級 相容

瞭解如何參照進一步主題來升級您的應用程式時,使用 進步功能

參照應用程式升級疑難排解中的步驟,修正應用程式升級 中的常見問題