Nginx 역방향 에이전트 부하 균형

7974 단어
흔 한 부하 균형 알고리즘
 
  • 폴 링 (기본 값)
  • 가중치
  • weight, 방문 비율 은 가중치 의 비율
  • IP 해시
  • session 문 제 를 해결 합 니 다. 모든 방문 자 는 백 엔 드 의 한 서버 에 고정 할 수 있 도록 IP 에 접근 을 요청 하 는 hash 결과 가 분 배 됩 니 다.
  • 문제:
  • 한 서버 가 끊 어 지면 대응 iphash 이 기 계 를 찾 을 수 없 습 니까?
  • 만약 에 하 쉬 가 실패 횟수 가 20 회 이상 이 되면 폴 링 전략 으로 돌아 가 선택 합 니 다.

  • 같은 IP 주소 의 요청 이 많 으 면 특정한 서버 의 압력 이 비교적 크 고 나머지 서버 는 비교적 한가 합 니까?
  • url 사용 가능hash 는 부하 균형 을 실현 하기 위해 한층 더 세분 화 되 었 다.



  • 최소 연결 (least conn)
  • 접속 수가 가장 적은 서버 선택
  • url_hash (제3자)
  • URL 에 접근 한 hash 결과 에 따라 요청 을 할당 하여 모든 URL 을 같은 백 엔 드 서버 로 지정 합 니 다.백 엔 드 서버 가 캐 시 일 때 적 용 됩 니 다.
  • 이 정책 에 서 는 weight 등 다른 인 자 를 사용 할 수 없습니다.

  • fair (제3자)
  • 백 엔 드 서버 의 응답 시간 에 따라 요청 을 분배 하고 응답 시간 이 짧 은 우선 분배

  •  
     
    설정 모듈 -- upstream 모듈
    upstream 모듈 은 새로운 컨 텍스트 를 정의 할 수 있 습 니 다. upstream 서버 를 포함 하고 있 습 니 다. 이 서버 들 은 서로 다른 가중치, 유형, 심지어 유지 보수 등 을 바탕 으로 down 으로 표 시 될 수 있 습 니 다.
    upstream 모듈 은 proxy 모듈 에 자주 사 용 됩 니 다.
     
    상용 명령 어
  • ip_hash
  • 클 라 이언 트 IP 주 소 를 바탕 으로 요청 한 배포 완료
  • 같은 클 라 이언 트 의 요청 이 같은 upstream 서버 로 전송 되 는 것 을 보증 할 수 있 습 니 다.

  • keepalive
  • 모든 워 커 프로 세 스 가 upstream 서버 에 보 내 는 연결 캐 시 갯 수 입 니 다.

  • least_conn
  • 최소 연결 스케줄 링 알고리즘;

  • server: upstream 서버 의 주 소 를 정의 하고 일련의 선택 가능 한 매개 변 수 를 포함 할 수 있 습 니 다. 예 를 들 어
  • weight
  • 가중치
  • max_fails
  • 최대 실패 연결 횟수, 실패 연결 의 시간 초과 시간 은 failtimeout 지정;

  • fail_timeout
  • 요청 을 기다 리 는 대상 서버 가 응답 을 보 내 는 시간;

  • backup
  • fallback 의 목적 으로 모든 서비스 가 고장 났 을 때 이 서버 를 시작 합 니 다.

  • down
  • 요청 을 처리 하지 않 음 을 수 동 으로 표시 합 니 다.



  •  
    응용 장면
    공식 적 으로 준 간단 한 예:
    upstream backend {
        server backend1.example.com       weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;
    
        server backup1.example.com:8080  backup;
        server backup2.example.com:8080  backup;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }

     
    동적 선택의 예
    resolver 10.0.0.1;
    
    upstream dynamic {
        zone upstream_dynamic 64k;
    
        server backend1.example.com      weight=5;
        server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
        server 192.0.2.1                 max_fails=3;
        server backend3.example.com      resolve;
        server backend4.example.com      service=http resolve;
    
        server backup1.example.com:8080  backup;
        server backup2.example.com:8080  backup;
    }
    
    server {
        location / {
            proxy_pass http://dynamic;
            health_check;
        }
    }

     
     
    실천 과 문제
    기본 폴 링 과 가중치 실현
         //   
          upstream backend {
                  server 10.103.100.3:8090 weight=2;
                  server 10.103.100.4:8090;
         }
         //     
          upstream backend {
                  server 10.103.100.3:8090;
                  server 10.103.100.4:8090;
           }
     
          server {
     
              listen 80;
              server_name localhost;
     
              location /{
                  proxy_pass http://backend;
              }
         }

     
    문제.
  • upstream 모듈 은 http 설정 블록 아래 에 있 습 니 다. server 설정 블록 에 넣 으 면 오류 가 발생 합 니 다
  • upstream server 가 배경 서버 를 정의 할 때 호스트 이름과 포트 를 직접 지정 하면 됩 니 다.
  • http: / /
  • 를 더 할 필요 가 없다.
  • http: / / proxypass 에 추가 하면 됩 니 다
  • weight 기본 값 은 1
  •  
    IP_hash
    //    ip_hash
          upstream backend {
                   ip_hash;
                  server 10.103.100.3:8090 weight=2;
                  server 10.103.100.4:8090;
         }
         //   ip_hash
          upstream backend {
                  ip_hash;
                  server 10.103.100.3:8090;
                  server 10.103.100.4:8090;
           }
     
          server {
     
              listen 80;
              server_name localhost;
     
              location /{
                  proxy_pass http://backend;
              }
         }

    주의:
  • weight,ip_hash 중첩 사용 가능
  • 좋은 웹페이지 즐겨찾기