Řešení potíží se ztrátou dat ve službě Azure Cache for Redis
Tento článek popisuje, jak diagnostikovat skutečné nebo vnímané ztráty dat, ke kterým může dojít Azure Cache for Redis.
Poznámka
Součástí několika kroků pro řešení potíží v tomto průvodci jsou pokyny ke spuštění příkazů Redis a monitorování různých metrik výkonu. Další informace a pokyny najdete v článcích v části Další informace.
Částečná ztráta klíčů
Azure Cache for Redis se klíče po uložení do paměti náhodně neodstraňovat. Klíče se ale odeberou v reakci na zásady vypršení platnosti nebo vypuštění a explicitní příkazy pro odstranění klíče. Klíče, které byly zapsány do primárního uzlu v instanci Premium nebo standardu Azure Cache for Redis, nemusí být na replice ihned dostupné. Data se replikují z primární repliky do repliky asynchronním a neblokujícím způsobem.
Pokud zjistíte, že klíče z mezipaměti zmizely, zkontrolujte následující možné příčiny:
| Příčina | Description |
|---|---|
| Vypršení platnosti klíče | Klíče se odebraly kvůli nastaveným časovým limitům. |
| Vycházení klíče | Klíče se odebraly při paměťovém tlaku. |
| Odstranění klíče | Klíče se odebraly explicitními příkazy pro odstranění. |
| Asynchronní replikace | Klíče nejsou v replice k dispozici kvůli zpoždění replikace dat. |
Vypršení platnosti klíče
Azure Cache for Redis klíč automaticky odebere, pokud je klíč přiřazený k časovému limitu a tento časový limit uplynul. Další informace o vypršení platnosti klíče Redis najdete v dokumentaci k příkazům EXPIRE. Hodnoty časového limitu je také možné nastavit pomocí příkazů SET, SETEX, GETSETa * dalších příkazů STORE.
Pokud chcete získat statistiku o tom, kolik klíčů vypršelo, použijte příkaz INFO. V Stats části se zobrazuje celkový počet klíčů, jejichž platnost vypršela. Oddíl obsahuje další informace o počtu klíčů s časovými limity a Keyspace průměrnou hodnotou časového limitu.
# Stats
expired_keys:46583
# Keyspace
db0:keys=3450,expires=2,avg_ttl=91861015336
Můžete se také podívat na diagnostické metriky vaší mezipaměti a zjistit, jestli existuje korelace mezi chybějícím klíčem a špičkou v klíčích s vypršenou platností. Informace o použití oznámení prostorů klíčů najdete v dodatku k ladění chyb v prostoru klíčů Redis nebo v tématu MONITOROVÁNÍ k ladění těchto typů problémů.
Vycházení klíče
Azure Cache for Redis k ukládání dat vyžaduje paměťový prostor. V případě potřeby vyžádá klíče, aby se dostupná paměť uchytla. Když se used_memory nebo used_memory_rss v příkazu INFO přiblíží nakonfigurovanému nastavení maxmemory, Azure Cache for Redis začne vyřazení klíčů z paměti na základě zásad mezipaměti.
Počet vyřazených klíčů můžete monitorovat pomocí příkazu INFO:
# Stats
evicted_keys:13224
Můžete se také podívat na diagnostické metriky vaší mezipaměti a zjistit, jestli existuje korelace mezi chybějícím klíčem a špičkou vyřazených klíčů. Informace o použití oznámení prostorů klíčů najdete v dodatku k ladění chyb v prostoru klíčů Redis nebo v tématu MONITOROVÁNÍ k ladění těchto typů problémů.
Odstranění klíče
Klienti Redis mohou pomocí příkazu DEL nebo HDEL explicitně odebrat klíče z Azure Cache for Redis. Počet operací odstranění můžete sledovat pomocí příkazu INFO. Pokud byly volány příkazy DEL nebo HDEL, budou uvedené v Commandstats části .
# Commandstats
cmdstat_del:calls=2,usec=90,usec_per_call=45.00
cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00
Asynchronní replikace
Každá Azure Cache for Redis ve vrstvě Standard nebo Premium je nakonfigurovaná s primárním uzlem a alespoň jednou replikou. Data se kopírují z primární repliky do repliky asynchronně pomocí procesu na pozadí. Tento redis.io popisuje, jak replikace dat Redis funguje obecně. Ve scénářích, kdy klienti zapisují do Redisu často, může dojít k částečné ztrátě dat, protože tato replikace není zaručena okamžitě. Pokud například primární databáze po tom, co do něj klient zapíše klíč, ale před tím, než proces na pozadí bude mít možnost tento klíč odeslat do repliky, ztratí se klíč, když replika převezme jako novou primární repliku.
Hlavní nebo úplná ztráta klíčů
Pokud z mezipaměti zmizela většina klíčů nebo všechny klíče, zkontrolujte následující možné příčiny:
| Příčina | Description |
|---|---|
| Vyprazdnění klíče | Klíče byly ručně vyprázdněny. |
| Nesprávný výběr databáze | Azure Cache for Redis je nastavená na použití jiné než výchozí databáze. |
| Selhání instance Redis | Server Redis není k dispozici. |
Vyprazdnění klíče
Klienti mohou volat příkaz FLUSHDB a odebrat všechny klíče v jedné databázi nebo flushall a odebrat tak všechny klíče ze všech databází v mezipaměti Redis. Pokud chcete zjistit, jestli jsou klíče vyprázdněné, použijte příkaz INFO. Oddíl Commandstats ukazuje, jestli byl volán některý z příkazů FLUSH:
# Commandstats
cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00
cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00
Nesprávný výběr databáze
Azure Cache for Redis používá ve výchozím nastavení databázi db0. Pokud přepnete na jinou databázi (například db1) a pokusíte se z ní číst klíče, Azure Cache for Redis je tam nenajde. Každá databáze je logicky oddělená jednotka a obsahuje jinou datovou sadu. Pomocí příkazu SELECT použijte jiné dostupné databáze a vyhledejte klíče v každé z nich.
Selhání instance Redis
Redis je úložiště dat v paměti. Data se uchovávají na fyzických nebo virtuálních počítačích, které hostí mezipaměť Redis. Instance Azure Cache for Redis na úrovni Basic běží jenom na jednom virtuálním počítači. Pokud je virtuální počítač v pořádku, všechna data, která jste uložili do mezipaměti, se ztratí.
Mezipaměti na úrovních Standard a Premium nabízejí mnohem vyšší odolnost proti ztrátě dat díky použití dvou virtuálních počítače v replikované konfiguraci. Pokud primární uzel v takové mezipaměti selže, převezme uzel repliky automaticky do služby data. Tyto virtuální počítače se kvůli chybám a aktualizacím nacházejí v samostatných doménách, aby se minimalizovala pravděpodobnost, že budou oba počítače nedostupné současně. Pokud ale dojde k závažnému výpadku datacentra, můžou se virtuální počítače i tak pohromadě vypnout. V těchto výjimečných případech se vaše data ztratí.
Zvažte použití trvalosti dat Redis a geografické replikace ke zlepšení ochrany dat proti těmto selháním infrastruktury.