Cluster Redis обробляє збої вузла за допомогою комбінації виявлення невдач, просування репліки та управління державою кластеру, щоб забезпечити постійну роботу та доступність даних. Він призначений для виживання збоїв у кількох вузлах, автоматично просуваючи репліки для заміни недосяжних майстрів, зберігаючи цілісність ключового простору, мінімізуючи ризик втрати даних.
кластерне спілкування та виявлення невдач
Кластерні вузли Redis спілкуються за допомогою спеціалізованого бінарного протоколу на основі TCP під назвою Cluster Bus. Кожен вузол підтримує з'єднання з кожним іншим вузлом у кластері за допомогою цієї шини, що дозволяє безперервно перевірити здоров'я та розповсюдження стану. Вузли періодично надсилають пакети Ping, щоб підтвердити оперативний статус своїх однолітків та обмінюватися інформацією про стан кластера. Це комунікація використовує протокол пліток для ефективного поширення інформації про кластер, що сприяє виявленню збоїв вузла.
Вузли контролюють однолітки за допомогою активного механізму Ping. Якщо вузол не відповідає на пінгс протягом налаштованого періоду очікування (Node_timeout), він позначений як можливо, не вдається зі статусом PFAIL. Це орієнтовна вказівка відмови, тобто вузол може бути недосяжним або вниз, але він ще не підтверджений. Якщо стан Pfail зберігається і підтверджується більшістю головних вузлів, вузол позначається як невдача, що вказує на те, що він вважається недосяжним або знижуючим кластером. Цей механізм виявлення несправностей на основі консенсусу допомагає запобігти помилковим позитивом у виявленні невдалих вузлів.
Поводження з невдачами головного вузла
Коли головний вузол позначений як невдача, Cluster Redis ініціює процес відмови, щоб сприяти одній із своїх реплік, щоб стати новим майстром. Цей процес викликається автоматично детектором відмови кластера без адміністративного втручання. Посушена репліка бере на себе відповідальність за обслуговування хеш -слотів, які раніше керували невдалим майстром, гарантуючи, що кластер може продовжувати обслуговувати запити без реконфігурації вручну.
Відмова виникає лише в тому випадку, якщо є принаймні одна репліка та доступна для просування. Якщо не існує відповідної репліки, кластер входить у стан помилки, де він перестане приймати запити, щоб запобігти обслуговуванню непослідовних даних. Це підкреслює важливість того, щоб репліки налаштовані для кожного майстра для підтримки високої доступності.
Механіка та безпека відмову
Під час відмови репліка чекає повністю синхронізуватися з майстром, який він замінює, гарантуючи, що він обробляв усі оновлення, що очікують на очікування, щоб уникнути втрати даних. Він досягає цього, узгоджуючи комплексне зміщення з майстром, щоб він мав сучасний набір даних, перш ніж взяти на себе головну роль.
Після синхронізації репліка вимагає нової епохи конфігурації у більшості майстрів. Епоха - це логічна часова позначка, яка використовується для відстеження змін конфігурації в кластері. Після отримання консенсусу репліка транслює оновлену конфігурацію на всі вузли, оголошуючи про його акцію до майстерності та пониження старого майстра до репліки чи видалення.
Старий майстер, коли він відновлюється, отримує це оновлення конфігурації і перестає обслуговувати запити як майстер. Він перенаправляє запитів на нового майстра, гарантуючи, що клієнти прозоро продовжують взаємодіяти з кластером без ручного втручання.
Поводження з мережевими розділами та сценаріями розділеного мозку
Cluster Redis використовує консенсус на основі більшості, щоб уникнути проблем з розділеним мозком під час мережевих перегородків. Майстер зазнає невдачі лише в тому випадку, якщо він недоступний більш ніж половиною господарів у кластері. Майстри, які не можуть спілкуватися з більшістю, перестануть приймати записи, запобігаючи розбіжним станам даних між перегородками.
Однак, якщо розділ меншин містить клієнтів, які продовжують писати майстру перед відмовою, є потенціал для втрати запису. Редіс пом'якшує цей ризик, відмовившись, пише з боку меншини після тайм -ауту та з боку більшості, швидко провалившись над недоступним господарем.
Незважаючи на ці запобіжні заходи, записи можуть бути втрачені під час відмови, оскільки Redis використовує асинхронну реплікацію між майстрами та репліками. Оскільки відповіді на написання команд та оновлення реплікації надсилаються майже одночасно, вікно для втрати запису дуже вузьке, але не неможливе.
Параметри конфігурації, що впливають на поводження з відмовою
Кластер Redis включає параметри конфігурації, які впливають на наявність та поведінку під час збоїв у вузлі:
-`Cluster-require-full-coverage` (за замовчуванням так): Кластер перестає приймати записи, якщо будь-яка частина ключового простору виявлена через збої вузла, забезпечуючи сильну узгодженість даних.
-`Cluster-Allow-reads-when-down` (за замовчуванням №): контролює, чи дозволені читання, коли кластер знаходиться в стані відмови. Увімкнення цього дозволяє прочитати з вузлів навіть під час часткових збоїв, але може ризикувати нескінченними даними.
Ці налаштування дозволяють адміністраторам збалансувати наявність та послідовність на основі вимог програми.
Підтримка посібника
Окрім автоматичного відмови, Cluster Redis забезпечує команду ручного відмови, яка може бути видана на репліках. Це корисно для сценаріїв технічного обслуговування або тестування, коли адміністратор бажає обміняти головні ролі, не чекаючи фактичної події збоїв.
Порушення відмови працює, блокуючи клієнтів на поточному майстрі, чекаючи, коли репліка повністю наздоганяє, а потім просуваючи репліку з плавним атомним переходом. Це забезпечує відсутність втрати даних під час зміни ролі та мінімальних зривів для клієнтів.
Резюме
Кластер Redis обробляє збої вузла насамперед через систему виявлення та відмови несправностей на основі постійного моніторингу через шину кластера Redis та протокол пліток. Вузли виявляють недосяжних майстрів та автоматично сприяють реплікації після консенсусу, що вимагає від більшості господарів домовитись про невдачу. Відмова розроблена для мінімізації втрати даних, забезпечуючи повністю синхронізовану репліки перед просуванням. Мережеві розділи керуються за допомогою рішень на основі більшості для запобігання умовам розділеного мозку, хоча вузьке вікно втрати запису може виникнути через асинхронну реплікацію. Параметри конфігурації дозволяють налаштувати доступність та послідовність під час збоїв, а команди ручного відмови надають операторам управління для технічного обслуговування.
Ця архітектура дозволяє кластеру Redis забезпечити високу доступність та допуску розділу з автоматичним відновленням від збоїв головного вузла, гарантуючи, що кластер залишається функціональним та послідовним у сценаріях відмови.