nginx + keepalived 부하 균형 (1)

11681 단어
앞의 에서 목적, 목표 와 전체 방안 에 대해 토론 을 했 고 본 고 는 구체 적 인 실 시 를 토론 했다.쉽게 말 하면 두 서버 에 각각 NginX 를 배치 하고 keepalived 를 통 해 고가 용 을 실현 하 는 것 이다.
1 기획 과 준비
통합 접근 이 필요 한 응용 시스템:
응용 시스템
도 메 인 이름 / 가상 디 렉 터 리
응용 서버 및 URL
svn
dev.mycompany.com/svn
http://50.1.1.21/svn
svn 웹 관리
dev.mycompany.com/submin
http://50.1.1.21/submin
사이트
www.mycompany.com
http://50.1.1.10; http://50.1.1.11; http://50.1.1.12
OA
oa.mycompany.com
http://50.1.1.13:8080; http://50.1.1.14:8080
웹 액세스 서버
두 대의 접속 서버 50.1.1.3 / 4 를 각각 위주 로 하고 (MASTER, BACKUP) 서버 를 준비 하 며 RHEL 5.6x 64 를 사용 하여 yum 사복 을 설정 했다.
두 대 접속 서버 공용 가상 IP (VIP): 50.1.1.2
2 설치
두 대의 접속 서버 에 각각 NginX 와 keepalived 를 설치 합 니 다.
    #     :
    yum -y install gcc pcre-devel zlib-devel openssl-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
    tar zxvf nginx-1.2.4.tar.gz
    cd nginx-1.2.4
    ./configure
    make && make install

    #  keepalived
    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 www.hysec.com {
          ip_hash;
          server 50.1.1.10:80;
          server 50.1.1.11:80;
          server 50.1.1.12:80;
        }
    
        upstream oa.hysec.com {
          ip_hash;
          server 50.1.1.13:8080;
          server 50.1.1.14:8080;
          
    
        server {
            listen      80;
            server_name dev.hysec.com;
            location /svn {
                proxy_pass http://dev.hysec.com;
            }
    
            location /submin {
                proxy_pass http://dev.hysec.com;
            }
        }
    
        server {
            listen       80;
            server_name  www.hysec.com;
            location / {
                proxy_pass http://www.hysec.com;
            }
        server {
            listen       80;
            server_name  oa.hysec.com;
            location / {
                proxy_pass http://oa.hysec.com;
            }
    }

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

    global_defs {
    notification_email {
            [email protected]
            [email protected]
       }

       notification_email_from [email protected]
       smtp_server smtp.hysec.com
       smtp_connect_timeout 30
       router_id nginx_master

    }

    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 {
            50.1.1.2
        }
    }

백업 설정
    ! Configuration File for keepalived

    global_defs {
    notification_email {
            [email protected]
            [email protected]
       }

       notification_email_from [email protected]
       smtp_server smtp.hysec.com
       smtp_connect_timeout 30
       router_id nginx_backup

    }

    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 {
            50.1.1.2
        }
    }

인증:
주, 서버 에서 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/sh
    # check nginx server status
    NGINX=/usr/local/nginx/sbin/nginx
    PORT=80

    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 에 다음 설정 을 추가 합 니 다.
    vrrp_script chk_http_port {
        script "/opt/chk_nginx.sh"
        interval 2
        weight 2
    }

    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
    }

4. 또 뭘 할 수 있어 요?
단순 반복 적 인 노동 에 있어 서 사람 은 항상 실 수 를 하기 쉬 우 므 로 이런 일 은 기계 에 맡 기 는 것 이 가장 좋다.예 를 들 어 이 사례 에서 통합 접속 서버 로 서 nginx 의 설정, nginx 아래 html 파일 등 을 자주 수정 해 야 할 수 있 습 니 다.그리고 클 러 스 터 의 모든 서버 설정 이 같 도록 해 야 한다.가장 좋 은 방법 은 설정 관리 서버 에서 관리 하 는 것 입 니 다. 없 으 면 간단 한 Liux 파일 로 동기 화 할 수 있 습 니 다.
5 https 지원
openSSL 을 설치 해 야 합 니 다:
yum install openssl-devel

nginx / conf 에서 비밀 키 생 성:
    #  RSA  
    openssl dsaparam -rand -genkey -out myRSA.key 1024

    #  CA  :(            )
    openssl gendsa -des3 -out cert.key myRSA.key

    #   CA       ,          
    openssl req -new -x509 -days 365 -key cert.key -out cert.pem

    #      root  
    chmod 700 cert.*

    #       
    openssl rsa -in cert.key -out cert.key.unsecure

SSL 을 사용 하려 면 먼저 nginx 를 설치 할 때 설정 파 라미 터 를 추가 해 야 합 니 다. - with - httpssl_module, 그리고 nginx 에서 다음 설정 을 진행 합 니 다:
    #    SSL     
    server {
      listen 443;
      server_name www.example.com; #       
      root /home/www;
      ssl on;
      ssl_certificate cert.perm;
      #  .unsecure     nginx          
      ssl_certificate_key cert.key.unsecure;
      location / {
      #...
      }
    }

공공 인증서 의 신청 과정:
RSA (비밀 키) 파일 생 성: openssl genrsa -des3 -out myRSA.key 2048 csr 파일 생 성: openssl req -new -key myRSA.key -out my.csr csr 를 인증서 기관 에 제출 합 니 다. 예 를 들 어 GlobalSign.
인증서 기 구 는 개인 인증서 (crt) 와 중급 인증서 (crt) 를 되 돌려 줍 니 다.
기관 사이트 에 루트 인증서 (root CA. cer) 를 다운로드 하고 루트 인증 서 를 개인 인증서 에 연결 한 후 nginx 에서 인증서 설정:
    ssl_certificate /etc/ssl/my.crt;
    ssl_certificate_key /etc/ssl/myRSA.key;
    ssl_client_certificate /etc/ssl/root_CA.cer;

6 웹 서비스 지원
chunkin - nginx - module 모듈 을 통 해 웹 서 비 스 를 지원 합 니 다.
그렇지 않 으 면 오류 가 발생 합 니 다: 411: http 헤드 에 Content - Length 인자 가 부족 합 니 다.
단계:
    git clone https://github.com/agentzh/chunkin-nginx-module.git

    #    nginx
    cd PATH/TO/NGINX/SOURCE
    ./configure xxx --add-module=/PATH/TO/chunkin-nginx-module
    make && make install

nginx 의 server {} 노드 에 설정 추가:
    chunkin on; 
 
    error_page 411 = @my_411_error; 

    location @my_411_error { 
        chunkin_resume; 
    } 

7 상태 모니터링
컴 파일 할 때 인 자 를 추가 해 야 합 니 다 --with-http_stub_status_module.
컴 파일 매개 변수 보기: 명령 사용 /usr/local/nginx/sbin/nginx -V설치 후 설정 추가:

    location /nginx_status {
        stub_status on;
        access_log   off;
        # deny all;
        allow all;
    }

설정 을 다시 불 러 오 면 텍스트 를 볼 수 있 습 니 다:
Active connections: 1 (백 엔 드 에 대한 활동 연결 수)
server accepts handled requests
55 (연결 개수 처리, 악수 성공 횟수, 처리 요청 수)
읽 기: 0 쓰기: 1 대기: 0 (클 라 이언 트 헤더 수 를 읽 고 클 라 이언 트 헤더 수 를 되 돌려 줍 니 다. 대기 수 는 active - reading - writing)
다음으로 이동:http://thinkinside.tk/2013/05/27/nginx_keepalived.html

좋은 웹페이지 즐겨찾기