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