Azure Managed Redis의 데이터 손실 문제 해결(미리 보기)
이 문서에서는 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
캐시에 대한 진단 메트릭을 확인하여 키가 누락된 시간과 만료된 키의 급증 사이에 상관 관계가 있는지 확인할 수도 있습니다. keyspace
알림 또는 MONITOR
를 사용하여 이러한 유형의 문제를 디버그하는 방법에 대한 자세한 내용은 Redis Keyspace 누락 디버깅의 부록을 참조하세요.
키 제거
Azure Managed Redis는 데이터를 저장하기 위해 메모리 공간이 필요합니다. 필요한 경우 사용 가능한 메모리를 확보하기 위해 키를 제거합니다. INFO 명령의 used_memory 또는 used_memory_rss 값이 구성된 최대값 설정에 접근하면 Azure Managed Redis는 캐시 정책에 따라 메모리에서 키를 제거하기 시작합니다.
INFO 명령을 사용하여 제거된 키 수를 모니터링할 수 있습니다.
# Stats
evicted_keys:13224
캐시에 대한 진단 메트릭을 확인하여 키가 누락된 시간과 제거된 키의 급증 사이에 상관 관계가 있는지 확인할 수도 있습니다. Keyspace 알림 또는 MONITOR를 사용하여 이러한 유형의 문제를 디버그하는 방법에 대한 자세한 내용은 Redis Keyspace 누락 디버깅의 부록을 참조하세요.
키 삭제
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 데이터 지속성 및 지역 복제를 사용하여 이러한 인프라 오류로부터 데이터 보호를 개선하는 것이 좋습니다.
추가 정보
이러한 문서에서는 데이터 손실을 방지하는 방법에 대한 자세한 정보를 제공합니다.