在上一篇文章中给大家介绍了使用DNS构建基于地理位置感知的应用负载均衡,那么这篇主要给大家介绍使用Windows Server 2019的DNS实现基于时间感知的应用负载均衡,还是参考下老王之前写的这篇文章《Windows Server 2016 DNS Policy Tod-Intelligent 2》我的环境还是和之前的环境一样:
只是我在这个环境中让web01和web02服务器提供的web显示页面中增加了时间展示:
还是按照上一篇文章的方法设定好DNS客户端子网:
Add-DnsServerClientSubnet -Name "ChengduSubnet" -IPv4Subnet 172.16.1.0/24
Add-DnsServerClientSubnet -Name "BeijingSubnet" -IPv4Subnet 192.168.1.0/24
接下来设定好区域范围
Add-DnsServerZoneScope -ZoneName "basehome.com.cn" -Name "ChengduZoneScope"
Add-DnsServerZoneScope -ZoneName "basehome.com.cn" -Name "BeijingZoneScope"
接下来在各自逻辑区域范围内添加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"
重点来了,区别在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
比如北京的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
现在正时12点-13点之间看看效果:
成都站点的WinVista01客户端访问:
北京站点的WinVista02客户端访问:
那么除了每天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
最后还需要设定来自非成都和北京网段的客户端访问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
到这里就OK了,验证下结果吧
成都站点的WinVista01客户端访问:
成都站点的WinVista02客户端访问:
最后我以下面这张图总结下:
更多详细的可以参看:https://docs.microsoft.com/en-us/windows-server/networking/dns/deploy/dns-tod-intelligent