大部分的dns解析都是乙個網域名稱對應乙個ip位址,但是通過dns輪詢技術可以做到乙個網域名稱對應多個ip,從而實現最簡單且高效的負載平衡,不過此方案最大的弊端是目標主機不可用時無法被自動剔除,因此做好業務主機的服務可用監控至關重要。本例項通過分析當前網域名稱的解析ip,再結合服務埠探測實現自動監控,在網域名稱解析中新增、刪除ip時,無需對監控監本進行修改。
我們主要分為以下兩個步驟實現本例項:
1)實現網域名稱的解析,獲取網域名稱所有的記錄解析ip列表
2)對ip列表進行http級別的探測
具體**如下:
我們可以將此python指令碼放入crontab執行計畫中,再結合告警程式,基本可以滿足基於網域名稱輪詢的業務監控。# -*- coding:utf-8 -*-
'''created on 2023年1月3日
#定義域名ip列表變數
iplist =
#定義業務網域名稱
#網域名稱解析函式,解析成功ip將被追加到iplist
def get_iplist(domain = ""):
try:
a = dns.resolver.query(domain, 'a')
except exception, e:
print "dns resolver error: " + str(e)
return
for i in a.response.answer:
for j in i.items:
#將ip追加到列表中
return true
#檢測ip是否能夠連通
def checkip(ip):
checkurl = ip+":80"
getcontent = ""
#定義http連線超時時間5秒
#建立http連線物件
#發起url請求,新增host主機頭
r = conn.getresponse()
getcontent = r.read(15)
finally:
#監控url頁的內容一般是事先定義好的,比如 「http200」等
print getcontent
if getcontent == "":
print ip + " [ok]"
else:
#此處可放告警程式,可以是郵件、簡訊通知
print ip + " [error]"
if __name__ == "__main__":
#條件:網域名稱正確解析並且至少返回乙個ip
for ip in iplist:
checkip(ip)
else:
print "dns resolver error."
基於HTTP的長輪詢簡單實現
web客戶端與伺服器之間基於ajax http 的常用通訊方式,分為短連線與長輪詢。短連線 客戶端和伺服器每進行一次http操作,就建立一次連線,任務結束就中斷連線。在長輪詢機制中,客戶端像傳統輪詢一樣從伺服器請求資料。然而,如果伺服器沒有可以立即返回給客戶端的資料,則不會立刻返回乙個空結果,而是保...
Python之實現聊天室
from socket import import threading s1 socket af inet,sock dgram localhost 192.168.2.216 8077 otherhost 192.168.2.216 8088 s1.bind localhost defmain p...
python基礎之實現float函式
本題只將字串型別的數字轉換為float資料 實現思路 重點是找到小數點的位置,然後除去相應的值,就能獲得對應的小數 實現float 只將字串轉換為float型別的資料 如 34.22 轉換為34.22 str int dict defmy float string string list strin...