前言:python
正常状况下一个IP对应一个域名,可是能够经过dns轮训的方式将一个域名对应多个ip,这样就能够达到一种负载均衡的效果,那么当用户访问网站的 时候,有可能被解析到不一样的ip上去,若是这个ip的服务器出现异常,那么此时这部分用户访问的页面就是错误的,甚至是没法访问。为了不这种状况的发 生,因此咱们须要监控这些ip节点,好了开始上干货,将脚本加入crontab中便可,就能够实时监控。服务器
Dns域名轮训监控代码以下:
app
root@search zhaodong]# cat dns_monitor.py #!/usr/bin/env python #coding=utf8 #Author zhaodong #使用pydns模块解析域名,将解析以后的A记录存储在iplist列表中,而后经过httplib模块访问iplist中的数据,来判断响应码是不是200,以此实现dns域名轮询的监控 import dns.resolver import os import httplib import smtplib from email.MIMEText import MIMEText from email.Header import Header #设置收件人邮箱,改为你本身的邮箱 mailto_list=['zhaodong@163.tv'] #下面这些设置改为你本身的信息 ######################################### mail_host="smtp.163.com" #设置服务器 mail_user="zhaodong" #用户名 mail_pass="123456" #密码 mail_postfix="163.com" #发件箱的后缀 ########################################## #定义dns解析ip列表 iplist=[] #定义域名列表 #定义成你公司的域名 dlist=['tshare365.com','baidu.com'] ###################################### def send_mail(to_list,sub,content): me="DNS轮询故障"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content,_subtype='plain',_charset='utf_8') msg['Subject'] = sub msg['From'] = me msg['To'] = ";".join(to_list) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user,mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False def Dns(domain): A = dns.resolver.query(domain, 'A') for i in A.response.answer: for p in i: iplist.append(p.address) def Checkip(ip): try: httpClient = httplib.HTTPConnection(ip, 80, timeout=30) #这里设置的是根目录,须要将/改为你监控页面的访问路径 httpClient.request('GET', '/') #response是HTTPResponse对象 response = httpClient.getresponse() #获取响应码和状态 #print response.status #print response.reason except Exception, e: print e finally: #判断响应码是不是200, if response.status==200: # print ip+"[ok]" else: #响应码不是200就调用send_mail函数发送邮件报警 send_mail(mailto_list,"DNS轮询发现故障节点",ip) # print ip+"[Error]" if httpClient: httpClient.close() if __name__ =="__main__": #若是有多个域名就在定义一个域名列表 循环遍历便可 for d in dlist: #print d Dns(d) for i in iplist: Checkip(i)
至此结束!
负载均衡