Nginx 로그 와 모니터링 - TCP 건강 모니터링

7885 단어 Nginx
주소
1. 개술
Nginx 와 Nginx Plus 는 TCP upstream 서버 를 계속 테스트 하여 고장 난 서버 를 사용 하지 않도록 하고 복 구 된 서버 를 부하 균형 그룹 에 점차적으로 추가 할 수 있 습 니 다.
2. 선 결 조건 전제조건
  • stream 컨 텍스트 의 TCP upstream 서버 그룹 이 설정 되 어 있 습 니 다:
  • stream {
        ...
        upstream stream_backend {
    
        server backend1.example.com:12345;
        server backend2.example.com:12345;
        server backend3.example.com:12345;
       }
        ...
    }
  • server 그룹 에서 TCP 연결 을 전송 하 는 서버 가 설정 되 어 있 습 니 다:
  • stream {
        ...
        server {
            listen     12345;
            proxy_pass stream_backend;
        }
        ...
    }

    3. 수 동적 TCP 건강 검진
    upstream 서버 에 연결 하려 는 시도 가 시간 을 초과 하거나 실패 하면 Nginx 는 서버 를 unavailable 로 표시 하고 지정 한 시간 내 에 이 서버 에 요청 을 보 내 는 것 을 중단 합 니 다.server 명령 에 다음 인 자 를 추가 하면 Nginx 가 서버 를 사용 할 수 없다 고 생각 하 는 지 정의 할 수 있 습 니 다.
  • fail_timeout - 시간 대 는 두 가지 용도 가 있 습 니 다. 이 시간 대 에 연결 에 실패 한 횟수 를 지정 한 후 서버 는 사용 할 수 없 음 으로 표 시 됩 니 다.서버 가 사용 할 수 없 을 때 사용 할 수 없 는 시간 대 로 표 시 됩 니 다.기본 값 은 10 초 입 니 다.
  • max_fails – failtimeout 이 지정 한 시간 동안 연결 에 실패 한 횟수 가 이 값 에 도착 하면 서버 는 사용 할 수 없 음 으로 표 시 됩 니 다.기본 값 은 1 회.

  • 연결 이 10 초 동안 시간 을 초과 하거나 실패 하면 Nginx 는 이 서버 를 10 초 동안 사용 할 수 없 도록 설정 합 니 다.다음 예 는 30 초 동안 실패 하거나 시간 을 최소 2 번 초과 해 야 사용 할 수 없다 고 생각 합 니 다.
    upstream stream_backend {
        server backend1.example.com:12345 weight=5;
        server backend2.example.com:12345 max_fails=2 fail_timeout=30s;
        server backend3.example.com:12346 max_conns=3;
    }

    4. 능 동 TCP 건강 검진
    4.1 건강 검진 의 특성
    각종 고장 유형 을 측정 하기 위해 건강 검 사 를 설정 할 수 있다.예 를 들 어 Nginx Plus 는 upstream 서버 의 응답 능력 을 지속 적 으로 테스트 하고 고장 난 서버 를 사용 하지 않도록 할 수 있다.
    Nginx Plus 는 업 스 트림 서버 마다 특별한 건강 검진 요청 을 보 내 고 응답 이 특정 조건 을 충족 하 는 지 확인 합 니 다.서버 에 연결 되 지 않 으 면 건강 검진 에 실패 하고 서버 가 고장 난 것 으로 생각 합 니 다.Nginx Plus 는 클 라 이언 트 를 고장 난 서버 에 프 록 시 로 연결 하지 않 습 니 다.서버 팀 이 몇 개의 건강 검 사 를 정의 하면 모든 건강 검사 가 실패 하면 관련 서버 가 고장 으로 간 주 됩 니 다.
    4.2 건강 검진 시작
    4.2.1 공유 메모리 영역 지정
    zone - 공유 메모리 영역 은 Nginx 의 여러 작업 프로 세 스 사이 에서 카운터 와 연 결 된 상태 정 보 를 공유 할 수 있 습 니 다.upstream 서버 그룹 에 zone 명령 을 추가 하여 이름과 메모리 크기 를 지정 합 니 다.
    stream {
        ...
        upstream stream_backend {
    
            zone   stream_backend 64k;
            server backend1.example.com:12345;
            server backend2.example.com:12345;
            server backend3.example.com:12345;
        }
        ...
    }

    4.2.2 건강 검진 시작
    upstream 서버 그룹 에 연 결 된 server 컨 텍스트 에 health_checkhealth_check_timeout 명령 을 추가 합 니 다.
    stream {
        ...
        server {
            listen               12345;
            proxy_pass           stream_backend;
            health_check;
            health_check_timeout 5s;
        }
        ...
    }
    health_check 건강 검진 기능 을 켜 라. health_check_timeout 건강 검진 시 덮어 쓰기 proxy_timeout 의 값 은 건강 검진 시간 초과 로 짧게 설정 해 야 하기 때문이다.
    4.3 미세 조정 TCP 건강 검진
    기본적으로 Nginx Plus 는 upstream 서버 그룹의 모든 서버 에 5 초 간격 으로 연결 시 도 를 합 니 다.연결 이 되 지 않 으 면 Nginx Plus 는 건강 검진 에 실패 했다 고 보고 해당 서버 를 고장 으로 표시 하고 클 라 이언 트 연결 을 이 서버 에 보 내 는 것 을 중단 합 니 다.
    기본 행동 을 바 꾸 려 면 health_check 명령 에 아래 의 인 자 를 포함 할 수 있 습 니 다.
  • interval – Nginx Plus 얼마 간격 으로 건강 검진 (기본 5 초)
  • passes – 서버 는 몇 번 의 검 사 를 통 해 건강 으로 간주 할 수 있 습 니 다 (기본 값 은 1 회)
  • fails – 서버 가 몇 번 연속 검사 에 실패 해 야 고장 으로 간주 할 수 있 습 니 다 (기본 값 은 1 회)
  • stream {
        ...
        server {
            listen       12345;
            proxy_pass   stream_backend;
            health_check interval=10 passes=2 fails=3;
        }
        ...
    }

    이 사례 에 서 는 TCP 건강 검진 의 간격 이 10 초 로 커 졌 고, 서버 는 3 회 연속 건강 검진 에 실 패 했 을 때 고장 난 것 으로 간주 되 며, 서버 는 2 회 연속 건강 검진 을 거 쳐 야 다시 사용 가능 한 것 으로 여 겨 진다.
    기본적으로 Nginx Plus 는 upstream 블록 에 server 명령 이 지정 한 포트 에 건강 검진 메 시 지 를 보 냅 니 다.건강 검진 에 사용 할 다른 포트 를 지정 할 수 있 습 니 다. 이것 은 호스트 의 여러 서 비 스 를 동시에 감시 할 때 특히 유용 합 니 다.health_check 명령 의 port 인 자 를 통 해 기본 포트 를 덮어 쓸 수 있 습 니 다.
    stream {
        ...
        server {
            listen       12345;
            proxy_pass   stream_backend;
            health_check port=8080;
        }
        ...
    }

    4.4 match 설정 블록
    서버 가 건강 검진 에 대한 응답 을 검증 하기 위해 일련의 테스트 를 설정 할 수 있 습 니 다.이 테스트 들 은 stream 컨 텍스트 의 match 설정 블록 에 정의 되 어 있 습 니 다.match 설정 블록 을 지정 할 때 이름 tcptest:
    stream {
        ...
        match  tcp_test {
            ...
        }
    }

    그리고 health_check 명령 에서 match 매개 변 수 를 통 해 어떤 match 블록 을 사용 하여 응답 을 검증 해 야 하 는 지 알려 줍 니 다.
    stream {
        ...
        server {
            listen       12345;
            health_check match=tcp_test;
            proxy_pass   stream_backend;
        }
        ...
    }

    건강 검진 을 성공 적 으로 실행 하 는 조건 이나 테스트 는 set 와 send 매개 변수 로 설정 되 어 있 습 니 다 (The conditions or tests under which a health check succeeds are set with send and expect parameters).
  • send – 서버 에 보 낼 텍스트 문자열 이나 16 진수 문자 ("/ x" 뒤 에는 16 진수 두 개).
  • expect – 서버 에서 돌아 오 는 데 이 터 는 일치 하 는 문자열 이나 정규 표현 식 이 필요 합 니 다.

  • 이 두 매개 변 수 는 서로 다른 조합 을 가 질 수 있 지만 매번 에 하나의 send 와 하나의 expect 만 지정 할 수 있 습 니 다.
  • send 와 expect 인 자 를 지정 하지 않 으 면 서버 에 연결 하 는 능력 만 테스트 합 니 다.
  • expect 인자 만 지정 하면 서버 가 무조건 데 이 터 를 보 내 기 를 기대 합 니 다.
  • match pop3 {
        expect ~* "\+OK";
    }
  • send 인자 만 지정 하면 연결 이 성공 적 으로 이 루어 지고 지정 한 문자열 이 서버 에 성공 적 으로 전 송 됩 니 다.
  • match pop_quit {
        send QUIT;
    }
  • send 와 expect 인 자 를 동시에 지정 하면 send 인 자 를 통 해 서버 에서 가 져 온 문자열 은 expect 인자 가 지정 한 정규 표현 식 과 일치 해 야 합 니 다.
  • stream {
        ...
        upstream   stream_backend {
            zone   upstream_backend 64k;
            server backend1.example.com:12345;
        }
    
        match http {
            send      "GET / HTTP/1.0\r
    Host: localhost\r
    \r
    "
    ; expect ~* "200 OK"; } server { listen 12345; health_check match=http; proxy_pass stream_backend; } }

    이 예 에서 건강 검진 을 통과 하려 면 HTTP 요청 을 반드시 서버 에 보 내 고 서버 에서 돌아 온 결과 200 OK 를 포함 하여 성공 적 인 HTTP 응답 임 을 표시 합 니 다.

    좋은 웹페이지 즐겨찾기