1、真實伺服器健康狀態檢測
我們可以通過shell指令碼,實現對lvs後端的真實伺服器開放服務的健康狀態檢測功能。當真實伺服器服務出現問題,則自動將其從集群服務中移除,當真實伺服器服務恢復,則自動將其加入到負載均衡集群服務中。
1.1 基於埠的健康檢測
指令碼思路:
通過掃瞄後端伺服器的埠來判斷真實伺服器是否健康!
若埠開放則表示真實伺服器健康,則將其加入到lvs集群中。若已存在集群中則不做任何操作。
若埠未開發則表示真實伺服器故障,則將其從lvs集群中移除。若不存在則不做任何操作。
shell指令碼內容如下:
# cat lvs_port_health.sh
#配置集群服務位址和真實伺服器位址池
vip="172.16.16.100"
vport="80"
rspool="172.16.16.2 172.16.16.3"
rsport="80"
#本地時間
localtime=`date +%y-%m-%d\ \%h:%m:%s`
#安裝nmap掃瞄埠工具
nmap=`rpm -qa |grep nmap |wc -l`
if [ $nmap = 0 ]
then
yum -y install nmap
fi#真實伺服器健康檢測機制:
#當真實伺服器故障時自動從集群服務中移除
#當真實伺服器恢復時自動加入集群服務
while :;
dosleep 3;
for i in $rspool
doopenport=`nmap $i -p $rsport |awk 'nr==6'`
rstesting=`ipvsadm -ln|grep $i:$rsport|wc -l`
if [ $openport = open ]
then
if [ $rstesting = 0 ]
then
ipvsadm -a -t $vip:$vport -r $i:$rsport -g >/dev/null 2>&1
echo "$localtime 真實伺服器[$i:$rsport]加入集群服務[$vip:$vport]!"
fielse
if [ $rstesting != 0 ]
then
ipvsadm -d -t $vip:$vport -r $i:$rsport
echo "$localtime 真實伺服器[$i:$rsport]從集群服務[$vip:$vport]中移除!"
fifi
done
done
1.2 基於訪問的健康檢測
在web集群中,基於埠的健康檢測並不夠精確,埠開放不代表web服務是正常工作的,所以我們更好的解決方法就是直接去訪問一下。
指令碼思路:
通過直接訪問web來判斷真實伺服器是否健康!
若可訪問則表示真實伺服器健康,則將其加入到lvs集群中。若已存在集群中則不做任何操作。
若訪問失敗則表示真實伺服器故障,則將其從lvs集群中移除。若不存在則不做任何操作。
shell指令碼內容如下:
# cat lvs_access_health.sh
#!/bin/bash
#配置集群服務位址和真實伺服器位址池
vip="192.168.30.98"
vport="36160"
rspool="192.168.30.100 192.168.30.101"
rsport="36160"
#本地時間
localtime=`date +%y-%m-%d\ \%h:%m:%s`
#安裝curl工具
curl=`rpm -qa |grep curl |wc -l`
if [ $curl = 0 ]
then
yum -y install curl
fi#真實伺服器健康檢測機制:
#當真實伺服器故障時自動從集群服務中移除
#當真實伺服器恢復時自動加入集群服務
while :;
dosleep 3;
for i in $rspool
dorstesting=`ipvsadm -ln|grep $i:$rsport|wc -l`
#curl $i:$rsport >/dev/null 2>&1
nc -w 10 -z $i $rsport > /dev/null 2>&1
if [ $? = 0 ]
then
if [ $rstesting = 0 ]
then
ipvsadm -a -t $vip:$vport -r $i:$rsport -g >/dev/null 2>&1
echo "$localtime 真實伺服器[$i:$rsport]加入集群服務[$vip:$vport]!"
fielse
if [ $rstesting != 0 ]
then
ipvsadm -d -t $vip:$vport -r $i:$rsport
echo "$localtime 真實伺服器[$i:$rsport]從集群服務[$vip:$vport]中移除!"
fifi
done
done
shell指令碼分享
1 編寫指令碼 bin per.sh,判斷當前使用者對指定引數檔案,是否不可讀並且不可寫 2 編寫指令碼 root bin excute.sh,判斷引數檔案是否為sh字尾的普通檔案,如果是,新增所有人可執行許可權,否則提示使用者非指令碼檔案 3 編寫指令碼 root bin nologin.sh和l...
CSDN遷移Hexo指令碼分享
這一陣子,剛換了落腳地兒,沒想好該去折騰什麼,恰好看到可以用git page搭建乙個部落格,就搞了搞。關於主題啊,配置啊什麼的,網上都有好多,偏偏遷移這個事兒挺麻煩,幸好有找到一前輩的指令碼,可以將csdn的部落格匯出為markdown格式,但是其匯出來的md檔案並不能直接用hexo,想要顯示的好一...
PHP實現的簡單mock json指令碼分享
現在有太多方法去mock,不過當還是要連線到遠端伺服器上測試真正的返回的時候,如果機器上沒有跑node而且有php的話,用這貨來臨時mock一下,或許更輕鬆。複製 如下 mock json for j ascript author soulteary date 2014 06 15 請求介面字段 字...