您的位置:首页 > 运维架构

DNS域名轮循业务监控

2016-07-24 13:38 435 查看
我们一般的DNS解析是一个域名对应一个IP地址,但是若我们用DNS轮循技术即可将一个域名对应多个IP地址,这样可以实现简单且高效的负载平衡,但是轮循技术有一个缺点就是当目标主机不可用时,不能自动的删除,所以引出了要对业务主机的服务的可用性进行监控。

具体流程是利用dnspython模块的resolver.query()函数对域名进行解析,获取域名的所有A记录的IP地址,再是对每一个IP地址进行HTTP级别的探测。

以下给一个检测baidu.com的目标主机是否可用。

# -*- coding: utf-8 -*-


import dns.resolver

import httplib

import os

iplist = []

appdomain = “baidu.com” #host域名

def get_iplist(domain = “”):

try:

A = dns.resolver.query(appdomain, “A”)

except Exception, e:

print “dns resolver error:” + str(e)

return

for i in A.response.answer:

for j in i.items:

if j.rdtype == 1:

iplist.append(j.address)

else:

pass

return True

def checkip(ip):

conn = httplib.HTTPConnection(ip, 80, False, 5)

try:

conn.request(“GET”, “/”, headers = {“Host”:appdomain})

r = conn.getresponse()

getcontent = r.read(6)

if getcontent == “”: #每一个域名发送回来的数据都不同这里必须是特定的

print ip + ” [OK]”

else:

print ip + ” [Error]” #

except:

pass

if name == “main“:

if get_iplist(appdomain) and len(iplist) > 0:

for ip in iplist:

checkip(ip)

else:

print “dns resolver error”

我们其实可以将这个脚本放入crontab中定时运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dns python dnspython httplib