keepalived + nginx 고 부하 균형 흔 한 고장 문제 해결 방법

nginx + keepalived 방안 으로 사이트 의 높 은 부하 균형 을 실현 할 때 뇌 균열 문제 와 메 인 서버 고장 이 자주 발생 하지만 자원 을 방출 하지 않 는 문제 가 발생 합 니 다.1. 첫 번 째 문제 에 대해 스 크 립 트 로 서버 를 감시 할 수 있 습 니 다. 서버 에 VIP 주소 가 있 는 것 을 발견 하면 즉시 경 고 를 보 냅 니 다.
#!/bin/bash
ip a s eth0 | grep "192.168.22.3" >/dev/null
if [ $? -eq 0 ]
then
    echo "keepalived    " | mail -s     -keepalived [email protected]
fi

이 스 크 립 트 를 정시 작업 에 추가 하고 2 분 마다 실행 합 니 다.
*/2 * * * * /usr/bin/sh /server/scripts/monitoring_keep.sh

주의: 예비 서버 에 vip 주소 가 발생 합 니 다. 하 나 는 뇌 균열 문제 이 고 다른 하 나 는 메 인 서버 가 고장 나 서 vip 가 정상적으로 예비 서버 로 전환 되 었 습 니 다. 그러나 어떤 원인 이 든 클 러 스 터 에 문제 가 생 겼 다 는 것 을 설명 하고 경 고 를 해 야 합 니 다.
2. 두 번 째 문제 에 대해 흔히 볼 수 있 는 이 유 는 nginx 가 고장 이 났 지만 keepalived 가 정상적으로 작 동 하고 메 인 서버 는 vip 주소 자원 을 차지 하지만 정상 적 인 서 비 스 를 제공 하지 못 하기 때 문 입 니 다. 해결 방법 은 메 인 서버 의 nginx 서 비 스 를 실시 간 으로 감시 하 는 것 입 니 다. nginx 가 고장 난 것 을 발견 하면 즉시 vip 를 방출 합 니 다.1) nginx 서 비 스 를 감시 하 는 스 크 립 트 작성:
vim /server/scripts/monitoring_web.sh
#!/bin/bash
num=`ps -ef|grep -c nginx`
if [ $num -lt 2 ]
then
  exit 1
 else
  exit 0
fi

2) 스 크 립 트 에 실행 가능 한 권한 추가:
chmod +x /server/scripts/monitoring_web.sh

3) lb 01 과 lb 02 는 서로 위주 로 준비 되 어 있 으 며, keepalived 설정 파일 의 내용 은 다음 과 같다. lb 01 설정 파일:
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id lb01
}
vrrp_script check_web {
script "/server/scripts/monitoring_web.sh"
interval 2
weight -60
}
vrrp_instance one {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.22.3/24 dev eth0 label eth0:3
    }
    track_script {
             check_web
    }
}
vrrp_instance two {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.22.4/24 dev eth0 label eth0:4
    }
}

lb 02 프로필:
[root@lb02 scripts]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   router_id lb02
}
vrrp_script monitoring_web {
script "/server/scripts/monitoring_web.sh"
interval 2
weight -60
}
vrrp_instance one {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.22.3/24 dev eth0 label eth0:3
    }
}
vrrp_instance two {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.22.4/24 dev eth0 label eth0:4
    }
    track_script {
             monitoring_web
    }        
}

설정 파일 weight 명령 에 대한 간략 한 설명: weight 가 정수 일 때: ① 스 크 립 트 실행 결과 가 사실 이면 priority + weight;② 스 크 립 트 실행 결과 가 거짓 이면 priority 는 변 하지 않 습 니 다.weight 가 마이너스 일 때: ① 스 크 립 트 실행 결과 가 진실 이면 priority 는 변 하지 않 습 니 다.② 스 크 립 트 실행 결과 가 거짓 이면 priority + weight (weight 절대 값 감소).메 인 프로필 에 weight 를 - 60, 마이너스 로 설정 하기 때문에 nginx 가 고장 이 났 을 때 ps - ef | grep - c nginx 는 결 과 를 얻 으 면 반드시 2 보다 적 고 1 (exit 1) 로 돌아 갑 니 다. 그래서 keepalived 서비스 가 감 측 된 결 과 는 가짜 이 고 priority 의 값 을 weight 의 값 으로 줄 이 고 90 을 얻 으 며 예비 서버 의 100 보다 작 으 며 vip 자원 을 자발적으로 방출 합 니 다.마찬가지 로 nginx 가 정상 으로 돌아 온 후에 ps - ef | grep - c nginx 가 얻 은 결 과 는 반드시 2 보다 크 고 0 (exit 0) 으로 돌아 갈 것 입 니 다. 그래서 keepalived 서비스 가 감 측 된 결 과 는 진실 입 니까? priority 값 이 변 하지 않 습 니까? 아니면 150 을 유지 합 니까? 예비 서버 보다 값 이 크 고 vip 자원 을 되 찾 습 니까?

좋은 웹페이지 즐겨찾기