2017年7月17日

兩個VM Scale Set做VIP Swap

AzurePaaS服務例如Web App提供了Deployment Slot可以讓我們在不同的版本之間做切換;當我們更新了版本,可以先佈署到一個"Staging" Slot,測試完畢後,再切換到"Production" Slot

而在IaaS上平台本身則沒有提供這樣的機制,需要另外透過程式的方式進行。以下的範例中,我們透過ARM Template在同一個Resource Group中的Virtual Network的兩個Subnet中建立了兩個VM Scale Set,各自代表V1V2的版本(https://github.com/michael-chi/VMSSVipSwap/blob/master/arm-2vmss-customImage.json )。其架構如下:

 

 

 

 

 

 

 

 

 


在這個範例中,我透過預先建立好的兩個Windows Server 2012 Custom Image,在上面安裝了IIS Server並建立一個Default.Htm,用簡單的字串代表版本一和版本二。

其中,LB1後面接的VMSS V1代表版本一服務;LB2後面對接的VMSS V2代表版本二的服務。在實務上,我們可能會把LB 1所關聯的VIP設定為Static IP並透過DNS指定為我們Production環境的位址;當我們更新了服務到版本二時,為了減少版更新造成的Downtime。我們將版本二也佈署到雲端上的另一個VM Scale Set (VMSS V2),前方則透過LB 2這個Load Balancer來做Load balance。當我們確認版本二測試正常後,我們想要透過VIP的切換,將版本二"升級"Production版本;我們的做法是:

  1. 建立一個Temp IP
  2. LB 1IP指定給Temp IP
  3. LB 2IP指定給LB 1
  4. Temp IP指定給LB 2
  5. 刪除Temp IP

Power Shell Script在:https://github.com/michael-chi/VMSSVipSwap/blob/master/vip_swap.ps1

 

測試看看:

  • VIP Swap前:

  • VIP Swap

  • VIP Swap後:

 

沒有留言:

Blog Archive

About Me