이 문서에서는 Azure Managed Redis에서 발생할 수 있는 실제 또는 인식된 데이터 손실을 진단하는 방법을 설명합니다.
비고
이 가이드에 나오는 문제 해결 단계 중 몇 가지는 Redis 명령을 실행하고 다양한 성능 메트릭을 모니터링하는 것을 포함합니다. 자세한 내용 및 지침은 관련 콘텐츠의 문서를 참조하세요.
키 부분 손실
Azure Managed Redis는 메모리에 저장된 후 키를 임의로 삭제하지 않습니다. 그러나 만료 정책, 제거 정책 및 명시적 키 삭제 명령에 대한 응답으로 키를 제거합니다. CLI를 통해 이러한 명령을 실행할 수 있습니다.
Azure Managed Redis 인스턴스의 주 노드에 기록된 키도 복제본에서 즉시 사용할 수 없습니다. 데이터는 비동기 및 비중단 방식으로 기본에서 복제본으로 복제됩니다.
키가 캐시에서 사라진 경우 다음과 같은 가능한 원인을 확인합니다.
원인 | 설명 |
---|---|
키 만료 | 키에 설정된 시간 제한 때문에 키가 제거됩니다. |
키 제거 | 메모리가 부족하면 키가 제거됩니다. |
키 삭제 | 키는 명시적 delete 명령으로 제거됩니다. |
비동기 복제 | 데이터 복제 지연 때문에 복제본에서 키를 사용할 수 없습니다. |
키 만료
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.io 웹 사이트에서는 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 데이터 지속성 및 지역 복제를 사용하여 이러한 인프라 오류로부터 데이터 보호를 개선하는 것이 좋습니다.