Nginx 다양한 부하 균형 전략 구축

14023 단어
배경 설명
위 에 서 는 Nginx 역방향 대 리 를 이용 하여 부하 균형 을 실현 하 는 것 을 소개 하 였 으 며, 본 고 는 Nginx 아래 의 몇 가지 부하 균형 전략 을 상세 하 게 서술 하 였 다.
폴 링
폴 링 은 말 그대로 돌아 가면 서 요청 하 는 것 이다. 지난 글 의 소 개 를 바탕 으로 우 리 는 부하 균형 전략 을 default.conf 파일 upstream 에 초점 을 맞 출 것 이다.
upstream backend {
    server web02:80;
    server web03:80;
}

브 라 우 저 에서 localhost:8080 연속 요청 을 보 냅 니 다. nginx 요청 로그 에 따 르 면 웹 02 와 웹 03 의 방문 횟수 가 같 음 을 알 수 있 습 니 다.
web01    | 172.24.0.1 - - [26/Jun/2019:10:03:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:10:03:06 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:10:03:07 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.3 - - [26/Jun/2019:10:03:07 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:10:05:25 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:10:05:25 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.3 - - [26/Jun/2019:10:05:26 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:10:05:26 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.3 - - [26/Jun/2019:10:05:27 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

가중 폴 링
가중 폴 링 이란 위의 폴 링 을 바탕 으로 일정한 가중치 를 더 해 특정한 서버 가 퍼 가기 되 는 횟수 가 더 많 고 가중 권 은 IP 후방 에서 weight 를 연결 하여 이 루어 지 는 것 을 말한다.
upstream backend {
    server web02:80 weight=5;
    server web03:80 weight=1;
}

weight 값 이 클 수록 분 배 된 요청 이 많 습 니 다. nginx 의 요청 로그 에 따 르 면 웹 02 는 8 번, 웹 03 은 두 번 방 문 했 습 니 다.
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:13 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:13 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.3 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:18 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:18 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:19 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.3 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.3 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [26/Jun/2019:14:48:20 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

ip_hash
만약 에 클 라 이언 트 의 요청 이 모든 서버 에 전 송 될 수 있다 면 모든 서버 가 이 클 라 이언 트 의 정 보 를 캐 시 하고 자원 을 낭비 할 수 있 습 니 다. iphash 역할 은 클 라 이언 트 IP 의 세 부분 을 통 해 key 를 계산 하여 같은 클 라 이언 트 의 요청 을 지정 한 서버 에 전송 하 는 것 입 니 다. 설정 방법 은 비교적 간단 합 니 다. upstream 위 에 코드 를 한 줄 만 추가 하면 됩 니 다.
upstream backend {
    ip_hash;
    server web02:80;
    server web03:80;
}

5 번 반복 요청 을 했 습 니 다. 로 그 를 통 해 요청 이 웹 03 에 잠 겨 있 음 을 알 수 있 습 니 다.
web01    | 172.24.0.1 - - [27/Jun/2019:11:48:15 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.2 - - [27/Jun/2019:11:48:15 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web01    | 172.24.0.1 - - [27/Jun/2019:11:48:22 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.2 - - [27/Jun/2019:11:48:22 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web03    | 172.24.0.2 - - [27/Jun/2019:11:48:23 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web01    | 172.24.0.1 - - [27/Jun/2019:11:48:23 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.2 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"
web01    | 172.24.0.1 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.2 - - [27/Jun/2019:11:48:24 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "172.24.0.1"

url_hash
이 모드 는 url 을 해시 한 다음 에 구체 적 인 서버 로 위치 시 키 는 것 입 니 다. 같은 url 은 같은 서버 에 영원히 전 송 됩 니 다.
upstream backend {
    hash $request_uri;
    server web02:80;
    server web03:80;
}

브 라 우 저 를 통 해 두 번 http://localhost:8080 을 방문 하면 로 그 를 통 해 리 트 윗 이 웹 03 에 고정 되 어 있 음 을 볼 수 있 습 니 다.
web01    | 172.24.0.1 - - [27/Jun/2019:11:58:31 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.4 - - [27/Jun/2019:11:58:31 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.4 - - [27/Jun/2019:11:58:38 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [27/Jun/2019:11:58:38 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

링크 뒤에 파 라 메 터 를 연결 하면 퍼 가기 에 변화 가 생 겼 고 웹 02 에 고정 되 어 있 습 니 다. 매개 변수 변화 에 따라 요청 도 폴 링 방식 으로 서버 에 전달 되 지만 사용 한 url 재 방문 은 더 이상 변 하지 않 습 니 다.
web02    | 172.24.0.4 - - [27/Jun/2019:11:59:54 +0000] "GET /?a=1 HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [27/Jun/2019:11:59:54 +0000] "GET /?a=1 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.4 - - [27/Jun/2019:11:59:55 +0000] "GET /?a=1 HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web01    | 172.24.0.1 - - [27/Jun/2019:11:59:55 +0000] "GET /?a=1 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

좋은 웹페이지 즐겨찾기