shell解決DNS負載平衡RS的健康檢測

來源:互聯網
上載者:User

DNS負載平衡,是最早的實現負載平衡技術的。在DNS的設定檔中為多個地址配置同一個名字,即配置多條指向不同ip的A記錄,而用戶端在查詢這條A記錄的時候將隨機獲得其中一個地址。通過以上描述不難發現,DNS負載平衡有著配置簡單,效能優異,沒有修改架構的開銷等特點。因此,經常被用在內網。

說了優點,也要說說缺點。DNS負載平衡採用的是簡單的輪循負載演算法,不能分辨伺服器的差異,不能根據後端伺服器的運行狀態進行動態調整,即健全狀態檢查。由於實現演算法的隨機性,不能為效能較好的伺服器更多的分配請求,經常會出現將請求集中在某一台伺服器上的現象。

如果你負載平衡的要求很高,不如使用其他負載平衡技術來的容易,比如LVS,Nginx或者HAproxy。修改演算法,不僅要看明白洋洋散散幾萬行源碼,還要將自己的代碼完美融合進去,這個成本因人而異,但肯定不是一朝一夕之功。但如果只是後端伺服器的健康檢測問題,使用shell指令碼就可以辦到。

思路:DNS伺服器通過某種機制對後端RS主機的運行狀態進行判斷,如果後端主機出現故障,那麼DNS所要做的是修改設定檔,將問題主機從設定檔中提出並重啟服務。更進一步,當RS主機恢複時,DNS主機還要將其恢複到設定檔中。

首先是健康檢測機制。如果RS主機是web服務,那麼可選的至少有三個,icmp,telnet,curl分別工作在第三層,第四層,和第七層。我們在這裡使用icmp。修改設定檔,可以通過將提前準備好的設定檔覆蓋原檔案做到,當然還有sed -i,我們在這裡使用sed -i。最後使用while及if elif將這些元素合理的嵌套。

web1 192.168.1.1     web2  192.168.1.2

DNS設定檔:

 

www IN A 192.168.1.1

www IN A 192.168.1.2

#! /bin/bash

while true;do #定義無限迴圈,讓指令碼不間斷工作。

ping -c1 192.168.1.1 &> /dev/null #由於linux下的ping命令會無限進行下去,所以我們要使用-c參數指定資料包個數,並將標準錯誤和標準輸出全部重新導向到/dev/null這個髒目錄中。

if ! [ $? -eq 0 ];then #如果$?的傳回值不為零,即ping不通。

    sed -i '/192.168.1.1/s/^/;/' dns #修改設定檔,將包含192.168.1.1的行開頭替換成;號。(dns設定檔的注釋是;號)

    /etc/init.d/bind restart

else

    sed -i '/192.168.1.1/s/;//' dns #如果可以ping通,那麼去掉;

    /etc/init.d/bind restart

fi

ping -c1 192.168.1.2 &> /dev/null

if ! [ $? -eq 0 ];then

    sed -i '/192.168.1.2/s/^/;/' dns

    /etc/init.d/bind restart

else

    sed -i '/192.168.1.2/s/;//' dns

    /etc/init.d/bind restart

fi

    sleep 5 #休息5秒,繼續工作。

done

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.