Azure上七层负载均衡APP Gateway
Azure的SLB和ILB是最常用的4层负载均衡工具。但有些场景是7层的负载均衡,SLB和ILB就无能为力了。
Azure上已经推出了APP Gateway的服务,就是7层负载均衡的负载均衡器。
如上图,APP Gateway实现用户HTTPS网站的SSL Offload,还可以实现多个VM的负载均衡。而且可以实现Cookie Affinity功能,这也是7层负载均衡的一种功能。
通过App Gateway、SLB、Traffic Manager综合使用,可以实现对应用系统的高扩展性:
可以通过智能DNS选择北部的Azure的数据中心还是东部的Azure的数据中心,再通过4层的SLB把流量分担到多个Application Gateway上,Application Gateway再根据策略,把流量分担到各个虚拟机上。
Application Gateway的部署基于VNet,但其负载均衡的节点可以是非本VNet的虚拟机。如下图:
其负载均衡的节点除本VNet的虚拟机外,可以是其他的Cloud Service,其他VNet内的虚拟机(需要VPN打通),甚至外部的虚拟机都可以成为Application Gateway的负载均衡节点。
App Gateway一共有3中型号:
- Small – Dev/Test使用,不建议部署在生产环境
- Medium – 可以支持150Mbps的SSL流量
- Large – 可以支持200Mbps的SSL流量
具体配置命令:
- 创建Application Gateway
New-AzureApplicationGateway -Name hwappgw -VnetName hwvnet -Subnets Subnet-1 -InstanceCount 2 -GatewaySize Medium
New-AzureApplicationGateway -Name hwappgw02 -VnetName hwvnet -Subnets Subnet-1 -InstanceCount 2 -GatewaySize Medium
上面的配置中配置了两个APP Gateway。
第一个会把其对外的地址设定为Subnet-1的地址,将采用ILB的四层负载均衡;第二个会让其自动获得公网的VIP地址,将采用SLB的四层负载均衡。
- 设置Application Gateway的配置文件
首先编辑Application Gateway的配置文件,a.xml将采用ILB的方式实现负载均衡,c.xml将采用SLB的方式实现负载均衡:
a.xml
<?xml version="1.0" encoding="utf-8"?>
<ApplicationGatewayConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
<FrontendIPConfigurations>
<FrontendIPConfiguration>
<Name>fip1</Name>
<Type>Private</Type>
<StaticIPAddress>10.1.1.140</StaticIPAddress>
</FrontendIPConfiguration>
</FrontendIPConfigurations>
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>80</Port>
</FrontendPort>
</FrontendPorts>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.1.1.151</IPAddress>
<IPAddress>10.1.1.152</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Enabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendIP>fip1</FrontendIP>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Http</Protocol>
</HttpListener>
</HttpListeners>
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
可以注意到其前端的IP地址是10.1.1.140。
c.xml
<?xml version="1.0" encoding="utf-8"?>
<ApplicationGatewayConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>80</Port>
</FrontendPort>
</FrontendPorts>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.1.1.151</IPAddress>
<IPAddress>10.1.1.152</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Enabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Http</Protocol>
</HttpListener>
</HttpListeners>
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
这个配置中的前端IP不进行设置,讲自动获得VIP地址。
- 设置Application Gateway的配置
Set-AzureApplicationGatewayConfig -Name hwappgw -ConfigFile D:\a.xml
Set-AzureApplicationGatewayConfig -Name hwappgw02 -ConfigFile D:\c.xml
- 启动Application Gateway
Start-AzureApplicationGateway -Name hwappgw
Start-AzureApplicationGateway -Name hwappgw02
这个过程将比较耗时,这一步需要大约20分钟的时间创建。这个过程中,Azure会在后台创建多台Application Gateway的VM,实现HA的配置。
- 获得Application Gateway的状态
Get-AzureApplicationGateway
Name |
hwappgw |
Description |
|
VnetName |
hwvnet |
Subnets |
{Subnet-1} |
InstanceCount |
|
GatewaySize |
Medium |
State |
Running |
VirtualIPs |
{10.1.1.140} |
DnsName |
Name |
hwappgw02 |
Description |
|
VnetName |
hwvnet |
Subnets |
{Subnet-1} |
InstanceCount |
|
GatewaySize |
Medium |
State |
Running |
VirtualIPs |
{42.159.241.87} |
DnsName |
70da9ed4-cf13-45a9-9fa3-c44f7e98e73a.chinacloudapp.cn |
可以观察到,hwappgw的地址是一个内部地址,而hwappgw02的地址是一个公网地址,并有DNS的域名。
这时已经可以通过这个两个负载均衡的地址访问后台的服务了。Application Gateway会根据10.1.1.151和10.1.1.152两台虚拟机的状态进行负载均衡的流量转发。
- 上传SSL证书
Add-AzureApplicationGatewaySslCertificate -Name hwappgw02 -CertificateName hengweicert -Password xxxx -CertificateFile D:\HengweiCert.pfx
Name HTTP Status Code Operation ID Error
---- ---------------- ------------ -----
Successful OK ae3d3289-618f-4da0-bf45-56ed2542d098
- 确认证书状态
Get-AzureApplicationGatewaySslCertificate -Name hwappgw02
Name : hengweicert
SubjectName : CN=ClientCertificateHengwei
Thumbprint : 1336E8F9BB18A947AD79F0A2939411B0BC3D893B
ThumbprintAlgo : sha1RSA
State : Provisioned
- 更改hwappgw02的配置文件
修改c.xml配置文件,修改协议为https、443端口,以及添加证书配置:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationGatewayConfiguration xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
<FrontendPorts>
<FrontendPort>
<Name>FrontendPort1</Name>
<Port>443</Port>
</FrontendPort>
</FrontendPorts>
<BackendAddressPools>
<BackendAddressPool>
<Name>BackendPool1</Name>
<IPAddresses>
<IPAddress>10.1.1.151</IPAddress>
<IPAddress>10.1.1.152</IPAddress>
</IPAddresses>
</BackendAddressPool>
</BackendAddressPools>
<BackendHttpSettingsList>
<BackendHttpSettings>
<Name>BackendSetting1</Name>
<Port>80</Port>
<Protocol>Http</Protocol>
<CookieBasedAffinity>Enabled</CookieBasedAffinity>
</BackendHttpSettings>
</BackendHttpSettingsList>
<HttpListeners>
<HttpListener>
<Name>HTTPListener1</Name>
<FrontendPort>FrontendPort1</FrontendPort>
<Protocol>Https</Protocol>
<SslCert>hengweicert</SslCert>
</HttpListener>
</HttpListeners>
<HttpLoadBalancingRules>
<HttpLoadBalancingRule>
<Name>HttpLBRule1</Name>
<Type>basic</Type>
<BackendHttpSettings>BackendSetting1</BackendHttpSettings>
<Listener>HTTPListener1</Listener>
<BackendAddressPool>BackendPool1</BackendAddressPool>
</HttpLoadBalancingRule>
</HttpLoadBalancingRules>
</ApplicationGatewayConfiguration>
- 上传APP Gateway的设置
Set-AzureApplicationGatewayConfig -Name hwappgw02 -ConfigFile D:\c.xml
此时通过https访问这个网站,会提示证书不受信任(自签名证书)
点击继续后,出现网站主页面:
而此时虚拟机提供的只是HTTP服务,由application gateway做了SSL的加密发送给用户。
目前Application Gateway可以实现的功能主要是基于CookieAffinity的负载均衡和SSL的Offload。
将来还会出基于URL的HTTP路由策略。新功能出来后,再做更新!
Azure上七层负载均衡APP Gateway的更多相关文章
- Windows Azure支持七层负载均衡--Application Gateway
一直以来Windows Azure的负载均衡(Loadbalancer)功能一直被客户诟病,无法其竞争对手(特别是国内的云厂商)匹敌. Windows Azure的负载均衡器是四层的,前期的版本不支持 ...
- 四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比
一.四层与七层负载均衡在原理上的区别 图示: 四层负载均衡与七层负载均衡在工作原理上的简单区别如下图: 概述: 1.四层负载均衡工作在OSI模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和 ...
- Web负载均衡学习笔记之四层和七层负载均衡的区别
0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...
- 四层and七层负载均衡
四层负载/七层负载 在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 1. 什么是负载均衡 1)负载均衡(Load ...
- nginx 七层负载均衡
[tcp] nginx 七层负载均衡 nginx负载均衡概述 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡, ...
- 13、Nginx七层负载均衡
1.Nginx负载均衡基本概述 1.1为什么需要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡, ...
- Linux架构之Nginx 七层负载均衡
第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...
- 第十五章 nginx七层负载均衡
一.Nginx负载均衡 1.为什么做负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到 ...
- 高可用 & 七层负载均衡与四层负载均衡
内容概要 高可用 七层负载均衡 和 四层负载均衡 内容详细 一.高可用 1.什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用 ...
随机推荐
- 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions (译) http://improve.dk/avoiding-regressions-in-orcamdf-b ...
- android 退出机制
android sdk 退出机制的研究 有多种, 方法一.用list保存activity实例,然后逐一干掉 上代码: import java.util.LinkedList; import java. ...
- Excel使用技巧总结
Excel博大精深,此文用来记录Excel的使用技巧 1.多个单元格值添加单引号,比如:A1单元格的值为123444,添加单引号之后变为'123444',可以在B1或者其他任一空的单元格内输入公式:& ...
- [.net 面向对象编程基础] (2) 关于面向对象编程
[.net 面向对象编程基础] (2) 关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...
- .NET轻量级MVC框架:Nancy入门教程(二)——Nancy和MVC的简单对比
在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy的优势在哪里?和微软的MVC比 ...
- Oracle 权限(grant、revoke)
200 ? "200px" : this.width)!important;} --> 数据库版本:11GR2 一.介绍 在oracle中没有其他数据库系统中的数据库的概念, ...
- Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架
C#LightEvil之前提供了很多和Unity结合的例子,都是采用把脚本文件放置在StreamingAssets中的方法. 这样可以利用Unity的特性,放在这个目录中的CS文件会被编译器编译,我们 ...
- [ZigBee] 5、ZigBee基础实验——图文与代码详解定时器1(16位定时器)(长文)
1.定时器1概述 定时器1 是一个支持典型的定时/计数功能的独立16 位定时器,支持输入捕获,输出比较和PWM等功能.定时器有五个独立的捕获/比较通道.每个通道定时器要使用一个I/O 引脚.定时器用于 ...
- P,NP,NP_hard,NP_complete问题定义
背景:在看李航的<统计学习方法时>提到了NP完全问题,于是摆之. 问题解答:以下是让我豁然开朗的解答的摘抄: 最简单的解释:P:算起来很快的问题NP:算起来不一定快,但对于任何答案我们都可 ...
- JavaScript练习之for循环语句
for循环四要素:初始条件.循环条件.循环体.状态改变. 1.for(var a=i;i<=aa;i++) { 循环体(例sum=sum+i sum是输出的) } 例题 1-20关没关一分 2 ...