在上一篇文章中给大家介绍了使用DNS构建基于地理位置感知的应用负载均衡,那么这篇主要给大家介绍使用Windows Server 2019的DNS实现基于时间感知的应用负载均衡,还是参考下老王之前写的这篇文章《Windows Server 2016 DNS Policy Tod-Intelligent 2》我的环境还是和之前的环境一样:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第1张图片

只是我在这个环境中让web01和web02服务器提供的web显示页面中增加了时间展示:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第2张图片

还是按照上一篇文章的方法设定好DNS客户端子网:

Add-DnsServerClientSubnet -Name "ChengduSubnet" -IPv4Subnet 172.16.1.0/24

Add-DnsServerClientSubnet -Name "BeijingSubnet" -IPv4Subnet 192.168.1.0/24

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第3张图片

接下来设定好区域范围

Add-DnsServerZoneScope -ZoneName "basehome.com.cn" -Name "ChengduZoneScope"

Add-DnsServerZoneScope -ZoneName "basehome.com.cn" -Name "BeijingZoneScope"

clip_image004

接下来在各自逻辑区域范围内添加A记录

Add-DnsServerResourceRecord -ZoneName "basehome.com.cn" -A -Name "web" -IPv4Address "172.16.1.10" -ZoneScope "ChengduZoneScope"

Add-DnsServerResourceRecord -ZoneName "basehome.com.cn" -A -Name "web" -IPv4Address "192.168.1.10" -ZoneScope "BeijingZoneScope"

clip_image005

重点来了,区别在DNS的策略部分,我需要设定一个场景:

比如成都的web01服务器是每天12点-13点是访问高峰期,那么我希望来自成都网段的客户端WinVista01在这个时间段成都的web01服务器承担80%的流量,而北京的web02服务器承担20%的流量,那么我应该写一条如下这样的策略:

Add-DnsServerQueryResolutionPolicy -Name "Chengdu12To13Policy" -Action ALLOW -ClientSubnet "eq,ChengduSubnet" -ZoneScope "ChengduZoneScope,4;BeijingScope,1" -TimeOfDay "EQ,12:00-13:00" -ZoneName "basehome.com.cn" -ProcessingOrder 1

但为了让效果更明显极端,我的场景需要再优化一下:

比如成都的web01服务器是每天12点-13点是访问高峰期,那么我希望来自成都网段的客户端WinVista01在这个时间段成都的Web01服务器承担100%的流量,北京的Web02不承担流量,那么我就执行如下:

Add-DnsServerQueryResolutionPolicy -Name "Chengdu12To13Policy" -Action ALLOW -ClientSubnet "eq,ChengduSubnet" -ZoneScope "ChengduZoneScope,1" -TimeOfDay "EQ,12:00-13:00" -ZoneName "basehome.com.cn" -ProcessingOrder 1

clip_image006

比如北京的web02服务器也是每天12点-13点是访问高峰期,那么我希望来自北京网段的客户端WinVista02在这个时间段北京的Web02服务器承担100%的流量,成都的Web01不承担流量,那么我就执行如下:

Add-DnsServerQueryResolutionPolicy -Name "Beijing12To13Policy" -Action ALLOW -ClientSubnet "eq,BeijingSubnet" -ZoneScope "BeijingZoneScope,1" -TimeOfDay "EQ,12:00-13:00" -ZoneName "basehome.com.cn" -ProcessingOrder 2

clip_image007

现在正时12点-13点之间看看效果:

成都站点的WinVista01客户端访问:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第4张图片

北京站点的WinVista02客户端访问:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第5张图片

那么除了每天12点-13点外的时间,我还是可以按照上一篇文章基于地理位置感知来进行流量分流

为了效果更为明显和极端,我设定为除了每天12点-13点外,来自成都网段的客户端访问web.basehome.com.cn网站是由北京的web02服务器承担100%的流量;来自北京网段的客户端访问web.basehome.com.cn网站是由成都的web01服务器承担100%的流量。那么我执行:

Add-DnsServerQueryResolutionPolicy -Name "ChengduPolicy" -Action ALLOW -ClientSubnet "eq,ChengduSubnet" -ZoneScope "BeijingZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 3

Add-DnsServerQueryResolutionPolicy -Name "BeijingPolicy" -Action ALLOW -ClientSubnet "eq,BeijingSubnet" -ZoneScope "ChengduZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 4

clip_image010

最后还需要设定来自非成都和北京网段的客户端访问web.basehome.com.cn网站时,成都和北京的web服务器各自承担50%的流量

Add-DnsServerQueryResolutionPolicy -Name "RestOfWorldPolicy" -Action ALLOW -FQDN "eq,*.basehome.com.cn" -ZoneScope "ChengduZoneScope,1;BeijingZoneScope,1" -ZoneName "basehome.com.cn" -ProcessingOrder 5

clip_image011

到这里就OK了,验证下结果吧

成都站点的WinVista01客户端访问:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第6张图片

成都站点的WinVista02客户端访问:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第7张图片

最后我以下面这张图总结下:

WinSrv2019使用DNS构建基于时间感知的应用负载均衡_第8张图片

更多详细的可以参看:https://docs.microsoft.com/en-us/windows-server/networking/dns/deploy/dns-tod-intelligent