Google Compute Engine 글로벌 HTTP 부하 분산기

Google Compute Engine 글로벌 HTTP 부하 분산기

저는 구글 컴퓨트 엔진을 사용하고 있습니다. 배포 관리자를 설정했고 네트워크 LB가 웹 서버에 연결할 수 있도록 방화벽을 설정했습니다. 웹 서버 자체가 이를 인스턴스 그룹 관리자에 추가하고 인스턴스 그룹 관리자를 대상으로 하는 자동 확장 처리를 설정했습니다. HTTP 상태 확인이 설정되었습니다. 웹 서버 인스턴스에 대해 실행되며 HTTP 상태 확인을 백엔드 서비스에 추가하고 인스턴스 그룹 관리자를 백엔드 서비스에 추가합니다. 백엔드 서비스가 기본 서비스인 URL 맵을 설정합니다. URL 매퍼는 다음과 같습니다. 글로벌 IP가 있는 전달 규칙이 가리키는 HTTP 프록시에 추가됩니다.

이 설정은 여기에 설명된 설정과 매우 유사합니다.https://cloud.google.com/solutions/scalable-and-resilient-apps

이제 이 설정으로 해결할 수 있는 문제를 살펴보겠습니다. 웹 서버에서 실행 중인 Nginx 서버가 있고 요청에 응답하며 이에 대한 이벤트 소스 연결을 생성할 수 있지만 정확히 1분 후에 INCOMPLETE_CHUNKED_ENCODING 오류와 함께 연결이 닫힙니다. 웹 서버 중 하나에 직접 연결하면 이런 일이 발생하지 않습니다. tcp keepalive에 대한 sysconf 설정을 다음과 같이 변경했습니다.

net.ipv4.tcp_keepalive_time=600 
net.ipv4.tcp_keepalive_intvl=15 
net.ipv4.tcp_keepalive_probes=5

읽고 나면 이https://cloud.google.com/compute/docs/troubleshooting#networktraffic

nginx 구성에서 셀 수 없이 많은 작업을 시도했지만 해결책을 찾을 수 없습니다.

누구든지 어떤 아이디어나 비슷한 문제가 있습니까?

답변1

Alex가 해당 게시물 링크를 공유한 것은 주요 문제로 연결되기 때문에 옳았지만 약간의 설명이 필요합니다.

HTTP 연결 제한 시간을 늘리려면 Nginx 구성 파일( /etc/nginx/nginx.conf)에서 'keepalive_timeout' 값(기본값은 65)을 변경해야 하므로 제한 시간은 로드 밸런서의 600초 제한 시간보다 길어집니다. . 이로 인해 로드 밸런서는 nginx가 아닌 유휴 연결을 닫는 쪽이 됩니다.

Google Cloud Platform HTTP(S) 부하 분산기와 작동하도록 nginx keepalive를 조정합니다.
"keepalive_timeout 650;"을 설정하십시오. nginx에서/etc/nginx/nginx.conf

keepalive_timeout 650;
keepalive_requests 10000;

에 대한 더 자세한 정보http 지속성.

답변2

nginx아마 당신 이 요구할 것입니다약간의 튜닝.

관련 정보