■ 北京 繆仕章
編者按:有時(shí)使用公有云服務(wù)也會(huì)遇到資源不足的情況,筆者近期遇到在部署網(wǎng)站新版站點(diǎn)時(shí)提示Azure 云服務(wù)資源分配出現(xiàn)了問題。
Azure 是微軟公有云服務(wù)的支柱產(chǎn)品,它提供虛擬機(jī)、云服務(wù)、存儲、網(wǎng)絡(luò)和數(shù)據(jù)庫等服務(wù)。
基于龐大的數(shù)據(jù)中心,看似Azure 的資源是取之不盡、用之不竭的。然而,近期筆者在工作中就遇到了一個(gè)與資源不足有關(guān)的問題。
筆者管理的網(wǎng)站運(yùn)行在Azure 云服務(wù)上,在部署網(wǎng)站新版站點(diǎn)時(shí),筆者遇到了如圖1 所示報(bào)錯(cuò)信息。
從這些錯(cuò)誤信息看,似乎是云服務(wù)資源分配出現(xiàn)了問題。解決此問題之前,需要先了解Azure 資源分配的工作原理和發(fā)生分配故障的原因。
Azure數(shù)據(jù)中心的服務(wù)器分區(qū)成群集,會(huì)在多個(gè)群集中嘗試新的云服務(wù)分配請求。將第一個(gè)實(shí)例部署到云服務(wù)時(shí)(不管是部署到過渡環(huán)境還是生產(chǎn)環(huán)境中),都會(huì)將該云服務(wù)固定到某個(gè)群集。云服務(wù)中任何進(jìn)一步地部署都會(huì)發(fā)生在同一個(gè)群集,這種情況稱為“固定到群集”。
圖1 部署網(wǎng)站新版站點(diǎn)時(shí)報(bào)錯(cuò)
圖2說明在多個(gè)群集中嘗試進(jìn)行一般分配的情況。圖3 說明固定到群集2(因?yàn)楝F(xiàn)有的云服務(wù)CS_1 托管于此處)的分配情況。
當(dāng)分配請求固定到某個(gè)群集時(shí),由于可用的資源池僅限于某個(gè)群集,很可能找不到可用的資源。此外,如果分配請求固定到某個(gè)群集,但該群集不支持所請求的資源類型,那么即使該群集有可用的資源,請求仍會(huì)失敗。
圖4 說明由于唯一候選群集沒有可用的資源,導(dǎo)致已固定的分配失敗的情況。圖5 則說明了由于唯一候選群集不支持所請求的VM大小(雖然群集有可用的資源),導(dǎo)致已固定的分配失敗的情況。
總的來說,就是用戶在Azure 上創(chuàng)建云服務(wù)或虛擬機(jī)時(shí),云服務(wù)或虛擬機(jī)會(huì)被自動(dòng)分配到當(dāng)前可用的Azure 集群,并且該集群不可變。Azure 集群的資源是有限的,當(dāng)越來越多的云服務(wù)或虛擬機(jī)被分配到該Azure集群,就可能出現(xiàn)用戶爭奪Azure 計(jì)算資源的問題,從而導(dǎo)致云服務(wù)或虛擬機(jī)部署失敗的現(xiàn)象。
圖2 嘗試在多個(gè)集群上分配資源
圖3 在固定的集群上分配資源
那應(yīng)該如何解決這樣的問題呢?可以考慮以下兩個(gè)方案:
(1)將工作負(fù)荷部署到新的云服務(wù)。
(2)更新CNAME或A記錄,將流量指向新的云服務(wù)。
(3)沒有流量流向舊站點(diǎn)后,即可刪除舊的云服務(wù)。
此方案的優(yōu)點(diǎn)是不會(huì)出現(xiàn)服務(wù)中斷,缺點(diǎn)是無法使用原有云服務(wù)DNS 和原IP地址。
刪除現(xiàn)有云服務(wù)的生產(chǎn)槽和過渡槽,使云服務(wù)為空,然后在現(xiàn)有云服務(wù)中創(chuàng)建新部署。在部署的時(shí)候會(huì)在該區(qū)域的所有群集上重新嘗試進(jìn)行資源分配完成部署。 但需要確保云服務(wù)未綁定到地緣組。
此解決方案的優(yōu)點(diǎn)是可以保留現(xiàn)有的DNS 名稱及IP地址(需提前做IP 地址保留),缺點(diǎn)是可能會(huì)出現(xiàn)服務(wù)中斷。
圖4 在固定的集群上因無足夠的資源分配失敗
圖5 在固定的集群上因規(guī)格不支持分配失敗
筆者分析當(dāng)前業(yè)務(wù)狀態(tài),由于當(dāng)前服務(wù)分布在兩個(gè)數(shù)據(jù)中心,使用了高可用的方案。筆者決定使用方案2,也就是刪除生產(chǎn)槽和過渡槽,然后重新部署。筆者制定了以下計(jì)劃:
(1)當(dāng)前生產(chǎn)插槽的IP地址做地址保留。
(2)修改流量管理器把服務(wù)流量全部切換到另外一個(gè)數(shù)據(jù)中心。
(3)刪除有部署問題的數(shù)據(jù)中心上的生產(chǎn)槽和過渡槽。
(4)修改云服務(wù)配置文件將云服務(wù)的IP 地址指向保留的IP。
(5)進(jìn)行新的部署。
(6)測試新部署。
(7)再次修改流量管理器使流量按原規(guī)則在兩個(gè)數(shù)據(jù)中心分布。
Azure 提供兩種方式進(jìn)行地址保留操作,第一種是通過Azure 門戶:通過搜索找到保留IP,然后進(jìn)行保留IP 地址的添加,如圖6 所示。但這種方法不能保留當(dāng)前云服務(wù)上的IP 地址,在本案例中不適用。故本案例采取第二種方法——使用PowerShell 設(shè)置Azure 保留IP,具體步驟如下:
(1)運(yùn)行Import-Module AzureRM 導(dǎo)入AzureRM 模塊。
(2)運(yùn)行Login-Azure RmAccount-Environment Name AzureChinaCloud。
圖6 通過Azure 門戶保留IP 地址
(3)運(yùn) 行New-Azure ReservedIP -Reserved IP Name My Web Site IP -Label MyCloudServiceIP - Location "chinanorth" -Service Name My Cloud Service(可以運(yùn)行Get-AzureService 確認(rèn)云服務(wù)名字)。
(4)運(yùn) 行Get-Azure ReservedIP 得到保留IP 信息并核對。
如果有多個(gè)訂閱下的云服務(wù)需要做地址保留則需要按以下步驟進(jìn)行:
(1)運(yùn) 行Get-Azure RmSubscription 得到租戶下的所有訂閱。
(2)運(yùn)行Select-Azure Subscription -Subscription Id MysubscriptionID 指定對應(yīng)的訂閱。
(3)運(yùn) 行 New-AzureReservedIP-ReservedIPName MyWebSiteIP-Label MyCloudServiceIP-Location "chinanorth" -ServiceName MyCloud Service 設(shè)置保留IP。
IP 地址保留做好以后,就可以通過流量管理器切換流量了。這里舉例說明流量管理器的工作原理:
當(dāng)用戶訪問www.azure.cn 的時(shí)候,他的DNS 服務(wù)器會(huì)返回給用戶www.azure.cn的Cname 記錄,比如azure.trafficmanager.net。這條記錄就是www.azure.cn 這個(gè)站點(diǎn)在DNS 服務(wù)流量管理器上的一個(gè)DNS 記錄,該記錄分別指向www.azure.cn的IP,然后根據(jù)DNS 配置文件中的策略進(jìn)行流量分配,給用戶返回www.azure.cn的IP 地址,例如國內(nèi)的用戶只訪問IP 地址1,而國外的用戶只訪問IP 地址2。而且流量管理器還會(huì)監(jiān)控IP地址1 和IP 地址2 的特定頁面,如果發(fā)現(xiàn)該IP 地址1的頁面返回代碼500,則會(huì)自動(dòng)將流量切換到IP 地址2。
流量切換后測試無誤,就可以刪除云服務(wù)的生產(chǎn)槽和過渡槽了。通過使用PowerShell 命令“Remove-Azure Deployment -Service Name mycloud service -Slot Production -Force”刪除生產(chǎn)槽。
使用PowerShell 命令“Remove-AzureDeployment -ServiceName mycloud service -Slot Staging -Force”刪除過渡槽。
注意,進(jìn)行以上操作前請使用Select-Azure Subscription -Subscription Id mysubscriptionid 選擇對應(yīng)的訂閱,謹(jǐn)防誤操作。
修改配置文件以使用保留IP,在網(wǎng)絡(luò)配置下添加ReservedIPs,將ReservedIP名字指向剛剛新建保留IP的名字即可,如圖7 所示。
接下就可以進(jìn)行新的部署了。使用PowerShell 命令“New-AzureDeployment -ServiceName mycloud service -Package package path -Configuration profile path -Slot Production”進(jìn)行生產(chǎn)槽的部署。
完成部署后進(jìn)行服務(wù)測試,如無問題可以整流量管理器配置切換流量。至此,問題解決完畢。
生產(chǎn)環(huán)境遇到Azure 資源不足的情況會(huì)引起很多不必要的麻煩,所幸筆者的生產(chǎn)環(huán)境分布在不同的數(shù)據(jù)中心,在處理此類問題時(shí)可以將流量切換到另一個(gè)數(shù)據(jù)中心進(jìn)行問題的處理。
此類Azure 數(shù)據(jù)中心資源不足的情況并不算常見,但為了今后避免此類問題,應(yīng)該:
(1)考慮在多個(gè)數(shù)據(jù)中心部署服務(wù),確保服務(wù)的可用性。
(2)部署云服務(wù)時(shí)優(yōu)先選擇新的數(shù)據(jù)中心,比如當(dāng)前的China North 2 和China East 2 是2018 年 上線的,資源比較充足。
(3)如果遇到此類問題但暫時(shí)無法切換到新數(shù)據(jù)中心的話,可以考慮使用就地升級的方式,以確保服務(wù)版本更新能夠正常進(jìn)行。
圖7 修改部署配置文件