Shell 스 크 립 트 LVS 백 엔 드 서버 생존 상태 모니터링
생산 작업 에서 백 엔 드 서버 가 영원히 정상 적 인 운행 상태 에 있 을 수 없습니다. 만약 에 서버 가 다운 되면 현재 진행 중인 업무 에 영향 을 주지 않 고 사용자 에 게 더 좋 은 체험 을 하기 위해 저 희 는 모니터 스 크 립 트 를 작성 하여 LVS 백 엔 드 호스트 의 생존 상황 을 모니터링 해 야 합 니 다. 서버 가 고장 이 났 을 때스 크 립 트 는 LVS 퍼 가기 정책 에서 서버 의 퍼 가기 규칙 을 삭제 합 니 다.서버 가 정상 으로 돌아 오 면 스 크 립 트 도 이 서버 의 퍼 가기 규칙 을 LVS 퍼 가기 정책 에 다시 추가 합 니 다.모든 배경 서버 가 다운 되면 스 크 립 트 는 가상 ip 의 포트 를 이 컴퓨터 포트 로 자동 으로 전송 하여 버퍼 역할 을 합 니 다.
전기 준비
LVS 부하 균형 정책 설정 상세 정보 참고https://blog.51cto.com/14832653/2501128
모니터링 스 크 립 트 작성
#!/bin/bash
# IP
VIP=192.168.29.122
# IP
LIP=192.168.29.143
#
VPORT=80
#
RPORT=80
#LVS
TYPE=g
#
LOG=/tmp/ipvs.log
declare -i AS=0
declare -i flag=0
declare -a RS=("192.168.29.142" "192.168.29.144")
declare -a RW=(1 1)
declare -a RSSTATUS=(0 0)
# LVS
function initstatus(){
index=0
for((;index<2;index++))
do
ip=${RS[$index]}
num=$(ipvsadm -Ln|grep $ip |wc -l)
if [ $num -eq 1 ];then
RSSTATUS[$index]=1
let AS++
else
RSSTATUS[$index]=0
fi
done
}
#
function addrs(){
`ipvsadm -a -t $VIP:$VPORT -r $1:$RPORT -$TYPE -w $2`
echo "$(date) add $1 to ipvsadm" >> $LOG
}
#
function delrs(){
`ipvsadm -d -t $VIP:$VPORT -r $1`
echo "$(date) remove $1 from ipvsadm" >> $LOG
}
#
function checkrs(){
index=0
for((;index<2;index++))
do
ip=${RS[$index]}
weight=${RW[$index]}
status_num=${RSSTATUS[$index]}
num=$(curl --connect-timeout 2 -ls http://$ip |wc -l )
if [[ $num -eq 1 && $status_num -eq 0 ]];then
addrs $ip $weight
RSSTATUS[$index]=1
let AS++
# ,
if [[ $AS -eq 2 && $flag -eq 1 ]];then
delrs $LIP
let AS--
flag=0
fi
elif [[ $num -eq 1 && $status_num -eq 1 ]];then
continue
elif [[ $num -eq 0 && $status_num -eq 1 ]];then
delrs $ip
RSSTATUS[$index]=0
let AS--
# ,LVS IP
elif [[ $AS -eq 0 ]];then
addrs $LIP 1
let AS++
flag=1
fi
done
}
initstatus
#
while :
do
checkrs
sleep 5
echo "keep monitoring..."
done
테스트 검증
node 2 서비스 닫 기
[root@node2 ~]# systemctl stop httpd.service
#
remove 192.168.29.142 from ipvsadm
# ipvsadm
[root@node1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr
-> node3:http Route 1 0 0
node 3 서비스 도 종료
[root@node3 ~]# systemctl stop httpd.service
#
remove 192.168.29.144 from ipvsadm
add 192.168.29.143 to ipvsadm
# ipvsadm
[root@node1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr
서비스 다시 시작
[root@node2 ~]# systemctl start httpd.service
[root@node3 ~]# systemctl start httpd.service
# ipvsadm
[root@node1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr
-> node2:http Route 1 0 0
-> node3:http Route 1 0 0
#
add 192.168.29.142 to ipvsadm
remove 192.168.29.143 from ipvsadm
add 192.168.29.144 to ipvsadm
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 입문 부터 정통 한 for 순환 및 6 가지 난수 생 성 법순환 용 1. [문법 구조] 2. 문법 linux 에서 무 작위 수 를 만 드 는 여섯 가지 방법 방법 1: 방법 2: openssl 을 통 해 난수 생 성 방법 3: date 시간 을 통 해 얻 을 수 있 습 니 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.