[AWS] Elastic Cache Eviction 정책 :: 행복한 프로그래머

AWS
posted by 쁘로그램어 2019. 11. 1. 10:42

Elastic Cache(클러스터 활성화) 모드에서 데이터를 저장하는 일부 데이터가 누락하는 현상이 발생했다.


데이터가 누락하는 원인을 분석해보면,

Elastic Cache의 노드 타입이 cache.m4.xlarge이면 메모리는 14.28G이다.

메모리를 다 쓰게되면 eviction 정책에 따라 자동으로 데이터가 삭제되기 때문이다.

(캐시 메모리 사용 제한에 도달 할 때 캐시 엔진은 새로운 쓰기위한 공간을 확보하기 위해 항목을 제거 할 수있다.)


# 예약된 메모리

예약된 메모리는 비데이터 사용을 위해 구분된 메모리입니다. 

백업 또는 장애 조치를 수행할 때 클러스터의 데이터가 .rdb 파일에 작성되는 동안 Redis에서는 사용 가능한 메모리를 사용하여 클러스터에 쓰기 작업을 기록합니다.


# 예약된 메모리를 관리하기 위한 파라미터

기본 파라미터 그룹을 사용하여 Redis 클러스터 또는 복제 그룹을 생성할 때 메모리 관리 파라미터는 reserved-memory-percent입니다. 

이 경우 노드 maxmemory 값의 25%가 비데이터 용도로 예약됩니다.


따라서 cache.m4.xlarge이면 메모리는 14.28G이지만,

25%(약 3.6G)가 비데이터 용도로 예약되므로 실제로는 약 10.7G만 사용가능하다.


redis-cli에서 아래 명령으로 maxmemory 확인이 가능하다.

$ redis-cli -h {REDIS_ENDPOINT} -c info | grep maxmemory

maxmemory:11496376320

maxmemory_human:10.71G

maxmemory_policy:volatile-lru          ---> 최대 메모리 사용량에 도달했을 때 키에 대한 제거 정책


# Eviction Policy

noeviction : 메모리 제한에 도달하고 클라이언트가 사용할 메모리를 더 많이 만들 수있는 명령 (대부분의 쓰기 명령이지만 DEL 및 몇 가지 예외) 을 실행하려고하면 오류를 반환합니다 .

allkeys-lru : 추가 된 새 데이터를위한 공간을 확보하기 위해 LRU (최근에 덜 사용 된) 키를 먼저 제거하여 키를 제거합니다.

volatile-lru : 추가 된 새 데이터를위한 공간을 확보하기 위해 LRU (최근에 덜 사용 된) 키를 먼저 제거하지만 만료가 설정된 키 중 하나만 제거하여 키를 제거합니다 .

allkeys-random : 추가 된 새 데이터를위한 공간을 만들기 위해 무작위로 키를 제거합니다.

volatile-random : 추가 된 새 데이터를위한 공간을 만들기 위해 무작위로 키를 제거하지만 만료가 설정된 키만 제거합니다 .

volatile-ttl : 만료가 설정된 키를 제거하고 새로운 데이터를 추가 할 공간을 확보하기 위해 TTL (짧은 사용 시간)이있는 키를 먼저 제거합니다.


# Eviction 통계 모니터링

$ redis-cli -h {REDIS_ENDPOINT} -c info

maxmemory_policy:volatile-lru

used_memory_peak_human:10.73G

maxmemory_human:10.71G

evicted_keys:9801898                   --> 제거된 키의 개수


Cloud Watch의 경우 Evictions(Count)로 조회 가능하다.


# 참고사이트

https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/mem-ug/CacheMetrics.Memcached.html

https://redis.io/topics/lru-cache

https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/red-ug/redis-memory-management.html



'AWS' 카테고리의 다른 글

아마존 AWS 가입 및 EC2 생성  (0) 2018.05.15