DNS域名轮询业务监控

  大部分的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮询技术可以做到一个域名对应多个IP,从而实现最简单高效的负载均衡,不过此方案最大的弊端是目标主机不可用时无法被自动剔除,因此做好业务主机的服务可用性监控至关重要。本示例通过分析当前域名的解析IP,在结合服务端口探测来实现自动监控,在域名解析中添加、删除IP时,无需对监控脚本进行修改,实现架构如下所示:

 

 步骤:

  1、实现域名解析,获取域名所有的A记录解析IP列表;

  2、对IP列表进行HTTP级别的探测

 1 #!/usr/bin/evn python
 2 # --*-- coding: utf-8 --*--
 3 # Auther : Liu WeiDong
 4 
 5 import dns.resolver
 6 import http.client
 7 
 8 iplist = []    #定义域名IP列表变量
 9 appdomain = "www.baidu.com"     #定义业务域名
10 
11 def get_iplist(domain):         #域名解析函数,解析成功IP将追加到iplist中
12     try:
13         A = dns.resolver.resolve(appdomain,'A')   #解析A记录类型
14     except Exception as e:
15         print('dos resolve error:'+str(e))
16     for i in A:
17         iplist.append(i)     # 追加到iplist列表中
18     return True
19 
20 def checkip(ip):
21     checkurl = str(ip)
22     getcontent = "200"
23     conn = http.client.HTTPConnection(checkurl, 80) #初始化一个http链接
24     try:
25         conn.request("GET","/")    #指定request请求的方法和请求的链接地址
26         res = conn.getresponse()   #得到返回的http response
27     finally:
28         if getcontent == res.status:     #获取请求的状态码
29             print(str(ip) + " " + res.reason)
30         else:
31             print(str(ip) + " " + str(res.reason))
32 
33 if __name__ == "__main__":
34     if get_iplist(appdomain) and len(iplist) > 0:
35         for ip in iplist:
36             checkip(ip)
37     else:
38         print("dns resolver error....")

 

posted @ 2022-07-01 11:46  摩天居士-谢烟客  阅读(175)  评论(0编辑  收藏  举报