Felsöka dataförlust i Azure Cache for Redis

Den här artikeln beskriver hur du diagnostiserar faktiska eller upplevda dataförluster som kan uppstå i Azure Cache for Redis.

Kommentar

Flera av felsökningsstegen i den här guiden innehåller instruktioner för att köra Redis-kommandon och övervaka olika prestandamått. Mer information och instruktioner finns i artiklarna i avsnittet Ytterligare information .

Partiell förlust av nycklar

Azure Cache for Redis tar inte bort nycklar slumpmässigt när de har lagrats i minnet. Nycklar tas däremot bort som svar på förfalloprinciper, avlägsningsprinciper och uttryckliga kommandon för nyckelborttagning. Du kan köra dessa kommandon i konsolen eller via CLI.

Nycklar som har skrivits till den primära noden i en Azure Cache for Redis-instans på Premium- eller Standard-nivå kanske inte heller är tillgängliga på en replik direkt. Data replikeras från den primära till repliken på ett asynkront och icke-blockerande sätt.

Om du upptäcker att nycklarna har försvunnit från cacheminnet kontrollerar du följande möjliga orsaker:

Orsak Description
Nyckel förfallodatum Nycklar tas bort på grund av tidsgränser som har angetts för dem.
Nyckelavhysning Nycklar tas bort under minnesbelastning.
Nyckelborttagning Nycklar tas bort med uttryckliga borttagningskommandon.
Asynkron replikering Nycklar är inte tillgängliga på en replik på grund av fördröjningar i datareplikering.

Nyckel förfallodatum

Azure Cache for Redis tar bort en nyckel automatiskt om nyckeln tilldelas en tidsgräns och den perioden har passerat. Mer information om förfallodatum för Redis-nycklar finns i dokumentationen för EXPIRE-kommandot . Tidsgränsvärden kan också anges med hjälp av KOMMANDONa SET, SETEX, GETSET och andra *STORE.

Om du vill få statistik om hur många nycklar som har upphört att gälla använder du KOMMANDOT INFO . Avsnittet Stats visar det totala antalet utgångna nycklar. Avsnittet Keyspace innehåller mer information om antalet nycklar med tidsgränser och det genomsnittliga timeout-värdet.


# Stats

expired_keys:46583

# Keyspace

db0:keys=3450,expires=2,avg_ttl=91861015336

Du kan också titta på diagnostikmått för din cache för att se om det finns en korrelation mellan när nyckeln försvann och en topp i utgångna nycklar. Se tillägget för felsökning av Redis Keyspace Misses för information om hur du använder keyspace meddelanden eller MONITOR för att felsöka dessa typer av problem.

Nyckelavhysning

Azure Cache for Redis kräver minnesutrymme för att lagra data. Den rensar nycklar för att frigöra tillgängligt minne vid behov. När used_memory- eller used_memory_rss-värdena i INFO-kommandot närmar sig den konfigurerade maxmemory-inställningen börjar Azure Cache for Redis ta bort nycklar från minnet baserat på cacheprincip.

Du kan övervaka antalet borttagna nycklar med hjälp av KOMMANDOT INFO :

# Stats

evicted_keys:13224

Du kan också titta på diagnostikmått för cacheminnet för att se om det finns en korrelation mellan när nyckeln försvann och en topp i borttagna nycklar. Mer information om hur du använder keyspace-meddelanden eller MONITOR för att felsöka dessa typer av problem finns i tillägget för felsökning av Redis Keyspace Misses.

Nyckelborttagning

Redis-klienter kan utfärda DEL - eller HDEL-kommandot för att uttryckligen ta bort nycklar från Azure Cache for Redis. Du kan spåra antalet borttagningsåtgärder med hjälp av KOMMANDOT INFO . Om DEL - eller HDEL-kommandon har anropats visas de i avsnittet Commandstats .

# Commandstats

cmdstat_del:calls=2,usec=90,usec_per_call=45.00

cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00

Asynkron replikering

Alla Azure Cache for Redis-instanser på Standard- eller Premium-nivån konfigureras med en primär nod och minst en replik. Data kopieras från den primära till en replik asynkront med hjälp av en bakgrundsprocess. På redis.io webbplats beskrivs hur Redis-datareplikering fungerar i allmänhet. För scenarier där klienter skriver till Redis ofta kan partiell dataförlust inträffa eftersom replikeringen inte garanteras vara omedelbar. Om primärt till exempel går ned efter att en klient har skrivit en nyckel till den, men innan bakgrundsprocessen har en chans att skicka nyckeln till repliken, går nyckeln förlorad när repliken tar över som ny primär.

Större eller fullständig förlust av nycklar

Om de flesta eller alla nycklar har försvunnit från cacheminnet kontrollerar du följande möjliga orsaker:

Orsak Description
Nyckelspolning Nycklarna har rensats manuellt.
Felaktig databasmarkering Azure Cache for Redis är inställt på att använda en databas som inte är standard.
Redis-instansfel Redis-servern är inte tillgänglig.

Nyckelspolning

Klienter kan anropa KOMMANDOT FLUSHDB för att ta bort alla nycklar i en enskild databas eller FLUSHALL för att ta bort alla nycklar från alla databaser i en Redis-cache. Om du vill ta reda på om nycklarna har tömts använder du kommandot INFO . Avsnittet Commandstats visar om något av FLUSH kommandona har anropats:

# Commandstats

cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00

cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00

Felaktig databasmarkering

Azure Cache for Redis använder db0 databasen som standard. Om du växlar till en annan databas (till exempel db1) och försöker läsa nycklar från den hittar inte Azure Cache for Redis dem där. Varje databas är en logiskt separat enhet och innehåller en annan datauppsättning. Använd kommandot SELECT för att använda andra tillgängliga databaser och leta efter nycklar i var och en av dem.

Redis-instansfel

Redis är ett minnesinternt datalager. Data sparas på de fysiska eller virtuella datorer som är värdar för Redis-cachen. En Azure Cache for Redis-instans på Basic-nivån körs bara på en enda virtuell dator (VM). Om den virtuella datorn är nere går alla data som du har lagrat i cacheminnet förlorade.

Cacheminnen på standard- och Premium-nivåerna ger mycket högre återhämtning mot dataförlust med hjälp av två virtuella datorer i en replikerad konfiguration. När den primära noden i en sådan cache misslyckas tar repliknoden över för att tillhandahålla data automatiskt. Dessa virtuella datorer finns på separata domäner för fel och uppdateringar, för att minimera risken för att båda blir otillgängliga samtidigt. Om ett större avbrott inträffar i ett datacenter kan dock de virtuella datorerna fortfarande tas ur funktion tillsammans. Dina data går förlorade i dessa sällsynta fall.

Överväg att använda Redis-datapersistence och geo-replikering för att förbättra skyddet av dina data mot dessa infrastrukturfel.

Ytterligare information

De här artiklarna innehåller mer information om hur du undviker dataförlust: