내용으로 건너뛰기

ElastiCache for Valkey 또는 ElastiCache for Redis OSS 자체 관리형 클러스터의 샤드 간에 메모리 불균형이 발생하는 이유는 무엇입니까?

4분 분량
0

클러스터 모드가 사용되는 Amazon ElastiCache for Valkey 또는 Amazon ElastiCache for Redis 자체 관리형 클러스터에서 샤드 전체의 메모리 사용량이 고르지 않습니다.

간략한 설명

기본적으로 클러스터 모드가 사용되는 Valkey 및 Redis OSS 클러스터는 클러스터의 샤드 전체에 캐시 키 공간을 균일하게 분배하려고 합니다. 자세한 내용은 Amazon ElastiCache for Redis에서 클러스터 모드를 사용하는 방법을 참조하십시오.

다음과 같은 이유로 인해 메모리 사용량 불균형이 발생하여 일부 샤드가 다른 샤드보다 더 많은 데이터를 저장하게 될 수 있습니다.

  • 불균일한 키 분배
  • 너무 큰 키
  • “핫” 키 또는 샤드
  • 불균일한 해시 태그 사용
  • 클라이언트 출력 버퍼 증가

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

불균일한 키 분배

샤드 전체에 해시 슬롯을 균일하게 분배하지 않으면 일부 샤드가 다른 샤드보다 더 많은 키를 처리할 수 있습니다. 이 문제를 해결하려면 클러스터 전체에서 슬롯을 재조정하십시오.

참고: 슬롯 재조정 옵션은 사용 가능한 샤드 간에 16384 해시 슬롯을 균일하게 분배하려고 합니다. 이 옵션은 각 샤드의 메모리 사용량 또는 데이터 볼륨을 기준으로 재조정하지 않습니다.

일부 키가 너무 큼

일부 키가 다른 키보다 훨씬 크면 해당 키를 호스팅하는 샤드의 메모리 사용량이 더 많을 수 있습니다. 이 문제를 해결하려면 큰 키를 작은 키-값 쌍으로 나눌 수 있습니다. 또는 불필요하게 큰 키를 제거하여 공간을 확보할 수 있습니다.

데이터세트에 큰 키가 있는지 스캔하려면 valkey-cli --bigkeys 또는 valkey-cli --memkeys 명령을 사용합니다. 자세한 내용은 Valkey 웹사이트에서 큰 키 스캔하기를 참조하십시오.

효율적인 키 명명 전략, 데이터 구조 및 압축 기술을 사용하여 키의 메모리 사용량을 최적화하는 것이 좋습니다.

핫 키 또는 샤드

일부 키에 다른 키보다 자주 액세스하는 경우 부하가 고르지 않게 분산되어 제공 호스트의 메모리 사용률이 저하됩니다. 자주 액세스하는 키를 핫 키 또는 핫 샤드라고 합니다.

핫 키를 찾으려면 valkey-cli --hotkeys 명령을 실행하여 키 액세스 패턴을 검토하고 키를 식별합니다. 경우에 따라 단일 핫 캐시 키로 인해 캐시 노드에 과부하를 일으키는 핫 스팟이 생성될 수 있습니다. 핫 스팟은 노드의 CPU, 메모리 및 네트워크 리소스에 영향을 미칠 수 있습니다.

참고: hotkeys 명령은 maxmemory-policy*lfu로 설정된 경우에만 작동합니다.

이 문제를 해결하려면 다음 작업을 수행하십시오.

  • 클러스터를 수직으로 스케일링하고 더 많은 리소스를 제공합니다.
  • 읽기 트래픽을 읽기 전용 복제본으로 분산합니다. 자세한 내용은 Valkey 웹사이트의 READONLY를 참조하십시오.
  • 클라이언트 애플리케이션을 수정하여 키에 대한 쓰기 용량을 줄이십시오.

불균일한 해시 태그 사용

클러스터 모드가 사용되는 환경에서는 Valkey 클러스터에서 다중 키 작업을 구현하려면 해시 태그를 사용해야 합니다. 해시 태그 사용이 증가하면 일부 해시 슬롯에 다른 슬롯보다 더 많은 키가 저장되어 샤드 간에 메모리 불균형이 발생합니다.

이 문제를 해결하려면 키 공간 및 해시 태그 사용을 검토하고 데이터를 더 많은 해시 슬롯에 분산시키십시오. 자세한 내용은 Valkey 웹사이트의 클러스터 사양에서 해시 태그 섹션을 참조하십시오.

클라이언트 출력 버퍼 증가

클라이언트의 명령이 Valkey에서 클라이언트에 보낼 수 있는 것보다 더 빠르게 출력을 생성하면 클라이언트 출력 버퍼가 증가해 더 많은 메모리를 사용합니다. 자세한 내용은 Valkey 웹사이트의 출력 버퍼 제한을 참조하십시오.

버퍼 문제의 원인을 확인하려면 영향을 받는 노드에 연결하고 CLIENT LIST 명령을 실행하여 버퍼 공간을 사용하는 클라이언트를 식별합니다. 자세한 내용은 Valkey 웹사이트의 CLIENT LIST를 참조하십시오.

높은 클라이언트 출력 버퍼의 원인을 확인하려면 출력에서 다음 주요 파라미터를 검토합니다.

  • obl: 출력 버퍼 길이
  • omem: 출력 버퍼 메모리 사용량
  • tot-mem: 클라이언트가 사용한 총 메모리

Amazon CloudWatch에서 DatabaseMemoryUsageCountedForEvictPercentageDatabaseMemoryUsagePercentage 지표를 검토할 수도 있습니다. 두 지표 간의 메모리 사용량에 큰 차이가 있는 경우 메모리 사용량의 원인은 클라이언트 출력 버퍼입니다.

참고: DatabaseMemoryUsagePercentage 지표에는 연결 오버헤드 및 클라이언트 출력 버퍼 메모리 사용량도 포함됩니다.

모범 사례

메모리 불균형 문제를 줄이려면 다음 모범 사례를 활용하십시오.

TTL 설정 구성

키에 적절한 Time to Live(TTL) 값을 설정합니다. 적절한 TTL 값을 구성하면 Valkey 노드는 TTL이 부족한 키를 자동으로 제거하고 메모리 사용을 최적화합니다. 자세한 내용은 Redis 웹사이트의 TTL를 참조하십시오.

메모리 지표 검토

샤드 전체에 걸쳐 다음과 같은 주요 메모리 지표를 정기적으로 검토하여 불균형을 조기에 파악하고 사전에 조치를 취하는 것이 좋습니다.

  • DatabaseMemoryUsagePercentage: 노드의 전체 메모리 사용률을 추적합니다.
  • DatabaseMemoryUsageCountedForEvictPercentage: 높은 버퍼 및 오버헤드 사용량을 감지하려면 DatabaseMemoryUsagePercentage와 비교합니다.
  • BytesUsedForCache: 캐시된 데이터가 사용하는 실제 메모리를 모니터링합니다.
  • CurrItems: 각 샤드에 저장된 항목의 수를 추적합니다.
  • SwapUsage: 호스트에서 사용되는 스왑의 양을 추적합니다.
    참고: ElastiCache에 어느 정도의 SwapUsage가 있는 것이 일반적입니다. 정상적인 사용으로는 지연 시간 문제가 발생하지 않습니다. SwapUsage가 300MB를 초과하는 경우 메모리 부족 여부를 확인하십시오. 자세한 내용은 예약 메모리가 얼마나 필요합니까?를 참조하십시오.

노드 업그레이드

큰 키와 잦은 액세스 패턴을 처리하려면 일시적으로 ElastiCache 클러스터를 스케일 업하여 추가 CPU 및 메모리 리소스를 제공하십시오.

관련 정보

ElastiCache for Redis에서 자체 설계한 클러스터의 메모리 사용량을 확인하고 높은 메모리 사용량을 제어하기 위한 모범 사례를 구현하려면 어떻게 해야 합니까?

Valkey 웹사이트의 키 분배 모델

Amazon ElastiCache 업데이트 - Redis 클러스터의 온라인 크기 조정

ElastiCache 인스턴스의 스왑 활동 증가를 해결하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠