Nginx 학습 총화 (6) - 부하 균형

7659 단어 nginx
이것 은 Nginx 학습 총화 의 여섯 번 째 편 이다. 지난 편 은 Nginx 학습 총화 (5) - 역방향 대리 에 대해 소개 했다. 본 고 는 주로 proxyupstream 모듈 의 사용 을 결합 하여 Nginx 의 부하 균형 을 실현 하 는 것 을 보 여 주 었 다.
Nginx 홈 페이지 에서 upstream 모듈 에 대한 설명: ngx_http_upstream_module 모듈 은 proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass 명령 으로 인 용 될 서버 그룹 을 정의 하 는 데 사 용 됩 니 다.
Context:http
준비 작업
VMware 에 3 대의 서버 (centos 7 x64) 를 준비 하고 각각 Nginx (1.12.0) 를 설치 했다. 이들 은 서로 memcached_pass 통 할 수 있 고 3 대의 서버 IP 는 각각 다음 과 같다.
  • 192.168.4.221 (웹 서버 A)
  • 192.168.4.222 (웹 서버 B)
  • 192.168.4.223 (역방향 프 록 시 C)
  • 웹 서버 의 루트 디 렉 터 리 에 있 는 index. html 파일 의 내용 은 다음 과 같 습 니 다.

    Welcome to 192.168.4.221 !

    Welcome to 192.168.4.222 !


    역방향 에이전트 설정
    Nginx 에서 역방향 에이 전 트 를 설정 합 니 다. 주로 ping 모듈 과 proxy 모듈 의 설정 입 니 다.프 록 시 C 의 설정 을 다음 과 같이 변경 합 니 다.
    upstream jochen {
        server 192.168.4.221:80;
        server 192.168.4.222:80;
    }
    
    server {
        listen       80;
        server_name  localhost;
    
        charset      utf-8;
    
        location / {
            proxy_pass http://jochen;
    
            proxy_set_header HOST            $host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    설정 이 완료 되면 역방향 프 록 시 C, 브 라 우 저 접근 upstream 을 다시 시작 합 니 다.
    브 라 우 저 새로 고침 페이지:
    방문 한 내용 이 웹 서버 A 나 B 가 제공 한 내용 임 을 알 수 있 습 니 다. 이 는 우리 의 역방향 에이전트 가 설정 에 성 공 했 음 을 나타 냅 니 다.그리고 응답 내용 은 웹 서버 A, B 가 차례로 돌아 가면 서 제공한다.
    부하 균형 을 이루다
    부하 균형 은 역방향 대리 기술 의 운용 이다.클 라 이언 트 가 서버 에 접근 하면 서버 는 요청 을 다른 여러 개의 다른 서버 (즉, 역방향 프 록 시) 에 나 누 어 주 고 하나의 서버 가 대량의 요청 을 처리 하 는 압력 을 줄 이 며 붕괴 되 지 않 습 니 다. 그림 과 같 습 니 다.
    위의 설정 에서 저 희 는 http://192.168.4.223 의 배분 방식 을 설정 하지 않 았 습 니 다. 기본 적 인 상황 에서 이것 은 폴 링 방식 을 사용 할 것 입 니 다. 즉, 모든 요청 이 시간 에 따라 서로 다른 백 엔 드 서버 에 배정 되 는 것 입 니 다.백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다.부하 균형 을 이 루 는 핵심 은 다양한 백 엔 드 서버 에 요청 을 합 리 적 으로 배분 하 는 것 이다.
    실제 생활 에서 서로 다른 서버 의 CPU, 메모리, 하 드 디스크, 네트워크 대역 폭 의 성능 이 다 르 기 때문에 각자 의 처리 능력 이 다르다.특정한 부하 균형 스 케 쥴 링 알고리즘 을 사용 하여 서로 다른 백 엔 드 서버 에 합 리 적 으로 배분 하여 자원 사용 을 최적화 하고 삼투 율 을 최대 화 하 며 응답 시간 을 최소 화 하 는 동시에 과부하 의 목적 을 달성 해 야 합 니 다.
    Nginx 에서 upstream 의 분배 방식 은 5 가지 가 있 는데 각각:
    1. 폴 링 (기본 값)
    모든 요청 은 시간 순서에 따라 서로 다른 백 엔 드 서버 에 하나씩 배정 되 며, 백 엔 드 서버 다운 이 떨 어 지면 자동 으로 제거 할 수 있 습 니 다.예:
    upstream jochen {
        server 192.168.4.221:80;
        server 192.168.4.222:80;
    }

    2. weight
    폴 링 확률 을 지정 하고 weight 와 방문 비율 이 정비례 하여 백 엔 드 서버 의 성능 이 고 르 지 않 은 경우 에 사용 합 니 다.예:
    upstream jochen {
        server 192.168.4.221:80 weight=10;
        server 192.168.4.222:80 weight=20;
    }

    3. ip_hash
    모든 요청 은 ip 에 접근 하 는 hash 결과 에 따라 분 배 됩 니 다. 모든 방문객 이 백 엔 드 서버 에 고정 적 으로 접근 하면 session 문 제 를 해결 할 수 있 습 니 다.예:
    upstream jochen {
        server 192.168.4.221:80;
        server 192.168.4.222:80;
        ip_hash;
    }

    4. fair (제3자)
    백 엔 드 서버 의 응답 시간 에 따라 요청 을 분배 하고 응답 시간 이 짧 은 우선 분 배 를 합 니 다.이것 은 제3자 모듈 로 추가 설치 가 필요 합 니 다.예:
    upstream jochen {
        server 192.168.4.221:80;
        server 192.168.4.222:80;
        fair;
    }

    5. url_hash (제3자)
    url 에 접근 한 hash 결과 에 따라 요청 을 할당 합 니 다. 모든 url 을 같은 백 엔 드 서버 로 지정 하고 백 엔 드 서버 가 캐 시 일 때 유효 합 니 다.이것 은 제3자 모듈 로 추가 설치 가 필요 합 니 다.예:
    upstream jochen {
        server 192.168.4.221:80;
        server 192.168.4.222:80;
        hash $request_uri;
        hash_method crc32;
    }
    upstream 모듈 에서 upstream 명령 을 통 해 서버 의 주소 와 기타 인 자 를 정의 할 수 있 습 니 다.주 소 는 도 메 인 이름 이나 IP 주소 (포트 선택 가능, 기본 값 80) 또는 '유 닉 스' 를 접두사 로 하 는 소켓 경 로 를 지정 할 수 있 습 니 다.
    Context: upstream
    자주 사용 하 는 매개 변 수 는:
  • server 서버 를 영구적 으로 사용 할 수 없 음 으로 표시
  • down 서버 의 가중치 설정, 기본 값 은 1
  • weight 서버 를 백업 서버 로 표시 합 니 다.홈 서버 가 사용 할 수 없 을 때 요청 이 전 달 됩 니 다
  • backup 요청 실패 횟수 를 허용 합 니 다. 기본 값 은 1
  • 입 니 다.
  • max_failsfail_timeout 번 의 실 패 를 겪 은 뒤 서 비 스 를 중단 하 는 시간 을 보 냈 다.max_fails max_fails 와 함께 사용 가능
  • upstream jochen {
        server backend1.example.com  weight=5;
        server 192.168.4.222:80      max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
        server backup1.example.com   backup;
    }

    건강 검진
    Nginx 자 체 는 부하 균형 백 엔 드 노드 건강 검진 을 위 한 모듈 이 없고 fail_timeout 부하 균형 건강 검진 을 위 한 제3자 모듈 로 타 오 바 오의 야 오 웨 이 빈 대신 이 개발 해 백 엔 드 nginx_upstream_check_module 의 건강 상 태 를 점검 할 수 있다.server 모듈 은 nginx_upstream_check_module 상 태 를 지속 적 으로 검사 하 며, 어떤 server 이 사용 되 지 않 으 면 요청 이 이 server 에 전달 되 지 않 습 니 다.항목 주소:https://github.com/yaoweibin/... 。
    다음은 부하 균형 건강 검사 가 있 는 nginx. conf 설정 입 니 다.
    upstream jochen {
        server 192.168.4.221:80 weight=5 max_fails=2 fail_timeout=30s;
        server 192.168.4.222:80 weight=1 max_fails=2 fail_timeout=30s;
    
        check interval=5000 rise=2 fall=3 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r
    \r
    "; check_http_expect_alive http_2xx http_3xx; } server { listen 80; server_name localhost; charset utf-8; location / { proxy_pass http://jochen; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /nginx-status { stub_status; access_log off; allow 192.168.4.220; deny all; } location /check-status { check_status; access_log off; allow 192.168.4.220; deny all; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

    Nginx 설정 을 다시 시작 하면 error. log 로 그 는 다음 과 같은 정 보 를 볼 수 있 습 니 다. server 모듈 이 정상적으로 실행 되 었 음 을 설명 합 니 다.
    2018/03/29 15:12:48 [error] 46931#46931: enable check peer: 192.168.4.221:80 
    2018/03/29 15:12:50 [error] 46931#46931: enable check peer: 192.168.4.222:80

    동시에 방문 nginx_upstream_check_module 하면 다음 페이지 를 볼 수 있 습 니 다.
    위 설정 은 jochen 이 서버 그룹 에 있 는 모든 server 에 대해 5 초 에 한 번 씩 검 측 하고 2 번 정상 을 요청 하면 server 상 태 를 up 으로 표시 하고 3 번 검 측 에 실패 하면 server 상 태 를 다운 으로 표시 하 며 시간 초과 시간 은 1 초 입 니 다.http://192.168.4.223/check-status 모듈 의 명령 상세 정보 참조https://github.com/yaoweibin/..., 상용 명령 설명 은 다음 과 같다.
  • nginx_upstream_check_module 상류 서버 에 운행 상황 검 사 를 추가 하고 자주 사용 하 는 매개 변 수 는 다음 과 같다.
  • check 백 엔 드 에 보 내 는 건강 검진 팩 의 간격
  • interval 연속 실패 횟수 fall 를 달성 하면 서버 는 다운
  • 으로 여 겨 진다.
  • fall_count 연속 성공 횟수 rise 를 달성 하면 서버 는 up
  • 으로 여 겨 진다.
  • rise_count 백 엔 드 건강 요청 시간 초과
  • timeout 건강 검진 가방 의 유형, tcp, http, ajp, ssl 포함hello、mysql、fastcgi

  • type HTTP 모니터링 검사 패키지 가 보 내 는 요청 내용 을 설정 하고 전송 데 이 터 량 을 줄 이기 위해 HEAD 방법 을 추천 합 니 다.
  • check_http_send HTTP 회복 의 성공 상 태 를 지정 하고 기본적으로 2XX 와 3XX 의 상태 가 건강 하 다 고 생각 합 니 다.

  • 참고 글:
  • Nginx 역방향 에이전트 와 부하 균형 설정
  • Module ngx_http_upstream_module
  • nginx 부하 이퀄 라이저 및 proxy 캐 시 설정
  • nginx_upstream_check_module
  • 좋은 웹페이지 즐겨찾기