最常用且推薦的升級方法是監控式滾動升級。 Azure Service Fabric 會根據一組健康政策監控被升級應用程式的健康狀況。 一旦更新域(UD)升級,Service Fabric 會評估應用程式的健康狀況,並根據健康政策,決定是否進入下一個更新域或因健康政策而導致升級失敗。
監控式應用程式升級可透過受管理或原生 API、PowerShell、Azure CLI、Java 或 REST 執行。 關於如何使用 Visual Studio 進行升級的說明,請參見 使用 Visual Studio 升級您的應用程式。
透過 Service Fabric 的監控滾動升級,應用程式管理員可以設定健康評估政策,以便 Service Fabric 判斷應用程式的健康狀態。 此外,系統管理員可以設定當健康狀態評估失敗時要採取的動作 (例如自動復原)。本節會逐步說明如何針對其中一個使用 PowerShell 的 SDK 範例,執行受監視的升級。
請查看此頁面,觀看一支訓練影片,並引導你完成應用程式升級流程:
備註
ApplicationParameters 不會在整個應用程式升級過程中被保留。 為了保留目前的應用程式參數,使用者應先取得參數,並像下方的 upgrade 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
步驟 1:建置並部署 Visual Objects 範例
請透過右鍵點擊應用程式專案 VisualObjectsApplication 並 選擇 Publish 指令來建立並發佈應用程式。 欲了解更多資訊,請參閱 Service Fabric 應用程式升級教學。 或者,你也可以用 PowerShell 來部署你的應用程式。
備註
在 PowerShell 中使用任何 Service Fabric 指令之前,你必須先使用 Connect-ServiceFabricCluster cmdlet 連接叢集。 同樣地,假設叢集已經在你的本地機器上架設好。 請參閱關於 建立服務織體開發環境的文章。
在 Visual Studio 建置專案後,你可以使用 PowerShell 指令 Copy-ServiceFabricApplicationPackage 將應用程式套件複製到 ImageStore。 如果你想在本地驗證應用程式套件,請使用 Test-ServiceFabricApplicationPackage 指令檔。 下一步是使用 Register-ServiceFabricApplicationType cmdlet 將應用程式註冊到 Service Fabric 執行環境。 下一步是使用 New-ServiceFabricApplication 指令碼啟動應用程式實例。 這三個步驟類似於使用 Visual Studio 中的 部署 選單項目。 配置完成後,你應該從映像儲存庫清理複製的應用程式套件,以減少資源消耗。 如果不再需要某類申請類型,也應因同樣原因取消註冊。 更多資訊請參閱使用 PowerShell 部署與移除應用程式 。
現在,你可以使用 Service Fabric Explorer 來查看叢集和應用程式。 該應用程式有一個網路服務,可以在 Internet Explorer 中透過網址 http://localhost:8081/visualobjects 列輸入來導航。 你應該會看到螢幕上漂浮的視覺物件在移動。 此外,你也可以使用 Get-ServiceFabricApplication 來檢查申請狀態。
步驟 2:更新視覺物件範例
你可能會注意到,在第一步部署的版本中,視覺物件不會旋轉。 讓我們升級這個應用程式,讓視覺物件也能旋轉。
在 VisualObjects 解決方案中選擇 VisualObjects.ActorService 專案,並開啟 StatefulVisualObjectActor.cs 檔案。 在該檔案中,瀏覽至 MoveObject 方法,將 this.State.Move() 註解化,並取消註解 this.State.Move(true)。 此變更會在服務升級後旋轉物件。
我們也需要更新 VisualObjects.ActorService 專案的 ServiceManifest.xml 檔案(PackageRoot 下)。 將 CodePackage 和服務版本更新到 2.0,以及 ServiceManifest.xml 檔案中相應的行數。 你可以在右鍵點擊解決方案後,使用 Visual Studio 的「編輯清單檔案 」選項來更改清單檔案。
變更完成後,清單應呈現如下樣貌(標示部分顯示變更):
<ServiceManifestName="VisualObjects.ActorService" Version="2.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<CodePackageName="Code" Version="2.0">
現在, ApplicationManifest.xml 檔案(在 VisualObjects 專案中, VisualObjects 解決方案下)已更新至 VisualObjects.ActorService 專案的 2.0 版本。 此外,應用程式版本也從 1.0.0.0 更新至 2.0.0.0。 ApplicationManifest.xml 應該會像以下片段一樣:
<ApplicationManifestxmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VisualObjects" ApplicationTypeVersion="2.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<ServiceManifestRefServiceManifestName="VisualObjects.ActorService" ServiceManifestVersion="2.0" />
現在,選擇 ActorService 專案,然後在 Visual Studio 中右鍵點擊並選擇 建置 選項來建立專案。 如果你選擇 全部重建,應該更新所有專案的版本,因為程式碼會改變。 接著,讓我們透過右鍵點擊 VisualObjectsApplication,選擇 Service Fabric 選單,並選擇 Package,來打包更新的應用程式。 此動作會建立一個可部署的應用程式套件。 您的更新應用程式已準備好部署。
步驟三:決定健康政策與升級參數
熟悉 應用程式升級參數 及 升級流程 ,以深入了解各種升級參數、逾時時間及健康標準。 在此操作中,服務健康評估標準設定為預設值(且建議值),表示升級後所有服務與實例都應保持 健康 狀態。
不過,讓我們將 HealthCheckStableDuration 增加到 180 秒 (如此一來,服務至少會先維持 120 秒的健康狀態,升級才會繼續進行至下一個更新網域)。 我們也把 UpgradeDomainTimeout 設為 1200 秒, UpgradeTimeout 設為 3000 秒。
最後,我們也把 UpgradeFailureAction 設定為回滾。 此選項要求 Service Fabric 在升級過程中遇到問題時,將應用程式回滾至先前版本。 因此,在開始升級(步驟4)時,會指定以下參數:
FailureAction = 回滾
HealthCheckStableDurationSec = 180
UpgradeDomainTimeoutSec = 1200
升級超時 = 3000
步驟四:準備升級申請
現在應用程式已經建置完成,可以隨時升級。 如果你以管理員身份開啟 PowerShell 視窗並輸入 Get-ServiceFabricApplication,它應該會告訴你已部署的是 VisualObjects 的應用程式類型 1.0.0.0。
應用程式套件會儲存在你解壓縮 Service Fabric SDK 的相對路徑下: Samples\Services\Stateful\VisualObjects\VisualObjects\obj\x64\Debug。 你應該會在那個目錄中找到一個「Package」資料夾,裡面存放著應用程式套件。 檢查時間戳記,確保是最新版本(你可能也需要適當修改路徑)。
現在讓我們把更新後的應用程式套件複製到 Service Fabric ImageStore(應用程式套件由 Service Fabric 儲存的地方)。 參數 ApplicationPackagePathInImageStore 會通知 Service Fabric 在哪裡可以找到應用程式套件。 我們已將更新後的應用程式置於「VisualObjects_V2」中,並使用以下指令(您可能需要適當地再次修改路徑)。
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\Samples\Services\Stateful\VisualObjects\VisualObjects\obj\x64\Debug\Package -ApplicationPackagePathInImageStore "VisualObjects\_V2"
下一步是將此應用程式註冊至 Service Fabric,可透過 Register-ServiceFabricApplicationType 指令執行:
Register-ServiceFabricApplicationType -ApplicationPathInImageStore "VisualObjects\_V2"
如果前述指令沒成功,很可能需要重建所有服務。 如步驟 2 所述,你可能還需要更新你的 WebService 版本。
建議在應用程式成功註冊後移除該套件。 從映像儲存庫刪除應用程式套件可以釋放系統資源。 保留未使用的應用程式套件會消耗磁碟儲存空間,並導致應用程式效能問題。
Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore "VisualObjects\_V2" -ImageStoreConnectionString fabric:ImageStore
步驟 5:開始應用程式升級
現在,我們已經準備好開始應用程式升級,方法是使用 Start-ServiceFabricApplicationUpgrade 指令:
Start-ServiceFabricApplicationUpgrade -ApplicationName fabric:/VisualObjects -ApplicationTypeVersion 2.0.0.0 -HealthCheckStableDurationSec 60 -UpgradeDomainTimeoutSec 1200 -UpgradeTimeout 3000 -FailureAction Rollback -Monitored
應用程式名稱與 ApplicationManifest.xml 檔案中描述相同。 Service Fabric 使用此名稱來識別正在升級的應用程式。 如果你設定逾時時間太短,可能會遇到失敗訊息,說明問題所在。 請參考故障排除部分,或延長逾時時間。
隨著應用程式升級進行,你可以使用 Service Fabric Explorer 或使用 Get-ServiceFabricApplicationUpgrade PowerShell 指令來監控:
Get-ServiceFabricApplicationUpgrade fabric:/VisualObjects
幾分鐘後,你用前面的 PowerShell 指令得到的狀態應該會顯示所有更新網域都已升級(完成)。 你應該會發現瀏覽器視窗中的視覺物件開始旋轉了!
你可以試著從版本 2 升級到 3,或從版本 2 升級到 版本 1 當作練習。 從版本 2 升級到 version 1 也算是升級。 請嘗試調整逾時和健康狀態原則,讓自己熟悉這些設定。 當你部署到 Azure 叢集時,參數需要適當設定。 設定暫停時間時採取保守策略是明智的。
下一步
使用 Visual Studio 升級應用程式 ,會引導你完成使用 Visual Studio 進行應用程式升級。
透過 升級參數控制應用程式的升級方式。
透過學習使用 資料序列化,讓你的應用程式升級相容。
透過參考 進階主題,學習如何在升級應用程式時使用進階功能。
請參考「 故障排除應用程式升級」中的步驟,解決應用程式升級中的常見問題。