【博文推薦】利用Azure Traffic Manager保證業務的可用性
本文出自51CTO博客博主揮墨的書童,如有任何問題,歡迎進入博主頁面互動討論。 |
最近攜程事件導致攜程網站和APP停止服務長達將近9個小時。支付寶因為光纜被挖斷導致部分用戶服務不可用,藝龍遭到攻擊導致網站崩潰,等等。企業中的業務安全和可用性又浮現了出來,回過頭來看,有哪些現有的技術能夠避免此類狀況,這篇文檔我們先聊一聊如何利用Microsoft Azure Traffic Manager讓你的應用保持高可用狀態
先來看下Microsoft Azure Traffic Manager 到底是什么東東
使用 Microsoft Azure Traffic Manager 可以控制向指定的終結點(可能包括 Azure 云服務、網站和其他終結點)分配用戶流量。Traffic Manager 的工作原理是將智能策略引擎應用到對 Internet 資源域名執行的域名系統 (DNS) 查詢。Azure 云服務或網站可以在世界各地不同的數據中心內運行。
說的簡單易懂點Traffic Manager就是一個智能的DNS解析。
能幫助我們做什么?
- 提高關鍵應用程序的可用性,當你的應用程序的某個節點出問題的時候,Traffic Manager可以通過智能的監視你的終結點(云服務、網站和其他角色)的服務狀態,然后把流量遷移到正常的終結點。
- 提高應用程序的響應性,當你的應用程序客戶遍布全國甚至是世界各地時,如何能夠把流量引到離他們最近的數據中心,已達到最快的響應速度。這就是Traffic Manager需要做的事情。
- 大型復雜的流量分配,如果你有像淘寶、京東等這類網站時,你需要復雜的流量分配規則來滿足用戶的快速訪問需求,使用嵌套的 Traffic Manager 配置文件(在其中的一個 Traffic Manager 配置文件可以將另一個 Traffic Manager 配置文件作為終結點),可以創建配置來優化更大、更復雜部署的性能和分布。
工作原理是啥?
我來根據這張圖來解釋下:
1. 首先客戶端需要知道IP地址才能去訪問應用,然后就發送域名解析請求到公網域名www.contoso.com(就是在公網域名服務商注冊的域名)。
2. 請求發到公網DNS上進行解析,然后公網DNS根據你的配置的CNAME記錄把請求發給Traffic Manager。
3. Traffic Manager會根據自己的配置文件(性能、循環法、故障轉移),確定最佳終結點,選擇好終結點后,把終結點的IP信息返回給客戶端。
4. 客戶端根據解析到的IP地址信息,直接發送請求道終結點。
怎么配置Traffic Manager?
Traffic Manager包含三種負載平衡方法:
- 故障轉移:如果終結點位于相同或不同的 Azure 數據中心(在管理門戶中稱為區域)內,并且你希望對所有流量使用一個主終結點,但是希望在主終結點或備用終結點不可用時提供備份,請選擇“故障轉移”。
- 循環:如果要將負載分配到同一數據中心內的一組終結點或者分配到不同的數據中心,請選擇“循環”。
- 性能:如果終結點位于不同的地理位置,并且你希望請求客戶端使用“最靠近的”終結點(因為延遲最低),請選擇“性能”。
三個不同的負載平衡方法,三個不同的選擇,下面我主要就故障轉移場景來演練,如何通過Powershell創建Traffic Manager,并進行基本的配置。
#p#
創建故障轉移的負載平衡器
- New-AzureTrafficManagerProfile -Name "cloudvip" -DomainName "cloudvip.trafficmanager.net" -LoadBalancingMethod "Failover" -Ttl 30 -MonitorProtocol "Http" -MonitorPort 80 -MonitorRelativePath "/"
表示我要創建一個cloudvip的Profile,域名為cloudvip.trafficmanager.net,負載平衡方法是故障轉移,監視內容:協議http 端口 80 默認路徑。
我們進入門戶可以看到已經創建好該Traffic Manager。
加入終結點
這時我們的Traffic Manager并沒有包含任何終結點,下面我開始通過Powershell把終結點加進來。
- $TrafficManagerProfile = Get-AzureTrafficManagerProfile -Name "cloudvip"
- Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $TrafficManagerProfile -DomainName "blog01.cloudapp.net" -Status "Enabled" -Type "CloudService" | Set-AzureTrafficManagerProfile
第一個命令是使用Get-AzureTrafficManagerProfile得到cloudvip的參數然后存放在TrafficManagerProfile變量中。
第二個命令是添加域名為blog01.cloudapp.net的云服務,然后通過Set-AzureTrafficManagerProfile變更到azure中。
帶有權重參數加入終結點
使用同樣方法添加另外一個終結點,這次加上權重的參數。
- Add-AzureTrafficManagerEndpoint -TrafficManagerProfile $TrafficManagerProfile -DomainName "blog02.cloudapp.net" -Status "Enabled" -Type "CloudService" -Weight 2 | Set-AzureTrafficManagerProfile
查看終結點詳細信息
- $TrafficManagerProfile.Endpoints | Format-List
使用PowerShell修改權重
可以使用Set-AzureTrafficManagerEndpoint重新設置終結點,我來演示把blog01節點的權重改成3.
- Set-AzureTrafficManagerEndpoint -TrafficManagerProfile $TrafficManagerProfile -DomainName "blog01.cloudapp.net" -Status "Enabled" -Type "CloudService" -Weight 3 | Set-AzureTrafficManagerProfile
查看結果
最后我們在客戶端進行測試
這時我們可以看到Traffic Manager把流量引入到blog01上了,這時我如果想把節點2(blog02)作為主節點,要怎么設置呢?你可以運行一下命令
- $Profile = Get-AzureTrafficManagerProfile -Name "MyProfile"
- $Profile.Endpoints[0],$Profile.Endpoints[1] = $Profile.Endpoints[1],$Profile.Endpoints[0]
- Set-AzureTrafficManagerProfile -TrafficManagerProfile $PROFILE
從結果中我們可以看到,節點2變成了主節點,我們再來ping一下試試。
現在是節點2在提供服務。
總結:從上面的示例中,我們可以看到,一個網站設計成一個高可用架構,如果一個站點遭到毀滅性的攻擊和破壞,我們可以快速的切換到備用站點,以提供服務。從而避免類似攜程的事件發生。