Nginx 부하 균형 상세 설명

5744 단어
Nginx 부하 균형 상세 설명
  • Nginx 의 부하 균형 전략
  • 폴 링
  • 가중치
  • ip_hash
  • least_conn
  • 제3자 전략
  • 이 편 은 주로 Nginx 의 부하 균형 전략 을 소개 합 니 다.
    Nginx 의 부하 균형 정책
    폴 링
  • 설명: 모든 요청 은 시간 순서에 따라 애플 리 케 이 션 서버 에 돌아 가면 서 부 하 를 백 엔 드 서버 에 균형 있 게 분산 시 킬 수 있 지만 백 엔 드 서버 의 연결 수 와 시스템 부하 에 관심 이 없습니다. 부하 균형 전략 입 니 다.라운드 순서 에서 서버 가 다운 되면 자동 으로 서버 를 제거 합 니 다.일반적으로 백 엔 드 서버 의 성능 이 균일 한 경우 에 사용 된다.
  • 매개 변수:
  • 매개 변수 이름
    용도.
    fail_timeout
    설정 한 시간 동안 서버 가 응답 하지 않 으 면 서버 가 유효 하지 않 습 니 다. 기본 10s 입 니 다.
    max_fails
    연결 실패 횟수 허용, 기본 값 1
    fail_time
    서버 가 폴 링 대기 열 을 제거 하 는 시간, 기본 10s (제거 시간 내 에 폴 링 요청 을 받 지 않 음)
    backup
    이 서버 를 예비 서버 로 표시 합 니 다. 메 인 서버 가 다운 되면 메 인 서버 대신 요청 을 받 습 니 다.
    down
    이 서버 영구 정지 표시
  • 설정 범례:
  • upstream xx.com{
    	server 192.168.12.100:5000 fail_timeout=2s max_fails=1;
    	server 192.168.12.101:5000 fail_timeout=2s max_fails=1;
    }
    
    server {
    	listen 80;
    	server_name 192.168.12.101;
    
    	location / {
    		proxy_pass http://xx.com;
    		proxy_redirect default;
    		proxy_connect_timeout 2s;
    	}
    	
    	.......  
    }
    

    위 설정 에서 서버 한 대가 다운 되면 기다 리 는 시간 은 time = proxy 입 니 다.connect_timeout + fail_timeout * max_fails = 2 + 2 * 1 = 4s
    무게
  • 개술: 폴 링 알고리즘 을 바탕 으로 폴 링 의 확률 을 지정 한다.가중치 가 높 을 수록 분 배 된 기록 이 클 수록 서버 하드웨어 설정 에 어느 정도 차이 가 있 는 경우
  • 설정 범례:
  • upstream xx.com{
    	server 192.168.12.100:5000 weight=1;
    	server 192.168.12.101:5000 weight=1;
    	server 192.168.12.101:5000 weight=3;
    }
    

    위의 그림 에서 설정 한 바 와 같이 가중치 가 1 과 3 이면 가중치 가 3 인 서버 가 문의 당 할 확률 은 1 의 3 배 입 니 다.
  • 가중 폴 링 알고리즘
  • 개술: 가중 폴 링 알고리즘 은 간단 해 보인다. 예 를 들 어 상기 설정 에서 10 개의 요청 이 있 는데 가중치 가 1 인 서버 가 a, b, 가중치 가 3 인 서버 가 c 라 고 가정 한다.그들 이 분배 하 는 순 서 는 a, a, b, b, c, c, c, c, c, c, c 일 수 있다.그러면 b 서버 에 연속 적 인 여러 요청 이 있 고 분포 가 고 르 지 않 으 며 용기 에 부하 가 갑자기 증가 합 니 다.그래서 Nginx 에서 현재 사용 하고 있 는 것 은 부 드 러 운 가중 폴 링 입 니 다. 이 는 요청 을 여러 연속 으로 분산 시 킬 것 입 니 다. 예 를 들 어 c, a, b, c, c, a, c, b, c, c 등 입 니 다.
  • 알고리즘 소개: 먼저 알고리즘 중의 몇 가지 매개 변 수 를 소개 합 니 다
  • weight: 파일 에 설 정 된 weight 값 을 설정 합 니 다.
  • effective_weight: 서버 의 유효 가중치 입 니 다. 초기 값 은 weight 입 니 다. Nginx 는 백 엔 드 와 의 요청 에서 시간 초과 나 오류 가 발생 하면 유효 가중치 의 값 을 줄 이 고 낮 춘 후에 요청 을 받 습 니 다. 정상 이면 weight 와 같 을 때 까지 점점 증가 합 니 다.이 매개 변 수 는 오류 가 발생 했 을 때 가중치 를 낮 추기 위해 서 입 니 다.
  • current_weight: 서버 의 현재 가중치, 초기 값 은 0 이 며, 문의 할 때마다 서버 를 선택 할 때 동적 으로 조정 합 니 다.

  • 선택 할 때마다 백 엔 드 서버 를 옮 겨 다 니 며 서버 마다 가중치 연산 을 수행 합 니 다. currentweight = current_weight + effective_weight。(현재 가중치 + 유효 가중치) Total 의 값 을 현재 모든 서버 의 effective 로 설정 합 니 다.weight 와
    매번 current 를 선 정 했 습 니 다.weight 값 이 가장 큰 서버 처리 요청 후 이 서버 의 currentweight = current_weight - total。(현재 가중치 - 총 가중치) 선 정 된 가중치 가 변 하지 않 습 니 다.
  • 사례 는 현재 세 대의 서버 a, b, c 의 가중치 가 각각 4, 2, 1 이 라 고 가정 한다.그러면 7 번 의 문의 에서 a 는 4 번, b 는 2 번, c 는 1 번, 그리고 .계산 하기 편리 하도록 모든 서버 가 잘 사용 된다 고 가정 하면 effectiveweight = weight,total = weight1 + weight2 + weight3 = 7。

  • 횟수
    선택 한 가중치
    결 과 를 선정 하 다
    선 정 된 가중치
    1
    a=0+4=4,b=0+2=2,c=1
    a
    a=4-7=-3,b=2,c=1
    2
    a= -3+4=1,b=2+2=4,c=1+1=2
    b
    a=1,b=4-7=-3,c=2
    3
    5,-1,3
    a
    -2,-1,3
    4
    2,1,4
    c
    2 ,1,-3
    5
    6,3,-2
    a
    -1,3,-2
    6
    3,5,-1
    b
    3,-2,-1
    7
    7,0,0
    a
    0,0,0
    최종 순 서 는 a, b, a, c, a, b, a 이다.기대 에 부합 하 다.
    ip_hash
  • 개요: IP 의 Hash 값 을 계산 한 다음 에 분 배 된 서버 를 선택 합 니 다.이 방법 은 클 라 이언 트 의 요청 을 같은 서버 에 보 내 session 세 션 을 보장 하고 가중치 를 사용 할 수 있 습 니 다.
  • 알고리즘 소개: C 언어 를 못 알 아 보고 Hash 알고리즘 이 IP 의 3 단 을 계산 하 는 것 임 을 대체적으로 알 수 있 습 니 다
  • for (i = 0; i < 3; i++) {  
    	hash = (hash * 113 + iphp->addr[i]) % 6271;  //iphp->addr[i] ip         i 
    }
    

    계 산 된 Hash 값 에 따라 분배 합 니 다.
  • 설정:
  • upstream xx.com{
            ip_hash;    #                 
            server localhost:8080   weight=2; 
            server localhost:8081;  
            server localhost:8082;  
            server localhost:8083   max_fails=3 fail_timeout=20s;  
        }
    
  • 주의:
  • IP 사용Hash 는 Nginx 가 최 전방 서버 여야 합 니 다. 그렇지 않 으 면 올 바른 클 라 이언 트 IP 를 가 져 올 수 없습니다.
  • IP 에 있다 면Hash 의 Nginx 서버 이후 또 다른 부하 균형 이 있 으 면 구체 적 인 요청 이 한 서버 에 떨 어 지면 확인 할 수 없습니다.

  • least_conn
  • 개요: 최소 연결 알고리즘 은 배경 서버 에 쌓 인 연결 수가 가장 적은 서버 를 선택 하여 현재 요청 을 처리 합 니 다.
  • 알고리즘 소개: 상세 한 소스 코드 분석 은 이 편 을 참고 합 니 다.https://blog.csdn.net/zhangskd/article/details/50242241。 nginx 내 부 는 모든 배경 서버 의 현재 연결 수 와 가중치 를 기록 합 니 다. 최소 연결 알고리즘 을 사용 할 때 배경 서버 의 연결 수 / 가중치 의 서버 처리 요청 을 선택 합 니 다.

  • 제3자 전략
  • fair: 서버 응답 시간 에 따라 요청 을 분배 하고 응답 시간 이 가장 짧 은 우선 분배 입 니 다.
  • url_hash: URL 의 hash 결과 에 따라 요청 을 할당 합 니 다. 모든 URL 을 같은 백 엔 드 서버 로 지정 합 니 다
  • 좋은 웹페이지 즐겨찾기