应用场景:

目前DNS支持一个域名对应多个IP的解析,优势是可以起到负载均衡的作用,最大的问题是目标主机不可用时无法自动剔除,因此必须在自己的业务端写好监控与发现,怎么样来做这样的监控,以python为例,使用的是dnspython模块,通过dnspython模块解析出域名的A记录 IP地址,然后使用http 80端口探测该IP是否正常

1 安装

pip dnspython

2 代码展示:

#!/usr/bin/env python
#_*_coding:utf-8 _*_
#__author__:Davidlua import dns.resolver
import os
import httplib iplist = [] #定义域名IP列表变量
appdomain = "www.baidu.com" #定义目标域名 def get_iplist(domain=""):
"""域名解析函数,解析成功IP追加到iplist"""
try:
A = dns.resolver.query(domain,'A') #解析A记录
except Exception,e:
print "dns resolver error:" +str(e)
return
for i in A.response.answer: #使用responese.answer方法
for j in i.items:
iplist.append(j) #追加到iplist
return True def checkip(ip):
oip = ('%s') % ip #将解析的Ip转为字符串格式,以便跟:80端口合并
checkurl = oip+":80"
getcontent = ""
httplib.socket.setdefaulttimeout(5) #定义http链接超时时间
conn=httplib.HTTPConnection(checkurl) #创建http链接对象 try:
conn.request('GET',"/",headers={"Host":appdomain}) #发起url请求,添加host主机
r = conn.getresponse()
getcontent = r.read(15) #只获取url页面的15个字符,用来做可用性校验
finally:
if getcontent == "<!DOCTYPE html>": #监控url页面的类型要先查清楚,在做对比,这里<!DOCTYPE html>要大写,也可以对比http状态码
print oip+" [ok]"
else:
print oip+" [error]" #这里可以放置告警程序,比如发短信,邮件等 if __name__ == "__main__":
if get_iplist(appdomain) and len(iplist) > 0: #域名解析正确,且不少于1个IP
for ip in iplist:
checkip(ip)
else:
print "dns resolver error."

3 结果展示

C:\Python27\python.exe D:/python/github/miniwanmonitor/domen.py
www.a.shifen.com. [ok]
14.215.177.38 [ok]
14.215.177.39 [ok]
dns resolver error.

Process finished with exit code 0

python DNS域名轮询业务监控的更多相关文章

  1. python 定时器,轮询定时器

    首先想要实现的效果是:每隔1段时间,就去调用1个接口确认结果,直到接口返回的结果为true,停止调用 所以这里会用到python的定时器 先来了解最简单的定时器: python 定时器默认定时器只执行 ...

  2. linux实现DNS轮询实现负载平衡

    DNS 轮询机制会受到多方面的影响,如:A记录的TTL时间长短的影响:别的 DNS 服务器 Cache 的影响:windows 客户端也有一个DNS Cache.这些都会影响 DNS 轮询的效果.因此 ...

  3. 用fiddler测试ip轮询

    测试业务: 服务端根据域名配置了三台服务器ip,测试ip轮询的逻辑 测试方法: 使用fiddler配置hosts即可 1.1.1.1 第一台ip 1.1.1.1 第二台ip 1.1.1.1 第三台ip ...

  4. Nginx反向代理+DNS轮询+IIS7.5 千万PV 百万IP 双线 网站架构案例

    原文地址:http://www.jb51.net/article/31844.htm Nginx  ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 ...

  5. Linux-LVS为何不能完全替代DNS轮询

    转自:链接 上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepalive ...

  6. 系统架构之负载均衡【F5\nginx\LVS\DNS轮询\】

    在做系统架构规划的时候,负载均衡,HA(高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点,当活动节点出现故障的时候,由备用节点接管)都是经常需要考虑的 ...

  7. 【58沈剑架构系列】lvs为何不能完全替代DNS轮询

    上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepalived可以替代“ ...

  8. 【转载】lvs为何不能完全替代DNS轮询

    上一篇文章"一分钟了解负载均衡的一切"引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点: 1)nginx前端加入lvs和keepa ...

  9. lvs为何不能完全替代DNS轮询--转

    原文地址:http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959595&idx=1&sn=5f0633afd2 ...

随机推荐

  1. C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward

    这篇文章要介绍的内容和标题一致,关于C++ 11中的这几个特性网上介绍的文章很多,看了一些之后想把几个比较关键的点总结记录一下,文章比较长.给出了很多代码示例,都是编译运行测试过的,希望能用这些帮助理 ...

  2. Flask從入門到入土(三)——模板

    模板是一個包含響應文本的文件,其中包含佔位變量表示的動態部分,其具體值只是請求上下文中才能知道.使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱爲渲染.爲了渲染模板,Flask使用了一個名爲 ...

  3. c++ 如何获取多线程的返回值?

    // Console.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> #include ...

  4. 2017CCPC 网络选拔赛1003 Ramsey定理

    Ramsey定理 任意6个人中,一定有三个人互为朋友,或者互相不是朋友. 证明 这里我就不证明了.下面链接有证明 鸽巢原理 Ramsey定理 AC代码 #include <stdio.h> ...

  5. UVA - 1371 Period 二分+dp

    思路:设字符串x的长度为n,y的长度为m,那么答案一定在[0, m]之间,那么可以二分求答案. d(i, j)表示第一个串前i个字符至少需要经过多少次才能的到第二个串的前j个字符,转移方程d(i, j ...

  6. nyoj1204 魔法少女 线性DP

    d[i][0]表示到达第i层,且在第i层没有使用魔法的最少时间 d[i][1]表示到达第i层,且在第i层使用魔法通过一层 d[i][2]表示到达第i层,且在第i层使用魔法通过两层 状态转移方程: d[ ...

  7. react-native入坑随笔(持续更新中)

    一.问题: 解决方案:删除./node_modules/react-native/local-cli/core/__fixtures__/files/package.json,删除前记得备份. 二.在 ...

  8. 在Hadoop2.2基础上安装Spark(伪分布式)

    没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...

  9. sizeof计算空间大小的总结

    sizeof,看起来还真不简单,总结起来还是一大堆的东西,不过这是笔试面试中出现比较频繁的,我也是考过才觉得很重要,有些规则如果不注意,还真是拿到一道题目摸不着头脑,所有总结一下,方面忘记的时候瞄一瞄 ...

  10. 第3章 PCI总线的数据交换

    PCI Agent设备之间,以及HOST处理器和PCI Agent设备之间可以使用存储器读写和I/O读写等总线事务进行数据传送.在大多数情况下,PCI桥不直接与PCI设备或者HOST主桥进行数据交换, ...