이 문서에서는 Azure Cache for Redis에서 발생하는 부분 또는 전체 데이터 손실을 진단하는 방법을 설명합니다.
부분 키 손실
Azure Cache for Redis는 메모리에 저장된 후 키를 임의로 삭제하지 않지만 만료 정책, 제거 정책 및 명시적 키 삭제 명령에 대한 응답으로 키를 제거합니다. 콘솔 또는 Redis CLI를 통해 이러한 명령을 실행할 수 있습니다.
프리미엄 또는 표준 Azure Redis 인스턴스의 주 노드에 기록된 키는 복제본에서 바로 사용할 수 없습니다. 데이터는 비동기 및 비블로킹 방식으로 주 데이터베이스에서 복제본으로 복제됩니다.
캐시에서 일부 키가 사라지는 경우 다음과 같은 가능한 원인을 확인합니다.
원인 | 설명 |
---|---|
키 만료 | 설정된 시간 제한으로 인해 키가 제거되었습니다. |
키 제거 | 메모리 압력으로 키가 제거되었습니다. |
키 삭제 | 명시적 삭제 명령에 의해 키가 제거되었습니다. |
비동기 복제 | 데이터 복제 지연으로 인해 복제본에서 키를 사용할 수 없습니다. |
키 만료
Azure Cache for Redis는 키에 시간 제한이 할당되고 해당 기간이 지나면 키를 자동으로 제거합니다. Redis 키 만료에 대한 자세한 내용은 Redis EXPIRE 명령 설명서를 참조하세요.
SET, SETEX, GETSET 및 기타 명령을 사용하여 시간 *STORE
제한 값을 설정할 수도 있습니다.
만료된 키 수에 대한 통계를 얻으려면 INFO 명령을 사용합니다.
Stats
섹션에는 만료된 키의 총 수가 표시됩니다. 이 섹션에서는 Keyspace
시간 제한과 평균 시간 제한 값이 있는 키 수에 대한 자세한 정보를 제공합니다.
# Stats
expired_keys:46583
# Keyspace
db0:keys=3450,expires=2,avg_ttl=91861015336
키 제거
Azure Cache for Redis는 데이터를 저장하는 데 메모리 공간이 필요하고 필요한 경우 사용 가능한 메모리를 확보하도록 키를 제거합니다.
used_memory
또는 used_memory_rss
값이 구성된 maxmemory
설정에 가까워지면 Azure Redis는 캐시 정책에 따라 메모리에서 키의 삭제를 시작합니다.
INFO 명령을 사용하여 제거된 키 수를 모니터링할 수 있습니다.
# Stats
evicted_keys:13224
키 삭제
Redis 클라이언트는 Redis DEL 또는 HDEL 명령을 실행하여 Azure Redis에서 키를 명시적으로 제거할 수 있습니다.
INFO 명령을 사용하여 삭제 작업의 수를 추적할 수 있습니다.
DEL
또는 HDEL
명령이 호출된 경우, Commandstats
섹션에 나열됩니다.
# Commandstats
cmdstat_del:calls=2,usec=90,usec_per_call=45.00
cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00
비동기 복제
표준 또는 프리미엄 계층 Azure Cache for Redis 인스턴스는 주 노드와 하나 이상의 복제본으로 구성됩니다. 데이터는 백그라운드 프로세스를 통해 기본에서 복제본으로 비동기적으로 복사됩니다.
Redis 웹 사이트의 Redis 복제 는 Redis 데이터 복제가 일반적으로 작동하는 방식을 설명합니다. 클라이언트가 Redis에 자주 쓰는 시나리오의 경우 복제가 즉시 수행되도록 설계되지 않았기 때문에 부분 데이터 손실이 발생할 수 있습니다.
예를 들어 클라이언트가 키를 쓴 후 주 복제본이 다운되지만 백그라운드 프로세스에서 해당 키를 복제본에 보낼 기회가 있기 전에 복제본이 새 주 복제본으로 인수되면 키가 손실됩니다.
전체 키 손실
캐시에서 대부분 또는 모든 키가 사라지는 경우 다음과 같은 가능한 원인을 확인합니다.
원인 | 설명 |
---|---|
키 플러시 | 키를 수동으로 제거했습니다. |
잘못된 데이터베이스 선택 | Azure Redis는 기본이 아닌 데이터베이스를 사용하도록 설정됩니다. |
Redis 인스턴스 오류 | Redis 서버를 사용할 수 없습니다. |
키 플러시
Azure Redis 클라이언트는 Redis FLUSHDB 명령을 호출하여 단일 데이터베이스 또는 FLUSHALL 의 모든 키를 제거하여 Redis 캐시의 모든 데이터베이스에서 모든 키를 제거할 수 있습니다. 키가 플러시되었는지 확인하려면 INFO 명령을 사용하십시오. 이 섹션에서는 Commandstats
두 명령 중 하나가 FLUSH
호출되었는지 여부를 보여 있습니다.
# Commandstats
cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00
cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00
잘못된 데이터베이스 선택
모든 데이터베이스는 논리적으로 분리된 단위이며 다른 데이터 세트를 보유합니다. Azure Cache for Redis는 기본적으로 db0
데이터베이스를 사용합니다. 같은 다른 데이터베이스로 db1
전환하고 해당 데이터베이스에서 키를 읽으려고 하면 Azure Redis에서 키를 찾을 수 없습니다. Redis SELECT 명령을 사용하여 사용 가능한 다른 데이터베이스에서 키를 찾습니다.
Redis 인스턴스 오류
Redis는 Redis 캐시를 호스트하는 물리적 또는 가상 머신(VM)의 메모리에 데이터를 유지합니다. 기본 계층 Azure Cache for Redis 인스턴스는 단일 VM(가상 머신)에서만 실행됩니다. 해당 VM이 중단되면 캐시에 저장한 모든 데이터가 손실됩니다.
표준 및 프리미엄 계층의 캐시는 복제된 구성에서 두 개의 VM을 사용하여 데이터 손실에 대해 더 높은 복원력을 제공합니다. 이러한 캐시의 기본 노드가 실패하면 복제본 노드가 자동으로 데이터를 처리하는 데 사용됩니다.
이러한 VM은 오류 및 업데이트에 대한 별도의 도메인에 위치하여 두 VM을 한 번에 사용할 수 없게 될 가능성을 최소화합니다. 그러나 주요 데이터 센터 중단이 발생하면 두 VM이 모두 중단 될 수 있습니다. 이러한 드문 경우에서는 데이터가 손실됩니다. 데이터 지속성 및 지역 복제를 사용하여 인프라 오류에 대한 데이터 보호를 개선하는 것이 좋습니다.