本文針對升級至 Microsoft Azure 平臺上的 Windows 操作系統 (OS) 即服務 (PaaS) ) 虛擬機 (VM) 所造成的角色實例重新啟動 (常見問題。
如何退出作業系統更新?
您無法退出主機 OS 更新。 Microsoft 必須在數據中心內維護最新的主機操作系統。 您可以指定客體 OS 的版本,以退出客體 OS 更新。 不過,如果您這樣做,您的服務將不再收到安全性更新,而且可能容易受到攻擊。 如需詳細資訊,請 參閱管理客體 OS 版本。
如何? 強制只在非上班時間進行更新和重新啟動?
您無法控制何時升級主機 OS 的單一實例或服務。 全球所有 Azure 資料中心都會同時開始升級。 網狀架構會持續升級每個數據中心。 由於確保所有雲端服務都遵循升級網域規則的複雜性,此程式需要數天的時間。 無法控制或判斷特定實例何時會受到影響。 若要控制客體 OS 更新,您可以指定固定的客體 OS 版本,然後在準備就緒時加以更新。
我已在 VM 上安裝某些專案。 但現在,VM 已重新啟動,且我安裝的軟體已消失! 為什麼軟體會消失?
不支援透過遠端桌面通訊協定連線到 Azure PaaS VM (RDP) ,以及進行變更或安裝軟體。 隨時可能會重建 VM,而且您所做的任何變更都會遺失。 如果硬體失敗,而且我們必須在新的硬體上啟動新的 VM,就會發生此案例。 當重建 Windows 磁碟分區時,它也會在客體 OS 更新期間發生。 如果您必須安裝軟體或變更 VM,請建立啟動工作,然後從該處執行工作。 此程式可確保在重新建立 VM 時,您的設定會再次執行。
新的客體操作系統版本中的其中一個更新可以中斷我的服務嗎?
安裝在新的客體 OS 版本上的更新已公開提供並經過徹底測試的 Hotfix。 這些 Hotfix 也會透過 Windows Update 部署到世界各地的伺服器,而且對服務造成不良影響的可能性很小。 至於內部部署服務,您應該使用您先測試更新的預備環境來管理 Azure VM 上的 OS 修補程式。
如果您想要設定預備環境以在生產之前測試更新,請將生產服務設定為使用 .cscfg 檔案中的固定版本OS字串。 然後,當新的客體OS可用時,您可以使用最新的客體OS版本,將服務部署到預備位置。 確認服務在最新的客體 OS 上正常運作之後,您可以進行 VIP 交換。 或者,您可以就地升級生產服務,以使用最新的操作系統。
升級需要多久時間? 我的 VM 會關閉多久?
常見的誤解是套用的更新越多,程式所花的時間就越長。 此假設是以升級運作方式與本機桌面計算機上 Windows Update 升級方式相似的信念為基礎。 在 Windows 升級中,許多更新會複製到 Windows,並藉由包含後續重新啟動來安裝。 不過,該程式不是升級在 Azure 中的運作方式。
在 Azure 中發行新的 OS 版本時,OS 小組會取得最新的映射、套用更新,然後建立虛擬硬碟 (包含此新基底映射的 VHD) 。 此基底映像接著會複製到 Azure 中的存放庫。 當系統指示網狀架構進行OS升級時,它會先進行複製階段。 在即將升級的數據中心內,網狀架構會將這個新的基底映射 VHD 複製到每部伺服器上的硬碟。 完成此程序之後,網狀架構會遵循一般的升級網域規則開始升級程式。
當客體即將更新時,網狀架構會正常關閉 OS,然後使用新的基底映射啟動新的 VM。 針對客體OS升級指定VM所需的時間,與執行正常 Windows 關機和重新啟動所需的時間大致相同。
主機OS更新的時機不同。 升級主機時,會發生下列順序:
主機會將關機訊息傳送至在該主機上執行的每個客體OS。
每個客體OS都會獲得標準
OnStop
事件和Windows關機時間,以完成關機。在每個客體 OS 關閉之後,主機 OS 會執行正常關機,並完成其一般關機程式。
關閉主機 OS 之後,會使用新的 OS 映射重新啟動主機。
在主機啟動並執行之後,它會啟動每個客體OS。
此主機 OS 更新程式通常需要 15 到 20 分鐘。 時間可能會根據該主機上的其他來賓數目,以及處理它們所需的時間而有所不同。 但是,如果特定節點發生失敗,且 Azure 網狀架構判斷該節點上的來賓必須移至另一個節點,則一律會有例外狀況。
如何? 處理作業系統關機?
更新OS時,Azure Fabric 會正常關閉您的角色實例。 此作法表示您的 ASP.NET 程式代碼將會接收 Application_End
事件,而 Azure 服務運行時間將會引發 Stopping
和 OnStop
事件。 在程式關閉之前,您的程式代碼有五分鐘的時間可完成中的清除工作 OnStop
。 Azure 主機程式關閉之後,Windows 將會經歷正常正常關機,其中包括引發 Windows 服務的標準 OnStop
和相關事件。
如需如何處理實例關機的詳細資訊, 請參閱處理 Azure OnStop 事件的正確方式、 在 .NET 中自定義 Web 或背景工作角色的生命週期,以及 RoleEntryPoint.OnStop () 方法。