Incidentu reaģēšana

Redis "CLUSTERDOWN The cluster is down": ko tas nozīmē un kā atjaunot darbību

Viena bojāta šķemba (shard) pēc dizaina var apturēt visu rakstīšanu Redis Cluster. Lūk, kā noteikt, kura no trim CLUSTERDOWN kļūdām jums ir, kā atgriezt klasteri darbā un kā izvairīties no nākamās.

· 11 min lasīšanai · AG Data komanda

CLUSTERDOWN The cluster is down ir atbilde, ko Redis Cluster mezgls sniedz, kad tas nolēmis, ka klasteris nav pietiekami vesels, lai apkalpotu vaicājumus. Tā nav kļūda kodā un nav viena mezgla nepareiza uzvedība: klasteris aizsargā jūsu datus. Lai to salabotu, jāzina, kurš no diviem nosacījumiem to izraisīja, un tam pietiek ar vienu komandu.

Redis sadala atslēgu telpu 16384 hash slotos, un katram slotam jāpieder sasniedzamam primārajam mezglam. Redis Cluster dokumentācijā skaidri teikts, ka klasteris turpina darbu nelielu kļūmju laikā, bet kļūst nepieejams lielāku kļūmju gadījumā, piemēram, ja vairākums primāro nav sasniedzami. Valkey, kas atzarots no Redis, izmanto tos pašus trīs kļūdu ziņojumus un tos pašus noteikumus.

Trīs CLUSTERDOWN kļūdas, trīs nozīmes

Kāpēc klasteris apstājas

Redis pirmkodā mezgls pārslēdz klastera stāvokli uz fail viena no diviem iemesliem:

  1. Slotu pārklājums ir bojāts. Ar cluster-require-full-coverage yes (noklusējums), ja kādam no 16384 slotiem nav īpašnieka vai tas pieder mezglam ar karogu FAIL, viss klasteris pārstāj pieņemt vaicājumus, ne tikai atslēgas šajos slotos. Tipisks stāsts: primārais mezgls nomirst, un tam nav strādājošas replikas, kas pārņemtu darbu, tāpēc tā sloti paliek nepārklāti.
  2. Mezgls ir mazākumā. Ja mezgls nevar sasniegt vairākumu primāro, kas apkalpo slotus, tas atzīmē klasteri kā bojātu. Dokumentācija to apraksta kā mezglu, kas ilgāk par node timeout nesajūt vairākumu citu primāro un pāriet kļūdas stāvoklī. To var izraisīt tīkla sadalījums, drošības grupas izmaiņas vai pārslogots hosts.

Diagnostika ar CLUSTER INFO

$ redis-cli -c -h 10.0.3.11 -p 6379 SET user:42 x
(error) CLUSTERDOWN The cluster is down

$ redis-cli -h 10.0.3.11 -p 6379 CLUSTER INFO | head -7
cluster_state:fail
cluster_slots_assigned:16384
cluster_slots_ok:10923
cluster_slots_pfail:0
cluster_slots_fail:5461
cluster_known_nodes:6
cluster_size:3

CLUSTER INFO lauki pasaka, kurš gadījums ir jūsējais. cluster_slots_fail virs nulles nozīmē, ka sloti pieder mezglam stāvoklī FAIL: pārklājuma problēma. cluster_slots_assigned zem 16384 nozīmē, ka dažiem slotiem vispār nav īpašnieka. Ja visi sloti izskatās labi, bet cluster_state joprojām ir fail, uzdodiet to pašu jautājumu mezglam tīkla otrā pusē: visticamāk, runājat ar mezglu mazākuma sadalījumā. cluster_slots_pfail skaita slotus, kuru īpašnieks tikai tiek turēts aizdomās par nedarbošanos; tie joprojām strādā, līdz aizdomas tiek apstiprinātas.

# kuram mezglam pieder kļūdainie sloti un vai tam ir replika?
$ redis-cli -h 10.0.3.11 -p 6379 CLUSTER NODES | grep -E "master|fail"

# pilna konsekvences pārbaude no jebkura mezgla
$ redis-cli --cluster check 10.0.3.11:6379

Atgriešanās darbā

  1. Atgrieziet bojāto primāro, ja varat. Bieži tas ir restartēts process vai pilns disks. Kad tas pievienojas atpakaļ un tā sloti ir pārklāti, klasteris pats atgriežas stāvoklī ok. Restartēts primārais īsu brīdi nogaida, pirms pieņem rakstīšanu, lai vispirms saņemtu konfigurācijas atjauninājumu, tāpēc neuztraucieties par pirmo sekundi vai divām.
  2. Paaugstiniet repliku manuāli, ja automātiskais failover nenotika. Palaidiet CLUSTER FAILOVER FORCE uz replikas, kuru vēlaties paaugstināt, kad tās primārais nav sasniedzams. FORCE joprojām prasa, lai vairākums primāro apstiprina jauno konfigurāciju. Replika, kas bijusi atvienota pārāk ilgi, var atteikties no automātiskā failover cluster-replica-validity-factor dēļ, un tieši tad manuāls failover palīdz.
  3. Piešķiriet vai pārvietojiet trūkstošos slotus. Kļūdai "Hash slot not served" redis-cli --cluster check parāda nepārklātos slotus, un redis-cli --cluster fix var tos piešķirt. Vispirms pārbaudiet: ja šajos slotos bija dati mezglā, kura vairs nav, pārklājuma labošana dod tukšus slotus, nevis atgriež jūsu datus.
TAKEOVER izmantojiet tikai kā pēdējo līdzekli. CLUSTER FAILOVER TAKEOVER paaugstina repliku bez jebkādas klastera piekrišanas. Dokumentācijā teikts, ka tas pārkāpj principu "uzvar pēdējais failover" un jālieto uzmanīgi, piemēram, lai pārslēgtu datu centrus, kad visi primārie nedarbojas. Ja to izmanto mazākuma sadalījumā, divi mezgli var pieprasīt vienus un tos pašus slotus.

Iestatījumi, kas maina uzvedību

Ja klienti pēc failover ārpus klastera režīma turpina rakstīt vecajā mezglā, tā ir cita kļūda; skatiet mūsu Redis READONLY ceļvedi.

Kas mainās ar lielām datu kopām

Galvenās atziņas

Redis Valkey Redis Cluster Augsta pieejamība
Sadarbība ar mums

Redis Cluster nedarbojas tieši tagad?

Mēs atjaunojam Redis un Valkey klasterus, salabojam slotu pārklājumu un failover un pārprojektējam šķembu un repliku izkārtojumu, lai viens bojāts mezgls neapturētu produkciju.

Sazināties Vairāk no emuāra