最近携程事件致使携程网站和APP中止服务长达将近9个小时。支付宝由于光缆被挖断致使部分用户服务不可用,艺龙遭到***致使网站崩溃,等等。企业中的业务安全和可用性又浮现了出来,回过头来看,有哪些现有的技术可以避免此类情况,这篇文档咱们先聊一聊如何利用Microsoft Azure Traffic Manager让你的应用保持高可用状态shell
先来看下Microsoft Azure Traffic Manager 究竟是什么东东。安全
使用 Microsoft Azure Traffic Manager 能够控制向指定的终结点(可能包括 Azure 云服务、网站和其余终结点)分配用户流量。Traffic Manager 的工做原理是将智能策略引擎应用到对 Internet 资源域名执行的域名系统 (DNS) 查询。Azure 云服务或网站能够在世界各地不一样的数据中心内运行。bash
说的简单易懂点Traffic Manager就是一个智能的DNS解析。架构
能帮助咱们作什么?app
提升关键应用程序的可用性,当你的应用程序的某个节点出问题的时候,Traffic Manager能够经过智能的监视你的终结点(云服务、网站和其余角色)的服务状态,而后把流量迁移到正常的终结点。ide
提升应用程序的响应性,当你的应用程序客户遍及全国甚至是世界各地时,如何可以把流量引到离他们最近的数据中心,已达到最快的响应速度。这就是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,并进行基本的配置。
建立故障转移的负载平衡器
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把终结点加进来。
1.$TrafficManagerProfile = Get-AzureTrafficManagerProfile -Name "cloudvip" 2.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)做为主节点,要怎么设置呢?你能够运行一下命令
1. $Profile = Get-AzureTrafficManagerProfile -Name "MyProfile" 2. $Profile.Endpoints[0],$Profile.Endpoints[1] = $Profile.Endpoints[1],$Profile.Endpoints[0] 3. Set-AzureTrafficManagerProfile -TrafficManagerProfile $PROFILE
从结果中咱们能够看到,节点2变成了主节点,咱们再来ping一下试试。
如今是节点2在提供服务。
总结:从上面的示例中,咱们能够看到,一个网站设计成一个高可用架构,若是一个站点遭到毁灭性的***和破坏,咱们能够快速的切换到备用站点,以提供服务。从而避免相似携程的事件发生。