>  기사  >  Java  >  Nginx+SpringBoot로 로드 밸런싱을 달성하는 방법

Nginx+SpringBoot로 로드 밸런싱을 달성하는 방법

WBOY
WBOY앞으로
2023-05-29 17:28:061465검색

로드 밸런싱 소개

nginx의 로드 밸런싱 구현을 소개하기 전에, 로드 밸런싱의 분류에 대해 간략하게 설명하겠습니다. 크게 하드웨어 로드 밸런싱과 소프트웨어 로드 밸런싱으로 나누어집니다. 하드웨어 로드 밸런싱은 전문적인 소프트웨어와 하드웨어를 사용합니다. 관련 장비와 결합하여 장비 공급업체는 데이터 안정성과 보안 측면에서 매우 신뢰할 수 있는 f5와 같은 완전하고 성숙한 솔루션을 제공하지만 비용은 소프트웨어 기반 소프트웨어 로드 밸런싱보다 비쌉니다. nginx.Main, 메시지 큐 배포 메커니즘이 구현되었습니다.

간단히 말하면, 소위 로드 밸런싱은 많은 요청을 오프로드하여 처리를 위해 다른 서버에 할당하는 것입니다. 예를 들어, a, b, c라는 3개의 서버가 있고 로드 밸런싱과 폴링 전략을 위해 nginx를 사용합니다. 이때 9개의 요청이 수신되면 9개의 요청이 a와 b에 균등하게 분배됩니다. cf 서버에서는 각 서버가 3개의 요청을 처리하므로 여러 시스템 클러스터의 특성을 사용하여 단일 서버에 대한 부담을 줄일 수 있습니다.

nginx로 구현된 로드 밸런싱의 예시 다이어그램:

Nginx+SpringBoot로 로드 밸런싱을 달성하는 방법

로드 밸런싱 전략

nginx 오픈 소스는 4가지 로드 밸런싱 방법을 지원하며 nginx plus는 2가지 방법을 더 추가합니다.

1.라운드 로빈:

모든 요청에 ​​대한 요청을 폴링하고 전송하는 기본 할당 방법입니다.

nginx.conf 구성 예:

참고: 위의 도메인 이름은 ip로 대체할 수도 있습니다.

2.최소 연결:

서버 가중치도 고려하여 활성 연결 수가 가장 적은 서버에 요청을 보냅니다.

nginx.conf 구성 예:

3.ip 해시:

요청을 보내는 서버는 클라이언트 IP 주소에 따라 결정됩니다. 이 경우 해시 값은 ipv4 주소의 처음 3바이트 또는 전체 ipv6 주소를 사용하여 계산됩니다. 이 방법은 해당 서버를 사용할 수 없는 경우를 제외하고 동일한 주소의 요청이 동일한 서버에 도달하도록 보장합니다.

4.generic hash:

요청이 전송되는 서버는 텍스트 문자열, 변수 또는 조합이 될 수 있는 사용자 정의 키에 의해 결정됩니다.

5.최소 시간(nginx plus만 해당)

각 요청에 대해 nginx plus는 평균 대기 시간이 가장 낮고 활성 연결 수가 가장 적은 서버를 선택합니다. 여기서 평균 대기 시간은 다음 매개변수를 기반으로 계산됩니다. 최소_시간 지시문:

  • 헤더: 서버로부터 첫 번째 바이트를 수신하는 시간입니다.

  • last_byte: 서버로부터 완전한 응답을 받는 시간입니다.

  • last_byte inflight: 서버로부터 완전한 응답을 받는 시간입니다.

6.random:

각 요청은 무작위로 선택된 서버로 전달됩니다. 두 개의 매개변수가 지정되면 먼저 nginx는 서버 가중치에 따라 두 개의 서버를 무작위로 선택한 다음 지정된 방법을 사용하여 그 중 하나를 선택합니다.

  • least_conn : 최소 활성 연결 수

  • least_time=header (nginx plus) : 서버로부터 응답 헤더를 수신하는 최소 평균 시간($upstream_header_time).

  • least_time=last_byte (nginx plus) : 서버로부터 완전한 응답을 받는 데 걸리는 가장 짧은 평균 시간($upstream_response_time).

nginx+springboot는 로드 밸런싱을 달성합니다

환경 준비

  • jdk1.8 이상에 따라 다름

  • nginx 환경에 따라 다름,

여기 있는 프로젝트는 내 프로젝트입니다. own 이전 springboot 프로젝트, springboot 프로젝트 주소: https://github.com/xuwujing/springboot-study/tree/master/springboot-thymeleaf

먼저 이 프로젝트를 다운로드하고 다음을 입력합니다. mvn clean package 将项目进行打包为jar文件,然后将application.properties和此jar项目放在一个文件夹中,然后复制该文件夹(这里为了清晰所以进行复制,实际不复制更改端口重启也行),修改复制文件夹application.propertiesport를 예를 들어 다음과 같이 변경합니다. 8086 .

nginx 구성

nginx/conf/nginx.conf 디렉토리에 있는 nginx 구성 파일 nginx.conf를 찾은 다음 구성을 수정하고 다음 구성을 추가합니다.

  • upstream pancm: 원하는 대로 이름을 정의하세요.

  • 서버 + IP: 포트 또는 도메인 이름

라운드 로빈 전략을 사용하지 않으려면 다른 이름으로 변경할 수도 있습니다.

그런 다음 서버에서 다음 구성을 추가/수정합니다.

구성 지침:

  • 서버: 가상 호스트의 이름, 하나의 http에서 여러 서버를 구성할 수 있습니다.

  • listen: nginx 기본 포트;

  • server_name: nginx 서비스의 주소입니다. 여러 도메인 이름을 공백으로 구분하여 사용할 수 있습니다.

  • proxy_pass: 프록시 경로, 일반적으로 로드 밸런싱을 달성하기 위해 업스트림 뒤에 이름을 구성합니다. 점프용 IP를 직접 구성할 수 있습니다.

nginx.conf 전체 구성:

로드 밸런싱 테스트

nginx 구성을 완료한 후 nginx를 시작합니다.
Linux 입력 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf, 이미 시작된 경우 /usr/을 사용할 수 있습니다. local/nginx/ sbin/nginx -s reload 명령을 사용하여 구성 파일을 핫 로드합니다. Windows에서 nginx.exe 또는 cmd를 직접 클릭합니다. nginx 디렉토리에서 start nginx를 실행하여 시작하면 여전히 핫 로딩을 위해 nginx -s reload를 사용할 수 있습니다. /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,如果已经启动可以使用/usr/local/nginx/sbin/nginx -s reload命令进行热加载配置文件,windows直接点击nginx目录下的nginx.exe或者 cmd运行start nginx进行启动,如果启动了依旧可以使用nginx -s reload进行热加载。

nginx启动完成之后,我们依次启动刚刚下载的springboot和复制更改端口的项目,输入:java -jar springboot-jsp-thymeleaf.jar

nginx가 시작된 후 방금 다운로드한 springboot를 시작하고 프로젝트를 복사하여 포트를 변경합니다. java -jar springboot-jsp-thymeleaf.jar를 입력하여 시작합니다.

모든 것이 성공적으로 시작된 후에는 브라우저에 서비스의 IP 주소를 입력하여 액세스할 수 있습니다.

예제 사진:

Nginx+SpringBoot로 로드 밸런싱을 달성하는 방법

참고: 여기에서는 테스트를 위해 Windows 시스템을 사용하고 있으며 실제 Linux 시스템도 동일합니다.

그런 다음 콘솔 로그를 살펴보겠습니다!

Nginx+SpringBoot로 로드 밸런싱을 달성하는 방법

위 예시 다이어그램에서 4개의 인터페이스 새로 고침 요청을 수행하고 최종적으로 이를 두 서비스에 균등하게 분배했습니다. 위의 테스트 결과에서 로드 밸런싱을 달성했습니다.

여기에서는 nginx 사용 시 주의 사항에 대해 설명합니다. 학습 및 테스트 시 일반적으로 nginx의 기본 포트를 사용하여 로드 밸런싱을 수행하는 데 문제가 없습니다. 그러나 프로젝트에서 사용할 때는 특히 로그인 인터페이스와 포트가 80이 아니면 리디렉션할 수 없는 로그인 인터페이스가 있을 것입니다. 디버깅할 때 net::err_name_not_resolved와 같은 오류가 나타나는 이유는 nginx의 기본 포트가 80이므로 기본 점프도 80이기 때문입니다. 따라서 이런 일이 발생하면 위치 아래에 proxy_set_header 호스트 $host:port 구성을 추가해야 합니다. 포트와 수신 포트를 일관되게 유지하세요. 🎜

위 내용은 Nginx+SpringBoot로 로드 밸런싱을 달성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제