RDS 프록시 연결 고려 사항 - Amazon Relational Database Service

RDS 프록시 연결 고려 사항

연결 설정 구성

RDS 프록시의 연결 풀링을 조정하려면 다음 설정을 수정합니다.

IdleClientTimeout

프록시에 의해 종료되기 전에 클라이언트 연결이 유휴 상태일 수 있는 시간을 지정합니다. 기본값은 1,800초(30분)입니다.

애플리케이션이 이전 요청이 완료된 후 지정된 시간 내에 새 요청을 제출하지 않으면 클라이언트 연결이 유휴 상태로 간주됩니다. 기본 데이터베이스 연결은 열린 상태를 유지하고 연결 풀로 반환됩니다. 따라서 새 클라이언트 연결에 다시 사용할 수 있습니다. 프록시가 기간 경과 연결을 사전에 제거하도록 하려면 유휴 클라이언트 연결 제한 시간을 줄이는 것이 좋습니다. 워크로드가 프록시와 자주 연결하는 경우 연결 설정 비용을 절약하기 위해 유휴 클라이언트 연결 제한 시간을 늘리세요.

이 설정은 RDS 콘솔의 유휴 클라이언트 연결 제한 시간(Idle client connection timeout) 필드와 AWS CLI 및 API의 IdleClientTimeout 설정으로 표시됩니다. RDS 콘솔에서 유휴 클라이언트 연결 제한 시간(Idle client connection timeout) 필드의 값을 변경하는 방법을 알아보려면 AWS Management Console 섹션을 참조하세요. IdleClientTimeout 설정의 값을 변경하는 방법을 알아보려면 CLI 명령 modify-db-proxy 또는 API 작업 ModifyDBProxy를 참조하세요.

MaxConnectionsPercent

RDS 프록시가 대상 데이터베이스와 설정할 수 있는 연결 수를 제한할 수 있습니다. 데이터베이스에 사용할 수 있는 최대 연결의 백분율로 제한을 지정합니다. 이 설정은 RDS 콘솔의 연결 풀 최대 연결(Connection pool maximum connections) 필드와 AWS CLI 또는 API의 MaxConnectionsPercent 설정으로 표시됩니다.

MaxConnectionsPercent 값은 대상 그룹에서 사용하는 RDS DB 인스턴스에 대한 max_connections 설정의 백분율로 표시됩니다. 프록시가 이러한 연결을 모두 미리 생성하지는 않습니다. 이 설정을 통해 프록시는 워크로드에 필요한 연결을 설정할 수 있습니다.

예를 들어 등록된 데이터베이스 대상이 max_connections가 1000으로 설정되어 있고 MaxConnectionsPercent가 95로 설정된 경우, RDS 프록시는 950개의 연결을 해당 데이터베이스 대상에 대한 동시 연결의 상한선으로 설정합니다.

워크로드가 허용된 최대 데이터베이스 연결 수에 도달할 경우 발생하는 일반적인 부작용은 전체 쿼리 지연 시간이 늘어나고, 그와 함께 DatabaseConnectionsBorrowLatency 지표도 증가한다는 점입니다. DatabaseConnectionsMaxDatabaseConnectionsAllowed 지표를 비교하여 현재 사용된 데이터베이스 연결 수와 허용된 총 데이터베이스 연결 수를 모니터링할 수 있습니다.

이 파라미터를 설정할 때는 다음과 같은 모범 사례를 고려하세요.

  • 워크로드 패턴의 변동에 대비하여 충분한 연결 여유 용량을 확보하세요. 파라미터를 최근에 모니터링한 최대 사용량보다 30% 이상 높게 설정하는 것이 좋습니다. RDS 프록시는 데이터베이스 연결 할당량을 여러 노드에 재분배하므로, 차용 지연 시간이 늘어나는 것을 방지하기 위해 내부 용량 변경 시 추가 연결을 위한 최소 30%의 여유 용량이 필요할 수 있습니다.

  • RDS 프록시는 빠른 장애 조치, 트래픽 라우팅, 내부 작업을 지원하기 위해 활성 모니터링을 위한 특정 수의 연결을 예약합니다. MaxDatabaseConnectionsAllowed 지표에는 이러한 예약된 연결이 포함되지 않습니다. 이는 워크로드를 처리하는 데 사용 가능한 연결 수를 나타내며 MaxConnectionsPercent 설정에서 파생된 값보다 낮을 수 있습니다.

    최소 권장 MaxConnectionsPercent

    • db.t3.small: 30

    • db.t3.medium 이상: 20

RDS 콘솔에서 연결 풀 최대 연결(Connection pool maximum connections) 필드의 값을 변경하는 방법을 알아보려면 AWS Management Console 섹션을 참조하세요. MaxConnectionsPercent 설정의 값을 변경하는 방법을 알아보려면 CLI 명령 modify-db-proxy-target-group 또는 API 작업 ModifyDBProxyTargetGroup을 참조하세요.

데이터베이스 연결 한도에 대한 자세한 내용은 최대 데이터베이스 연결 수를 참조하세요.

MaxIdleConnectionsPercent

RDS 프록시가 연결 풀에서 유지할 수 있는 유휴 데이터베이스 연결 수를 제어할 수 있습니다. 기본적으로, RDS 프록시는 5분 동안 연결에 대한 활동이 없으면 풀의 데이터베이스 연결을 유휴 상태로 간주합니다.

MaxIdleConnectionsPercent 값은 RDS DB 인스턴스 대상 그룹에 대한 max_connections 설정의 백분율로 표시됩니다. 기본값은 MaxConnectionsPercent의 50%이고 상한은 MaxConnectionsPercent 값입니다. 예를 들어, MaxConnectionsPercent가 80인 경우 MaxIdleConnectionsPercent의 기본값은 40입니다. MaxConnectionsPercent 값이 지정되지 않은 경우 MaxIdleConnectionsPercent는 5(SQL Server)와 50(기타 모든 엔진)입니다.

값이 높으면 프록시가 유휴 데이터베이스 연결 비율을 높게 유지할 수 있습니다. 값이 낮으면 프록시가 높은 유휴 데이터베이스 연결 비율을 닫습니다. 워크로드를 예측할 수 없는 경우 MaxIdleConnectionsPercent에 높은 값을 설정하는 것을 고려해 보세요. 이렇게 하면 RDS 프록시가 새 데이터베이스 연결을 많이 열지 않고도 급증하는 활동을 수용할 수 있습니다.

이 설정은 AWS CLI 또는 API에서 DBProxyTargetGroupMaxIdleConnectionsPercent 설정으로 표시됩니다. MaxIdleConnectionsPercent 설정의 값을 변경하는 방법을 알아보려면 CLI 명령 modify-db-proxy-target-group 또는 API 작업 ModifyDBProxyTargetGroup을 참조하세요.

데이터베이스 연결 한도에 대한 자세한 내용은 최대 데이터베이스 연결 수를 참조하세요.

ConnectionBorrowTimeout

시간 초과 오류를 반환하기 전에 RDS 프록시가 연결 풀의 데이터베이스 연결을 사용할 수 있을 때까지 기다리는 시간을 선택할 수 있습니다. 기본값은 120초입니다. 이 설정은 연결 수가 최대일 때, 즉 연결 풀에서 사용할 수 있는 연결이 없을 때 적용됩니다. 이는 또한 장애 조치 작업이 진행 중인 경우와 같이 요청을 처리할 수 있는 적절한 데이터베이스 인스턴스가 없는 경우에도 적용됩니다. 이 설정을 사용하면 애플리케이션 코드에서 쿼리 시간 초과를 변경하지 않고도 애플리케이션에 가장 적합한 대기 기간을 설정할 수 있습니다.

이 설정은 RDS 콘솔의 연결 차용 제한 시간(Connection borrow timeout) 필드나 AWS CLI 또는 API의 DBProxyTargetGroupConnectionBorrowTimeout 설정으로 표시됩니다. RDS 콘솔에서 연결 차용 제한 시간(Connection borrow timeout) 필드의 값을 변경하는 방법을 알아보려면 AWS Management Console 섹션을 참조하세요. ConnectionBorrowTimeout 설정의 값을 변경하는 방법을 알아보려면 CLI 명령 modify-db-proxy-target-group 또는 API 작업 ModifyDBProxyTargetGroup을 참조하세요.

클라이언트 및 데이터베이스 연결

애플리케이션에서 RDS 프록시로의 연결을 클라이언트 연결이라고 합니다. 프록시에서 데이터베이스로의 연결은 데이터베이스 연결입니다. RDS 프록시를 사용하는 경우 데이터베이스 연결은 RDS 프록시 내에서 관리되는 반면 클라이언트 연결은 프록시에서 종료됩니다.

애플리케이션 측 연결 풀링은 애플리케이션과 RDS 프록시 간의 반복적인 연결 설정을 줄이는 이점을 제공할 수 있습니다.

애플리케이션 측 연결 풀을 구현하기 전에 다음과 같은 구성 측면을 고려하세요.

  • 클라이언트 연결 최대 수명: RDS 프록시는 클라이언트 연결의 최대 수명을 24시간으로 제한합니다. 이 값은 구성할 수 없습니다. 예상치 못한 클라이언트 연결 끊김을 방지하려면 최대 연결 수명을 24시간 미만으로 설정하여 풀을 구성하세요.

  • 클라이언트 연결 유휴 제한 시간: RDS 프록시는 클라이언트 연결에 최대 유휴 시간을 적용합니다. 예상치 못한 연결 끊김을 방지하려면 RDS 프록시의 클라이언트 연결 유휴 제한 시간 설정보다 낮은 값으로 풀의 유휴 연결 제한 시간을 구성하세요.

애플리케이션 측 연결 풀에 구성된 최대 클라이언트 연결 수를 RDS 프록시의 max_connections 설정으로 제한할 필요는 없습니다.

클라이언트 연결 풀링을 사용하면 클라이언트 연결 수명이 길어집니다. 연결이 고정되는 경우 클라이언트 연결을 풀링하면 멀티플렉싱 효율성이 저하될 수 있습니다. 고정되어 있지만 애플리케이션 측 연결 풀에서 유휴 상태인 클라이언트 연결은 데이터베이스 연결을 계속 유지하고 다른 클라이언트 연결에서 데이터베이스 연결을 재사용하지 못하게 합니다. 프록시 로그를 검토하여 연결 고정이 발생하는지 확인하세요.

참고

RDS 프록시는 더 이상 사용되지 않을 경우 24시간 후에 데이터베이스 연결을 닫습니다. 프록시는 최대 유휴 연결 설정 값에 관계없이 이 작업을 수행합니다.