이 절차에서는 MongoDB 에서 ingressConnectionEstablishmentRateLimiterEnabled
매개변수를 사용하여 속도 제한을 구성하는 방법을 설명합니다. 속도 제한기는 시스템 안정성과 성능에 영향 수 있는 연결 폭풍으로부터 배포서버 보호하는 데 도움이 됩니다.
시작하기 전에
이 절차를 시작하기 전에 다음 요구 사항을 충족하는지 확인하세요.
MongoDB deployment 에 대한 관리 권한이 있습니다.
시스템의 연결 부하 패턴 및 요구 사항을 이해합니다.
드라이버의
connectTimeoutMS
설정을 알고 있습니다.
절차
속도 제한기 활성화
속도 제한기를 사용하려면 먼저 ingressConnectionEstablishmentRateLimiterEnabled
매개변수를 true
로 설정하여 활성화 .
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRateLimiterEnabled: true } )
연결 설정 속도 설정
ingressConnectionEstablishmentRatePerSec
를 처리량에 부정적인 영향을 주지 않고 클러스터가 처리할 수 있는 최대 속도로 설정합니다. 이 숫자는 다른 워크로드 역학에 따라 달라지지 않는 고정된 숫자여야 합니다.
db.adminCommand( { setParameter: 1, ingressConnectionEstablishmentRatePerSec: 20 } )
연결 대기열 깊이 구성
다음 공식에 따라 ingressConnectionEstablishmentMaxQueueDepth
를 설정합니다.
maxQueueDepth < (establishmentRatePerSec / 1000) * (connectTimeoutMs - ((averageTimeToCompletedHelloMicros-averageTimeQueuedMicros)*1000))
이 공식은 다음을 보장합니다.
새로운 연결 시도는 운전자 연결을 포기한 시간이 지나면 대기열에 남아 있지 않습니다.
대부분의
hello+auth
시도는 시간 초과 오류로 인해 실패하지 않고 성공합니다.
averageTimeQueuedMicros
지표는 약 (maxQueueDepth / establishRatePerSec) * 1e6
와(과) 같으므로 ingressConnectionEstablishmentMaxQueueDepth
조정에 도움이 될 수 있습니다.
중요
대기열 크기를 조정할 때는 짧은 대기열 크기보다 긴 대기열 크기를 우선시합니다. 닫힌 연결로 인해 드라이버가 연결 풀을 지우는 것은 연결이 대기열에 너무 오래 남아 시간 초과되는 것보다 더 큰 위험이 있습니다.
운전자 설정 구성
연결 실패가 관찰되면 드라이버의 maxPoolSize
및 maxConnecting
설정을 낮추세요. 이러한 설정을 낮추면 지연 시간 길어져 연결 폭풍이 발생할 수 있는 기간 동안 운전자 서버 에 대한 연결을 더 많이 여는 대신 연결을 재사용합니다.
참고
maxPoolSize
및 maxConnecting
를 줄이면 쿼리가 연결이 풀로 반환될 때까지 운전자 계층에서 더 오랜 시간을 보낼 수 있습니다. 이러한 설정을 줄이면 부하가 급증하는 동안 지연 시간 비용 하지만 가용성을 유지하는 데 도움이 됩니다.
모니터링 및 문제 해결
다음 지표 모니터링하여 속도 제한기를 올바르게 구성했는지 확인합니다.
거부된 연결의 수가 증가하는 경우 다음 사항을 고려하세요.
클러스터 이 로드를 처리하다 에 충분한 CPU 리소스가 있는 것으로 보이면
ingressConnectionEstablishmentRatePerSec
를 늘립니다.공식에 따라
ingressConnectionEstablishmentMaxQueueDepth
를 조정합니다.운전자 연결 풀 설정 검토.