LVS健康檢測指令碼分享

2021-09-02 05:17:10 字數 2668 閱讀 6782

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 請求介面字段 字...