이 문서에서는 Azure Managed Redis에서 발생할 수 있는 실제 또는 인식된 데이터 손실을 진단하는 방법을 설명합니다.
비고
이 가이드의 일부 문제 해결 단계에는 Redis 명령을 실행하고 성능 메트릭을 모니터링하는 지침이 포함되어 있습니다. 자세한 내용은 관련 콘텐츠의 문서를 참조하세요.
키 부분 손실
Azure Managed Redis는 키를 메모리에 저장한 후 임의로 삭제하지 않습니다. 만료 정책, 제거 정책 또는 명시적 키 삭제 명령으로 인해 키를 제거합니다. CLI를 사용하여 이러한 명령을 실행합니다. Azure Managed Redis 인스턴스의 주 노드에 기록된 키는 복제본에서 바로 사용할 수 없습니다. 데이터는 주 데이터베이스에서 복제본으로 비동기적으로 그리고 차단 해제 방식으로 복제됩니다.
캐시에서 키가 사라지면 다음과 같은 가능한 원인을 확인합니다.
원인 | 설명 |
---|---|
키 만료 | 키가 설정된 시간 제한으로 인해 키가 제거됩니다. |
키 제거 | 메모리가 부족하면 키가 제거됩니다. |
키 삭제 | 클라이언트는 명시적 삭제 명령을 실행하여 키를 제거합니다. |
비동기 복제 | 데이터 복제 지연으로 인해 복제본에서 키를 사용할 수 없습니다. |
키 만료
Azure Managed Redis는 해당 키에 대한 제한 시간이 지나면 키를 자동으로 제거합니다. Redis 키 만료에 대한 자세한 내용은 EXPIRE 명령 설명서를 참조하세요. SET, SETEX, GETSET 및 기타 *STORE 명령을 사용하여 시간 제한 값을 설정할 수도 있습니다.
만료된 키 수를 확인하려면 INFO 명령을 사용합니다.
Stats
섹션에는 만료된 키의 총 수가 표시됩니다. 이 섹션에서는 Keyspace
시간 제한이 있는 키 수와 평균 시간 제한 값에 대한 자세한 정보를 제공합니다.
# Stats
expired_keys:46583
# Keyspace
db0:keys=3450,expires=2,avg_ttl=91861015336
캐시에 대한 진단 메트릭을 확인하여 키가 누락된 시점과 제거된 키의 급증 간에 상관 관계가 있는지 확인합니다.
키 제거
Azure Managed Redis는 데이터를 저장하기 위해 메모리 공간이 필요합니다. 필요한 경우 메모리를 확보하는 키를 제거합니다. INFO 명령의 used_memory 또는 used_memory_rss 값이 구성된 최대값 설정에 접근하면 Azure Managed Redis는 캐시 정책에 따라 메모리에서 키를 제거하기 시작합니다.
INFO 명령을 사용하여 제거된 키 수를 모니터링합니다.
# Stats
evicted_keys:13224
키 삭제
Redis 클라이언트는 DEL 또는 HDEL 명령을 실행하여 Azure Managed 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 Managed Redis에서 고가용성을 사용하도록 설정하면 서비스는 주 노드와 하나 이상의 복제본을 만듭니다. 시스템은 백그라운드 프로세스를 사용하여 주 복제본에서 복제본으로 데이터를 비동기적으로 복사합니다. 자세한 내용은 Redis 복제 설명서를 참조하세요.
복제는 즉시 수행되지 않으므로 클라이언트가 Redis에 자주 쓰는 경우 부분적인 데이터 손실이 발생할 수 있습니다. 예를 들어 클라이언트가 키를 작성한 후 주 노드가 실패하지만 백그라운드 프로세스에서 키를 복제하기 전에 복제본이 새 주 노드가 되면 키가 손실됩니다.
키의 대부분 또는 전부 손실
캐시에서 대부분 또는 모든 키가 사라지면 다음과 같은 가능한 원인을 확인합니다.
원인 | 설명 |
---|---|
키 플러시 | 누군가가 키를 수동으로 제거했습니다. |
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
Redis 인스턴스 오류
Redis는 메모리 내 데이터 저장소입니다. 데이터는 Redis 캐시를 호스트하는 물리적 또는 가상 머신(VM)에 유지됩니다. Azure Managed Redis 캐시는 기본적으로 영역 복원력 캐시를 제공하여 데이터 손실에 대해 높은 복원력을 제공합니다. 이 캐시의 주 분할된 데이터베이스가 실패하면 복제본 분할된 데이터베이스가 자동으로 인계되어 데이터를 제공합니다. 이러한 VM은 오류 및 업데이트에 대한 별도의 도메인에 있으므로 둘 다 동시에 사용할 수 없게 될 가능성을 최소화합니다. 주요 데이터 센터 중단이 발생하는 경우 VM은 계속 함께 가동 중지할 수 있습니다. 이러한 드문 경우에서는 데이터가 손실됩니다.
Redis 데이터 지속성 및 지역 복제를 사용하여 이러한 인프라 오류로부터 데이터를 더 잘 보호합니다.