lvs+ntp 使用記錄與疑問

        服務器比較多,操做系統比較雜,有liunx,win,freebsd,debain。因爲數據庫與應用服務器時間不一樣步,出了不少問題,剛開始的時候讓win 本身同步ms時間服務器,linux 同步其餘操做系統經過ntp 同步互聯網時間服務器,但是時間久了發現一個問題。win時間同步有時會出錯,沒法同步,致使時間會慢下來。因而想到在本身的小網絡裏面啓一個ntp服務器,全部服務器都同步這一臺。但是問題又來了,某一天這臺ntp服務器出問題了,須要重啓安裝。致使幾個小時其餘服務器都無法同步到這臺時間服務器,(我使用的ntpdate cron方式)。結果服務器時間又出問題。最後想到用lvs,後面擋幾臺ntp,這樣隨便down一臺都關係不大。在這過程中發現,freebsd ntp server 同步時間很快,ntp server 啓動client 就能夠同步了,可是linux(centos,redhat)的ntp server 啓動後至少1,2分鐘或者是更長時間client 都沒法同步(以致於增長了我對freebsd的好感)。 linux

        對於lvs 配置,剛開始使用的是redhat 的piranha,發現很不穩定。最後換成keepalived(DR模式)。結果是一波三折。剛開始用的是MISC_CHECK加shell,開始配置成功,測試也成功,能夠正確檢測到 123端口shutdown,up。可是過了兩天後發現沒法檢測到udp 端口狀態變化了,不管端口是否變化,可是keepalived 一直檢測端口是up的。shell 腳本: shell

cat ntp_status.sh
#!/bin/bash
ntp_status=`/usr/sbin/ntpdate -q $1`
function my_ntp(){
  if [[ ! -z $ntp_status ]]
  then
    echo "success"
  else
    echo "failed"
  fi
}
my_ntp 數據庫

手工直接查看輸出結果一切正常,把echo 改爲return 0或者是1 也不行,很詭異。最後直接在keepalivsed中配置,結果一切正常: centos

具體配置: bash

virtual_server 192.88.50.41 123 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    persistence_timeout 60
    protocol UDP

    real_server 192.88.50.28 123 {
        weight 2
         MISC_CHECK  {
            connect_timeout 2
            misc_path "/usr/sbin/ntpdate -q 192.88.50.28 > /dev/null"
           
        }

    }

    real_server 192.88.50.26 123 {
        weight 1
         MISC_CHECK  {
            connect_timeout 2
            misc_path " misc_path "/usr/sbin/ntpdate -q 192.88.50.26 > /dev/null""
           
        }
    }
    real_server 192.88.50.132 123 {
        weight 10
         MISC_CHECK  {
            connect_timeout 2
            misc_path "/usr/sbin/ntpdate -q 192.88.50.132 > /dev/null"
           
        }
    }

} 服務器

這樣在日誌中能夠看到端口狀態變化,(經過shell 是沒法看到的) 網絡

Keepalived_healthcheckers[24765]: Misc check to [192.88.50.28] for [/usr/sbin/ntpdate -q 192.88.50.28 > /dev/null] success.
 Keepalived_healthcheckers[24765]: Adding service [192.88.50.28]:123 to VS [192.88.50.41]:123 tcp

Keepalived_healthcheckers[24765]: Misc check to [192.88.50.28] for [/usr/sbin/ntpdate -q 192.88.50.28 > /dev/null] failed.
Keepalived_healthcheckers[24765]: Removing service [192.88.50.28]:123 from VS [192.88.50.41]:123 svn

這個地方很奇詭,keepalived 怎麼沒法撲捉到shell返回的結果,可是個人另一個dns lvs(udp 53 端口,不是tcp 53) 也是經過shell 直接返回結果,keepalived 就能夠撲捉到返回結果,附dns check 腳本: oop

cat /etc/keepalived/dnscheck
#!/bin/bash

#$Id: keepalivepin,v 1.2 2006/02/27 07:30:41 hmy Exp hmy $
#use dig check the powerdns's status.
#in the dns database,have a IN TXT RR keepalivepin.vmmatrix.net,content is "AaBbCcDdEeFf"
# Source: http://puppet-manifest-share.googlecode.com/svn/trunk/vmx-puppet/modules/lvs/files/keepalived.dns-pin
#
RR=mydns.test.com
[ $# -le 1 ]&&{ echo "usage: ${0} -h <ip>"; exit 126;}
while getopts "h:" OPT;do
case $OPT in
h)host=$OPTARG;;
*)echo "usage: $0 -h <ip>"&&exit 1;;
esac
done
dig @${host} txt ${RR}|grep "\<mydns\>" >/dev/null
exit $?

其實這個腳本也是返回直行結果shell 狀態。爲何就能夠,有越到和我同一問題的小夥伴們有什麼意見。難道是MISC_CHECK 有什麼其餘狀態的參數?

相關文章
相關標籤/搜索