Nginx 건강 검진

Nginx 의 건강 검진 이라는 필 자 는 인터넷 에서 많은 글 을 보 았 다. 기본적으로 모두 흩 어 져 있 고 각종 실현 방식 을 말한다. 현재 의 Nginx 가 건강 검진 을 실현 하 는 몇 가지 방식 을 온전 하 게 설명 할 수 있 는 편 이 없다. 어떤 것 을 선택해 서 사용 해 야 하 는 지 필 자 는 한 편 을 정리 하고 자 한다.
1. 현재 Nginx 는 두 가지 주류 의 건강 검진 모델 을 지원 합 니 다.
능 동 검사 모드
Nginx 서버 는 설 정 된 간격 에 따라 백 엔 드 의 upstreamserver 에서 백 엔 드 의 각 upstream 을 검증 하기 위해 검사 요청 을 보 냅 니 다.server 상태.서버 가 일정 횟수 이상 되 돌아 오지 못 하면 세 번 이상 서버 가 이상 하 다 고 표시 되 며 요청 을 서버 에 전송 하지 않 습 니 다.
일반적으로 백 엔 드 서버 는 이러한 건강 검 사 를 위해 저 소모 인 터 페 이 스 를 전문 적 으로 제공 해 야 한다.
패 시 브 검사 모드
Nginx 는 프 록 시 요청 과정 에서 모든 백 엔 드 서버 가 요청 에 대한 응답 상 태 를 자동 으로 모니터링 합 니 다. 만약 에 특정한 백 엔 드 서버 가 요청 에 대한 응답 상태 가 짧 은 시간 에 일정한 실패 횟수 를 누적 하면 Nginx 는 서버 이상 을 표시 합 니 다.이 서버 에 데 이 터 를 전송 하지 않 습 니 다.그러나 일정 시간 간격 으로 Nginx 는 백 엔 드 서버 에 반환 상 태 를 탐지 하기 위해 소량의 요청 을 전달 합 니 다.이 서버 의 복구 여 부 를 식별 할 수 있 도록 합 니 다.
백 엔 드 서버 는 건강 검진 인 터 페 이 스 를 전문 적 으로 제공 할 필요 가 없 지만, 이러한 방식 은 일부 사용자 가 요청 한 응답 을 실패 하 게 할 수 있 습 니 다. Nginx 는 백 엔 드 서비스 가 정상 으로 회복 되 었 는 지 소량의 요청 을 해 야 하기 때 문 입 니 다.
  • 주석: Nginx 수 동적 검사 모델 을 사용 하면 공식 원생 인 Nginx 가 지원 하고 제3자 모듈 이나 기술 에 의존 할 필요 가 없 기 때문에 다음 과 같은 연 구 는 모두 Nginx 에 대해 주동 적 인 건강 검 사 를 실현 하 는 방법
  • 이다.
    2. 현재 Nginx 를 사용 하여 건강 검진 을 실현 하 는 몇 가지 방식
    1. 오픈 소스 모듈 nginx 사용upstream_check_module
    원본 주소:https://github.com/yaoweibin/nginx_upstream_check_module
    이것 은 내 가 현재 찾 은 원생 Nginx 가 개원 모듈 을 추가 함으로써 주동 적 인 건강 검 사 를 무료 로 실현 할 수 있 는 유일한 방법 이다.다음은 제 가 이런 방식 의 설치 와 배치 과정 을 상세 하 게 소개 하 겠 습 니 다.
    2. 비 즈 니스 버 전 Nginx Plus 사용
    https://www.nginx.com/products/nginx/
    이런 방법 은 비용 을 받 아야 기술 지원 을 받 을 수 있다.
    3. Nginx 대신 타 오 바 오 오픈 소스 텐 진 사용
    http://tengine.taobao.org
    이런 방식 도 무료 로 가능 하 다.
    3. 여기 서 우 리 는 첫 번 째 방법의 실현 을 보 여 줍 니 다. 오픈 소스 모듈 nginx 를 사용 합 니 다.upstream_check_module
    먼저 이 모듈 의 원본 패 키 지 를 다운로드 하여 Nginx 를 컴 파일 할 서버 에 올 립 니 다.
    운영 체제 환경: Centos 6.8, 컴 파일 에 필요 한 개발 환경 이 기본적으로 설치 되 어 있 습 니 다.
    1. Nginx 컴 파일 에 필요 한 패키지 설치
    yum install pcre pcre-devel openssl openssl-devel -y

    2. Nginx 버 전 을 선택 하고 컴 파일 설치 (컴 파일 하기 전에 Nginx 에 대응 하 는 패 치 를 하 는 것 을 기억 합 니 다)
  • 여기 잘 봐 야 돼 요. 관건 이에 요.
  • 여기 Nginx 선택: nginx - 1.14.0. tar. gz, nginxupstream_check_module 소스 코드 는 최신 메 인 코드 팩 을 다운로드 합 니 다: nginxupstream_check_module - master. zip 하지만 컴 파일 전 패 치 는 Nginx 버 전에 대응 하 는 것 을 선택해 야 합 니 다.예 를 들 어 여기 nginx - 1.14.0 패 치 는 check 를 선택해 야 합 니 다.1.14.0+.patch ; 패 치 파일 은 nginx 에 있 습 니 다.upstream_check_module 소스 패키지 안에 있 습 니 다.
    #!/bin/bash
    
    tar xf nginx-1.14.0.tar.gz 
    unzip nginx_upstream_check_module-master.zip
    
    cd nginx-1.14.0
    
    #    ,              ,            
    patch -p1 < /root/nginx_upstream_check_module-master/check_1.14.0+.patch
    
    ./configure --user=www --group=www --prefix=/alidata/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=/root/nginx_upstream_check_module-master
    
    make && make install

    3. 설정 과 응용
    # nginx.conf
    
    user  www www;
    worker_processes  4;
    
    worker_rlimit_nofile 65535;
    
    events
    { 
      use epoll;
      worker_connections 65535;
    }
    
    http {
    
    #      upstream      ,    evalue
        upstream evalue {
        #          ,     weight   ,     Round Robin ,    weight         
                server 192.168.90.100:9999 weight=100;
                server 192.168.90.101:9999 weight=100;
        # interval=3000      3   , rise=3     3        , fall=5     5         , timeout=3000            3   , type=http       http
                check interval=3000 rise=3 fall=5 timeout=3000 type=http;
        # check_http_send        :     url      -> HEAD /api/v1/chivox/health HTTP/1.0         
                check_http_send "HEAD /api/v1/chivox/health HTTP/1.0\r
    \r
    "; # check_http_expect_alive http_2xx http_3xx; #check_http_send "GET /test3.html HTTP/2.0\r
    \r
    "; } } server { listen 80; location / { proxy_pass http://evalue; keepalive_timeout 0; } # # check_status [html|csv|json] # ,/status?format=html | /status?format=csv | /status?format=json location /status { check_status html; access_log off; } location ~ /.svn/ { deny all; } access_log /alidata/log/nginx/access/evalue.log json; }

    좋은 웹페이지 즐겨찾기