부하 균형 Nginx + keepalive

1 기획 과 준비
동일 하 게 설 정 된 웹 용도 IP MASTER 192.168.1.100 BACKUP 192.1681.101
2 설치
두 대의 접속 서버 에 각각 NginX 와 keepalived 를 설치 합 니 다. 의존 패키지 준비:
yum -y install gcc pcre-devel zlib-devel openssl-devel
yum -y install popt-devel

다운로드 하 다.
wget http://nginx.org/download/nginx-1.2.4.tar.gz 
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

NginX 설치 keepalive 설치
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure
make 
make install

cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/

시작 서비스 가입
echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
echo "/etc/init.d/keepalived start" >> /etc/rc.local
 

3 설정
3.1 서버 에 접속 하 는 NginX 두 대 를 설정 하 는 NginX 의 설정 은 똑 같 습 니 다. 주로 설정 / usr / local / nginx / conf / nginx. conf 의 http 입 니 다.그 중에서 도 메 인 이름 은 가상 호스트 (http 아래 server 설정) 를 통 해 이 루어 집 니 다.같은 도 메 인 이름 의 서로 다른 가상 디 렉 터 리 는 각 server 아래 의 서로 다른 location 을 통 해 이 루어 집 니 다.백 엔 드 에 있 는 서버 는 http 아래 upstream 을 설정 한 다음 server 나 location 에서 proxypass 를 통 해 참조 합 니 다.앞에서 계획 한 접속 방식 을 실현 하려 면 http 의 설정 은 다음 과 같 습 니 다.
http {
     
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    upstream dev.hysec.com {
     
        server 50.1.1.21:80;
    }


    upstream opslinux.com {
     
      ip_hash;
      server 192.168.1.102:80
      server 192.168.1.103:80
      server 192.168.1.104:80
    }
    server {
     
        listen       80;
        server_name  opslinux.com;
        location / {
     
            proxy_pass http://opslinux.com;
        }
}
 

인증 방법: 먼저 IP 로 전 표 에 있 는 각 응용 서버 의 url 에 접근 한 다음 에 도 메 인 이름과 경로 로 전 표 에 있 는 각 응용 시스템 의 도 메 인 이름 / 가상 경로 3.2 설정 keepalived 는 위의 설치 방법 에 따라 keepalived 의 설정 파일 은 / etc / keepalived / keepalived. conf 에 있 습 니 다.주, 서버 설정 과 관련 이 있 지만 다 릅 니 다.다음 과 같다.
Master:

! Configuration File for keepalived

global_defs {
     
  router_id NGINX_DEVEL
}

vrrp_instance VI_1 {
     
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     
       192.168.1.100
    }
}

Backup:

! Configuration File for keepalived

global_defs {
     
  router_id NGINX_DEVEL
}

vrrp_instance VI_1 {
     
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     
       192.168.1.100
    }
}

인증: 홈, 서버 에서 keepalived 를 시작 합 니 다. / etc / init. d / keepalived start 는 홈 서버 에서 가상 IP 가 연결 되 어 있 는 지 확인 합 니 다. ip addr 는 홈 서버 의 keepalived: / etc / init. d / keepalived stop 을 중단 하고 서버 에서 가상 IP 가 연결 되 어 있 는 지 확인 합 니 다. 홈 서버 의 keepalived 를 시작 합 니 다.메 인 서버 가 가상 IP 3.3 을 다시 연결 할 수 있 는 지 확인 하고 keepalived 가 NginX 의 상 태 를 감시 하도록 앞의 설정 을 거 쳐 메 인 서버 의 keepalived 가 서 비 스 를 중단 하면 서버 에서 VIP 대외 서 비 스 를 자동 으로 연결 합 니 다.홈 서버 의 keepalived 가 복구 되면 VIP 를 다시 인수 합 니 다.그러나 이것 은 우리 가 필요 로 하 는 것 이 아니다. 우리 가 필요 로 하 는 것 은 NginX 가 서 비 스 를 중단 할 때 자동 으로 전환 할 수 있다 는 것 이다.keepalived 는 모니터링 스 크 립 트 설정 을 지원 합 니 다. 우 리 는 스 크 립 트 를 통 해 NginX 의 상 태 를 모니터링 할 수 있 습 니 다. 상태 가 정상 적 이지 않 으 면 일련의 작업 을 할 수 있 습 니 다. 결국 NginX 를 복원 하지 못 하면 keepalived 를 죽여 서버 에서 서 비 스 를 받 을 수 있 습 니 다.NginX 의 상 태 를 어떻게 감시 하 는 지 가장 간단 한 방법 은 NginX 프로 세 스 를 감시 하 는 것 입 니 다. 더욱 확실한 방법 은 NginX 포트 를 검사 하 는 것 입 니 다. 가장 확실한 방법 은 여러 url 이 페이지 를 가 져 올 수 있 는 지 검사 하 는 것 입 니 다.서비스 복 구 를 시도 하 는 방법 NginX 가 정상 이 아 닌 것 을 발견 하면 다시 시작 합 니 다.3 초 를 기 다 렸 다가 다시 검사 합 니 다. 실패 하면 시도 하지 않 습 니 다.위 정책 에 따라 감시 스 크 립 트 를 쉽게 작성 할 수 있 습 니 다.여 기 는 nmap 검사 nginx 포트 를 사용 하여 nginx 의 상 태 를 판단 합 니 다. nmap 를 먼저 설치 해 야 합 니 다.모니터링 스 크 립 트 는 다음 과 같 습 니 다:
#!/bin/bash
# check nginx server status
NGINX=/usr/local/nginx/sbin/nginx
PORT=8080

nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
    $NGINX -s stop
    $NGINX
    sleep 3
    nmap localhost -p $PORT | grep "$PORT/tcp open"
    [ $? -ne 0 ] && /etc/init.d/keepalived stop
fi
 

스 크 립 트 의 실행 권한 을 설정 하 는 것 을 잊 지 마 세 요. 그렇지 않 으 면 효과 가 없습니다.위 스 크 립 트 를 / opt / chk 에 두 었 다 고 가정 합 니 다.nginx. sh, keepalived. conf 에 다음 설정 이 추 가 됩 니 다: 주 keepalived
vrrp_script chk_http_port {
     
    script "/opt/chk_nginx.sh"
    interval 1
    weight -2
}

track_script {
     
    chk_http_port
}! Configuration File for keepalived

global_defs {
     
   router_id NGINX_UPSTEAM
}

vrrp_script chk_http_port {
     
    script "/opt/chk_nginx.sh"
    interval 1
    weight -2
}

vrrp_instance VI_1 {
     
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     
        192.168.1.100
    }

    track_script {
     
    chk_http_port
    }

}
 

더 나 아가 keepalived 를 시작 하기 전에 nginx 를 시작 하지 않도록 / etc / init. d / keepalived 의 start 에서 먼저 nginx 를 시작 할 수 있 습 니 다.
start() {
     
    /usr/local/nginx/sbin/nginx
    sleep 3
    echo -n $"Starting $prog: "
    daemon keepalived ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}

좋은 웹페이지 즐겨찾기