Amazon Keyspaces의 ReadTimeout 및 WriteTimeout 예외 문제를 해결하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Keyspaces(Apache Cassandra용)의 타임아웃 예외 문제를 해결하고 싶습니다.

해결 방법

여러 노드에서 클러스터를 실행하도록 설계된 Apache Cassandra와 달리 Amazon Keyspaces는 서버리스입니다. Apache Cassandra에는 용량과 같은 서버리스 기능과 관련된 예외가 없습니다. 대부분의 Apache Cassandra 드라이버 구현은 Apache Cassandra에서 사용할 수 있는 오류만 처리합니다. 따라서 Amazon Keyspaces는 호환성을 유지하기 위해 동일한 오류 코드를 사용해야 합니다.

연결 문제 해결에 대한 자세한 내용은 Amazon Keyspaces의 연결 문제 해결을 참조하세요.

Keyspaces의 시간 초과 문제를 해결하려면 Amazon CloudWatch 모니터링을 사용하세요. 테이블 지표를 보려면 Amazon Keyspaces 콘솔에서 그래프를 사용할 수 있습니다. 테이블을 선택한 다음 모니터 탭을 선택합니다. CloudWatch를 사용하여 사용 가능한 Apache Cassandra 지표를 모니터링하는 방법에 대한 자세한 내용은 Amazon Keyspaces 지표 및 차원을 참조하세요.

또한 GitHub 웹 사이트의 AWS CloudFormation 템플릿을 사용하여 CloudWatch 대시보드를 배포하여 keyspaces 또는 개별 테이블을 모니터링할 수 있습니다. 다음 지표를 모니터링할 수 있습니다.

  • PerConnectionRequestRateExceeded
  • StoragePartitionThroughputCapacityExceeded
  • ReadThrottleEvents and WriteThrottleEvents

PerConnectionRequestRateExceeded

PerConnectionRequestRateExceeded 지표는 연결당 요청 속도 할당량을 초과하는 Amazon Keyspace 요청을 측정합니다. 피어에 대한 단일 연결은 초당 최대 3,000개의 CQL 요청을 지원할 수 있습니다. 자세한 내용은 아마존 Amazon Keyspaces (아파치 카산드라용)을 참조하세요. 퍼블릭 엔드포인트에 연결하면 9개의 피어를 연결할 수 있습니다. 따라서 기본 제한은 초당 27,000개의 CQL 요청이며 기본 드라이버 설정은 피어당 하나의 연결입니다.

Amazon Virtual Private Cloud(VPC)엔드포인트를 사용할 때 피어 수는 엔드포인트에 인터페이스가 있는 가용 영역의 수에 따라 달라집니다. 예를 들어, ap-southeast-2에는 3개의 가용 영역이 포함됩니다. 피어당 하나의 연결이 구성된 이 지역에서는 애플리케이션이 초당 9,000건의 CQL 요청으로 제한됩니다. 초당 허용되는 CQL 요청 수를 늘리려면 피어당 만들어지는 연결 수를 늘립니다. 예를 들어 퍼블릭 엔드포인트를 사용하여 연결 수를 피어당 2개로 설정하면 9 * 3,000 * 2 = 54,000개의 CQL 요청이 제공됩니다.

Datastax Java 드라이버 v3을 사용하는 경우 클러스터에 다음과 같은 풀링 옵션이 포함되어 있는지 확인합니다.

Cluster cluster =Cluster.builder()
        .addContactPoint("cassandra.ap-southeast-2.amazonaws.com")
        .withPort(9142)
        ...
        .withPoolingOptions(new PoolingOptions().setConnectionsPerHost(HostDistance.LOCAL,9,9))
        .build();

Datastax Java 드라이버 v4를 사용하는 경우 application.conf에 다음이 포함되어 있는지 확인합니다.

datastax-java-driver {  
    advanced.connection {    
        pool {      
            local {        
                size = 9      
            }    
        }  
    }
}

Amazon Keyspaces에서 Python 드라이버와의 피어당 연결 수를 늘리는 데 필요한 v3 또는 v4 프로토콜은 사용할 수 없습니다. Datastax Java v4 드라이버를 사용하는 경우 hostname-validation을 해제합니다. 이 기능을 켜면 드라이버가 하나의 피어에만 연결되며 초당 총 요청 수를 엄격하게 제한합니다.

application.conf 파일에는 다음이 포함되어야 합니다.

datastax-java-driver {  
    advanced {    
        ssl-engine-factory {      
            class = DefaultSslEngineFactory      
            hostname-validation = false    
        }  
    }
}

Amazon VPC 엔드포인트를 통해 연결하는 경우, Amazon Keyspace가 VPC 및 엔드포인트 정보를 쿼리할 수 있도록 AWS ID 및 액세스 관리(IAM) 정책에 권한을 추가합니다. 이 정보는 system.peers 테이블을 채우는 데 필요합니다. IAM 정책에는 다음 권한이 있어야 합니다.

{
        "Version": "2012-10-17",
        "Statement": [{
        "Sid": "ListVPCEndpoints",
        "Effect": "Allow",
        "Action": ["ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcEndpoints"],
        "Resource": "*"
        }]
}

IAM 정책에 이러한 권한이 없는 경우 드라이버는 초당 총 요청 수를 제한하는 하나의 호스트에만 연결할 수 있습니다.

StoragePartitionThroughputCapacityExceeded

StoragePartitionThroughputCapacityExceeded 지표는 파티션의 3000 RCU/RRU 및 1000 WCU/WRU 제한을 초과하는 요청을 측정합니다. 즉, 현재 트래픽 패턴은 여러 파티션에 균등하게 분산되는 대신 하나 또는 몇 개의 파티션에 초점을 맞춥니다. 이 문제를 해결하려면 트래픽 패턴을 변경합니다. 자세한 내용은 Amazon Keyspaces(Apache Cassandra용)의 데이터 모델링을 참조하세요.

ReadThrottleEvents and WriteThrottleEvents

ReadThrottleEvents와 ** WriteThrottleEvents** 지표는 테이블 또는 AWS 계정의 가용 용량을 초과하는 요청을 측정합니다. 단 PerConnectionRequestRateExceeded로 인해 발생하는 모든 스로틀도 지표에 포함된다는 점에 유의합니다.

프로비저닝된 용량을 사용하는 경우 구성된 읽기 또는 쓰기 프로비저닝된 용량을 늘립니다. 또는 AWS Auto Scaling을 사용합니다. AWS Auto Scaling을 사용하는 경우 최대 가용 용량을 늘립니다.. 더 높은 확장이 가능하도록 계정 테이블 또는 AWS 리전 제한을 늘려야 할 수도 있습니다. Auto Scaling에서 처리할 수 없는 트래픽 스파이크가 발생하는 경우에는 온디맨드 용량 예약을 대신 사용합니다.

AllNodesFailedException 또는 NoHostAvailable 오류

읽기 또는 쓰기 시간 초과와 같은 문제가 발생하면 Apache Cassandra 드라이버는 기본적으로 다른 피어에 연결을 시도합니다. Apache Cassandra 클러스터의 경우 문제를 일으키는 단일 노드를 완화하는 데 도움이 될 수 있습니다. 하지만 Amazon Keyspace의 경우 새 노드에서 동일한 문제가 발생할 수 있습니다. 그러면 모든 피어가 소진될 때까지 Amazon Keyspaces가 다음 피어로 이동할 수 있습니다. 이 경우 AllNodesFailedException 또는 NoHostAvailable 오류 메시지가 표시됩니다.

드라이버가 호스트와 함께 유지되도록 구성하고 지수 백오프 및 재시도 메커니즘을 구현하는 것이 가장 좋습니다. 구성 예제는 GitHub 웹 사이트에서 amazon-keyspaces-java-driver-helpers를 참조하세요.

AWS 공식
AWS 공식업데이트됨 10달 전