標籤:
在很多的商業情境中,使用者的訪問,峰值時間都是很難預測的,尤其是做一些市場推廣活動和促銷的時候,到底部署什麼規模的web叢集合適,這一直是個問題,部署過量會造成高成本和資源不必要的浪費,部署過少,如果到達峰值,來不及部署,容易造成使用者無法訪問,使用者體驗差,交易損失等等,當然更不用提營運人員時刻神經緊繃的即時監測壓力情況,以便及時採取措施……
在雲端運算技術日新月異的今天,這個情境是非常不和諧的:)VMSS作為Azure新的計算方式,提供了按照壓力負載自動擴充收縮,並且同時支援Windows和Linux,在提供了IAAS層級的控制靈活性的同時,也提供了PAAS層級的自動擴充,對於無狀態的web伺服器應用等情境非常適合,本文介紹如何通過ARM模板和VMSS建立一個自動負載平衡的,按照你的CPU負載自動擴充的web伺服器叢集:
在本模板中,將會建立如下測試環境:
- 定義一個負載平衡器,負責轉寄前端的web請求給後端的web叢集
- 使用VMSS建立一個web叢集
- 使用客戶定製化指令碼,自動安裝Apache web伺服器,和PHP web應用
- 定義自動擴充集合的規則,根據虛擬機器自動擴充集合中的CPU負載進行自動擴充或者收縮,虛擬機器也會自動的在負載平衡器中自動添加或者刪除
- 壓力測試用具,可以使用LoadRunner,Apache AB等等,在本例中,使用PHP產生壓力,達到CPU閾值要求
- 原始的ARM模版請參考Azure的quick start模版:
https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-lapstack-autoscale
- 我修改過的,直接可以在Azure China上啟動並執行模版如下:
https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/vmss-lapstack-autoscale
?
模板定義:
- 對於VMSS的基本定義,前述文檔已經介紹過,不在贅述,再次我們先看一下負載平衡器的定義,首先我們需要增加一個負載平衡器的資源,這個資源依賴於公用IP地址,前端地址就是公用IP地址:
?
?
- 接下來我們需要定義負載平衡的規則,前端的請求通過DNS或者公網IP地址進來以後,通過預設的地址分發給後端的IP資源集區,協議是TCP,前端和後端連接埠都是標準的80連接埠,你也可以設定負載平衡器空閑逾時時間,這個時間會決定你的串連空閑時間長度,最長可是設定為30分鐘;因為我們後續主要配置的是http請求,所以主要設定一下針對80連接埠的探測,以此判斷後端虛擬機器是否健康:
?
- 為方便使用者定製化部署,快速擴充,Azure提供了定製化指令碼擴充,可以讓你在虛擬機器部署完成後,運行自訂的指令碼,安裝你自己軟體,部署你自己的應用,具體的用法如下,你可以將你的應用放在Azure儲存中,本例中放在了github上,然後執行bash,進行安裝配置:
?
在本次測試中,提供了兩個PHP web檔案,一個是index.php,用來顯示當前的web應用跑在哪個伺服器上,另外一個是do_work.php用來給web伺服器產生壓力,觸發自動擴充。
?
- 最後需要配置一下VMSS自動擴充的規則,在什麼情況下進行自動擴充,在什麼情況下,進行自動收縮,在本例中,我們定義整個VMSS中平均CPU的負載在過去5分鐘內高於60%就進行自動擴充,低於50%的時候自動收縮:
?
?
- 最後我們需要配置一下參數檔案,定義一下VMSS的名稱,初始在VMSS中需要幾個虛擬機器,使用者名稱和密碼即可:
- 最後,我們使用Powershell進行部署,我已經寫好了一個deploy.ps1檔案,大家在Powershell下修改下參數,直接執行即可,比如你希望的資源群組名稱,部署的地區等參數,然後在Powershell下執行即可:
?
#用你的Azure帳號登陸
Login-AzureRmAccount -EnvironmentName AzureChinaCloud
#執行部署指令碼
- 部署完成後,登陸Azure新portal,https://portal.azure.cn, 可以看到新的VMSS集合已經部署成功,包括有一個擴充集,,一個負載平衡器,一個公網IP地址及多個用於分發VM的儲存帳號:
- 開啟虛擬機器擴充功能集,,查看當前執行個體,可以看到當前有2個執行個體:
9 .點擊負載平衡器,獲得公網的IP地址或者DNS,在瀏覽器中開啟,可以看到當前串連的是001 web伺服器,該頁面是一個demo頁面,用於給虛擬機器產生壓力;新開啟一個瀏覽器,串連負載平衡器,可以看到請求被分發到了002 web伺服器:
10 . 在當前的測試頁面上,輸入500秒,作為壓力測試時間長度,點擊"DO work",那麼PHP程式就會產生壓力,佔滿CPU:
11. 大約等待5,6分鐘以後,連續5分鐘的CPU負載超過60%,我們開啟新portal的虛擬機器擴充功能頁面的執行個體頁面,可以看到,按照我們定義的VMSS自動擴充規則,虛擬機器開始自動增加:
12. 使用不同的瀏覽器測試網站,還會看到網站請求會被分發到建立立的伺服器B,C,F等等,說明自動擴充集正在增加web伺服器的時候,也會自動更新負載平衡器的設定,讓前端客戶的請求按照預設的雜湊規則分發給後端的伺服器,實現動態負載平衡:
13. 壓力測試完成,虛擬機器擴充功能集的壓力逐步低於50%,這個時候,整個虛擬機器擴充功能集合會監測最近5分鐘的負載情況,一旦滿足收縮要求,就會執行cooldown的過程,逐步移除web伺服器,也會從負載平衡器移除,降低成本:
通過這個測試可以看到,我們可以方便的使用VMSS+ARM快速的構建自動可擴充的web叢集,並且使用定製化指令碼部署我們的應用程式。
?
?
使用ARM和VMSS建立自動擴充的web叢集