Nginx 로드 밸런싱
최근 프로젝트는 동시성을 염두에 두고 설계해야 하기 때문에 프로젝트 아키텍처를 설계할 때 Nginx를 사용하여 Tomcat 클러스터를 구축한 다음 Redis를 사용하여 분산 세션을 구축하는 것을 고려했습니다. 아래에서 탐색 과정을 단계별로 공유하겠습니다.
Nginx는 작지만 기능면에서는 매우 강력합니다. 역방향 프록시, 로드 밸런싱, 데이터 캐싱, URL 재작성, 읽기-쓰기 분리, 동적 및 정적 분리 등을 지원합니다. 다음으로 로드 밸런싱 구성에 대해 설명하겠습니다. 다음 글에서는 Redis와의 조합을 테스트하겠습니다.
Nginx 로드 밸런싱 스케줄링 방법
Nginx의 로드 밸런싱 모듈 업스트림 모듈은 주로 다음 4가지 스케줄링 알고리즘을 지원합니다.
1. 서버 폴링(기본 모드): 요청된 각 액세스는 시간순으로 하나씩 다른 서버에 할당됩니다. 백엔드 서버가 다운되면 결함이 있는 시스템이 자동으로 제거됩니다. 영향을 받지 않습니다. 가중치는 폴링의 가중치를 지정하며, 가중치 값이 클수록 서버 측 성능이 고르지 않을 때 할당되는 확률이 높아집니다.
2. ip_hash: 각 요청은 접속된 IP의 해시 값에 따라 할당됩니다. 동일한 IP의 이 행에 있는 사용자는 수정 후 백엔드 서버에 고정됩니다. 서버를 사용하면 웹 페이지의 세션 공유 문제를 효과적으로 해결할 수 있습니다.
3. Fair: 이 알고리즘은 페이지 크기와 로딩 시간, 즉 로드 밸런싱 결정을 지능적으로 수행할 수 있습니다. 백엔드 서버 응답 시간은 요청을 할당하는 데 사용되며 응답 시간 간격이 우선순위입니다. Nginx 자체는 fair 모듈에 통합되지 않습니다. 이 스케줄링 알고리즘이 필요한 경우 Nginx의 upstream_fair 모듈을 다운로드한 다음 config에서 구성하고 로드해야 합니다.
4. url_hash: 이 스케줄링 알고리즘은 방문한 URL의 해시 결과를 기반으로 요청을 할당하므로 각 URL이 동일한 백엔드 서버로 연결되므로 백엔드 서버 효율성. Nginx 자체에는 이 모듈이 통합되어 있지 않습니다. 이를 사용하려면 Nginx의 해시 패키지를 설치하고 이를 컴파일하여 nginx에 로드해야 합니다.
Nginx의 업스트림 모듈에서 지원하는 상태 매개변수
http의 업스트림 모듈에서는 다음을 통해 백엔드 서버의 IP 주소를 지정할 수 있습니다. 서버 지시문 및 포트를 설정할 수 있으며 로드 밸런싱 스케줄링에서 각 백엔드 서버의 상태를 설정할 수도 있습니다. 일반적으로 설정되는 상태 매개변수는 다음과 같습니다.
1. down: 현재 서버가 일시적으로 로드 밸런싱에 참여하지 않음을 나타냅니다.
2. 백업 : 백업 서버를 예약합니다. 백업 서버는 백업이 아닌 다른 모든 컴퓨터가 실패하거나 사용 중인 경우에만 요청되므로 이 서버는 부담이 가장 적습니다.
3. max_fails: 허용되는 요청 실패 횟수, 기본값은 1입니다. 최대 횟수를 초과하면 Proxy_next_upstream 모듈에서 정의한 오류가 반환됩니다.
4.fail_timeout: max_fails 실패 후 서비스를 일시 중단하는 시간입니다. max_fails는 failure_timeout과 함께 사용할 수 있습니다.
참고: 로드 밸런싱 스케줄링 알고리즘이 ip_hash를 사용하는 경우 로드 밸런싱 스케줄링에서 백엔드 서버의 상태는 가중치 및 백업일 수 없습니다.
Nginx 매개변수 구성 및 설명
#user nobody; worker_processes 2; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_vary on; upstream andy { server 192.168.1.110:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.1.111:8080 weight=1 max_fails=2 fail_timeout=30s; ip_hash; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /andy_server { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://andy; #此处proxy_pass定义的name需要跟upstream 里面定义的name一致 expires 3d; #以下配置可省略 client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
참고: 다음을 참조하세요. 자세한 구성 설명은 이전 기사를 참조하세요.
Nginx 로드 밸런싱 테스트
Nginx는 이제 192.168.1.110, 192.168.1.110 및 192.168 Tomcat 서버에 배포됩니다. .111에 배포되었습니다.
1. http://192.168.1.110/andy_server/를 열 때 Nginx 로드 클러스터가 기본 모드를 채택하면 서버가 매번 폴링됩니다.
다음과 같습니다.
이 방법으로는 클러스터 세션 문제를 해결할 수 없습니다.
🎜> 이 방법은 세션 문제를 해결합니다. 192.168.1.110 서버가 다운되면 Nginx는 다운되지 않은 서버로 요청을 전송합니다. (테스트 후 192.168.1.110 서버를 종료한 후 요청합니다. 192.168.1.111 서버로 이동합니다). 하지만 해시된 서버가 다운되어 Nginx가 다른 서버로 이전되면 당연히 세션이 손실되는 문제도 있습니다. 3. Nginx 설치에 필요한 나머지 두 해당 모듈은 위와 같은 방식으로 테스트하지 않습니다. 요약 어떤 로드밸런싱 방식을 사용하더라도 세션 손실이 발생합니다. 이 문제를 해결하려면 클러스터 구성에 필수적인 데이터베이스, 파일, 분산 메모리 서버 등 세션을 별도로 저장해야 합니다. 다음 글은 세션 문제를 테스트하고 해결할 것입니다 저작권 표시: 이 글은 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.
위 내용은 로드 밸런싱을 위한 Nginx Tomcat을 소개하며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.