Налаштування MariaDB Galera Cluster для синхронної реплікації

Кластер втрачає синхронність під навантаженням — і записи розходяться між вузлами. Ми налаштовуємо MariaDB Galera Cluster під ключ: проєктуємо схему кворуму, перевіряємо поведінку під навантаженням і передаємо регламенти перемикання вашій команді. Відмова одного вузла перестає бути аварійною подією.
Часті запитання

Чому MariaDB Galera Cluster втрачає синхронність під навантаженням

MariaDB Galera Cluster підтверджує запис не на одному вузлі, а після того, як транзакцію сертифікували всі учасники. Поки вузли встигають однаково, підтвердження запису й реплікація нероздільні: втрат даних у разі відмови одного сервера немає.

Схема ламається саме тоді, коли один вузол перестає встигати — механізм регулювання потоку пригальмовує весь кластер до швидкості найповільнішого учасника.

Другий крок до збою — випадіння вузла. Сервер відвалився через мережу або застряг на повній передачі стану, ті, що залишилися, не набирають більшість, і розпад кворуму переводить частину кластера в режим без права запису.

Застосунок отримує помилку про неготовність вузла, з’єднання висять в очікуванні, і запис зупиняється повністю, хоча диски цілі й дані на місці.

Небезпечніший зворотний сценарій: поки кластер розділений, менша частина встигає прийняти й підтвердити транзакції клієнту, а після відновлення зв’язку вони не проходять сертифікацію й відкидаються.

Так підтверджена транзакція не доїжджає до інших вузлів — це вже не відмовостійкість бази даних, а розходження, яке доводиться звіряти вручну.

На піку такий збій імовірніший: зростають черги сертифікації, довше утримуються блокування запису, а сплеск на одному вузлі через регулювання потоку розганяє затримки на всіх. Будь-який перезапуск або передача стану на гарячому кластері вибиває кворум особливо легко.

Розбираємо, як це закривається: як рахувати кворум і вагу вузлів, чим утримати відсталий вузол у кластері та як побудувати схему, за якої відмова вузла не призводить до блокування запису.

Що дає синхронна реплікація з підтвердженням запису

Запис вважається підтвердженим лише тоді, коли його прийняв кворум вузлів, а не один провідний сервер.

Клієнт отримує відповідь уже після фіксації на більшості — тому клас відмов «втрата підтверджених даних» зникає: якщо вузол випадає одразу після відповіді, транзакція все одно залишається на інших. MariaDB Galera Cluster закриває це на рівні самої реплікації, без доопрацювань у застосунку.

У разі відмови вузла кворум перезбирається сам, а маршрутизація трафіку за секунди переводить клієнтів на живі вузли. Час перемикання вимірюється одиницями секунд і не залежить від обсягу бази — перемикання не чекає застосування журналів. Застосунок бачить короткий розрив з’єднань, а не простій на хвилини.

Вузол, що повернувся, відновлюється гарячим способом: отримує знімок стану й наздоганяє потік змін, поки інші продовжують приймати запис. Запис при цьому не зупиняється — зниження простою досягається завдяки тому, що відновлення відбувається паралельно з робочим навантаженням.

Плата за це — затримка запису визначається найповільнішим вузлом набору, тому мережу між вузлами та їхню кількість добираємо усвідомлено: непарний кворум, без зайвих учасників. Слабка ланка видно за метриками потоку реплікації, і це перше, що ми перевіряємо під час налаштування.

Режими реплікації MariaDB: порівняння варіантів

Режими реплікації різняться не «повнотою», а тим, хто підтверджує фіксацію зміни та що відбувається в разі розходження вузлів. Від цього залежать поведінка при збої, чутливість до затримки між майданчиками та те, який відкат узагалі можливий.

Варіант Коли підходить Обмеження режиму
Асинхронна реплікація звітні копії, рознесені майданчики, де втрата останніх змін допустима основний вузол підтверджує фіксацію, не дочекавшись копії: у разі збою до передачі журналу різниця губиться безповоротно
Напівсинхронна реплікація потрібен баланс між швидкістю запису й гарантією, що копія прийняла журнал підтвердження надходить до застосування на копії, тому під час перемикання частина змін ще наздоганяє; поведінка в разі недоступності копії задається політикою таймауту
Синхронне підтвердження (Galera) критичні дані, де розходження вузлів неприпустиме, а вузли стоять в одній мережі з малою затримкою фіксація проходить лише на більшості вузлів: втрата кворуму зупиняє запис, а зростання кількості вузлів збільшує час відгуку на запис
Копія із затримкою застосування захист від помилкової масової зміни перемикання не прискорює, потребує окремого вузла та запасу місця під журнали

Вибір не бінарний: в одній інсталяції синхронний кластер зазвичай несе критичні бази, а асинхронна копія — звітність і аналітику. Так навантаження читання йде з основного контуру, а вимоги до затримки між майданчиками залишаються виконуваними.

Впровадження відмовостійкого кластера: етапи робіт

Кластер синхронної реплікації на MariaDB Galera не збирають «на живу»: порядок робіт визначає, буде перемикання в разі відмови передбачуваним чи перетвориться на ручні операції під тиском. Кожен етап завершуємо артефактом, який перевіряємо до переходу на наступний.

  1. Аудит поточної схеми. Топологія, розмір гарячих даних, затримки між вузлами, зміни структури поза регламентом, поведінка застосунку в разі помилки запису. Результат — карта вузьких місць і перелік запитів, неприпустимих у кластері: довгі блокувальні транзакції, масові вставки без розбиття.
  2. Проєктування топології. Кількість вузлів, кворум, окремий арбітр поза основною зоною відмови, режим підтвердження транзакції записом на кворум. Тут же фіксуємо поведінку в разі втрати кворуму: зупинка запису автоматично або за рішенням чергового.
  3. Налаштування синхронного запису. Параметри потоку реплікації, обмеження розміру транзакції для наздоганяння змін, поведінка вузла в разі відставання, переведення вузла в режим без запису. Перевіряємо, як застосунок переживає відкат транзакції та перепідключення до іншого вузла.
  4. Тести відмови. Плановий вивід вузла, різка зупинка, розрив мережі між зонами, втрата кворуму, повне перезбирання вузла з донора. Фіксуємо час відновлення запису та кількість втрачених підтверджених транзакцій — ціль нуль.
  5. Резервне копіювання та відновлення. Знімок з вузла-донора, перевірка відновлення на окремому контурі, регламент повної синхронізації, коли наздоганяння змін неможливе.
  6. Передача в експлуатацію. Моніторинг стану вузлів і відставання, інструкції черговому, порядок заміни вузла й оновлення структури у вікно. Далі — супровід, поки команда не проведе заміну вузла самостійно.

Конфігурації, схеми кворуму та регламенти перемикання

Після впровадження в команди замовника залишається не лише працюючий кластер, а й комплект артефактів, за якими його можна експлуатувати без нас. Нижче — те, що ми передаємо в сховище конфігурацій замовника й розбираємо на передачі.

  • Файли конфігурації вузлів. Повний набір параметрів синхронної реплікації: ім’я кластера, режим підтвердження запису, поведінка вузла в разі втрати зв’язку з групою, ліміти на потік змін. Розкладені по машинах і продубльовані в системі контролю версій.
  • Схема розміщення вузлів. Скільки вузлів, у яких зонах доступності, як розподілений кворум, які затримки між майданчиками закладали й чому саме такий склад голосуючих.
  • Регламент перемикання. Покроковий порядок керованого виводу вузла, дії в разі втрати кворуму, точка, у якій ухвалюється рішення про переведення трафіку на резервний майданчик.
  • Правила доступів. Ролі для застосунку, службової діагностики та відновлення, звідки дозволені підключення, хто має право змінювати параметри кластера й як це фіксується.
  • Документація з відновлення. Сценарії холодного старту групи, підйом одного відсталого вузла, порядок роботи з резервною копією та звірка стану після повернення.
  • Чек-листи. Перевірки перед зміною конфігурації, після аварійного перемикання та регулярний контроль розходження даних між вузлами.
  • Карта метрик і оповіщень. Які показники вузла й кластера вважаються нормою, які потребують втручання чергового, кому надходить сигнал.

Кейс: кластер інтернет-магазину без простою в разі відмови вузла

Як було до

Магазин працював на одній основній базі та асинхронній репліці. Коли вузол ішов, репліка відставала, і частина замовлень, оформлених у момент збою, зникала — частка втрачених транзакцій сягала 0.3% добового потоку.

Про розходження дізнавалися зі скарг покупців, тобто вже після того, як клієнт не отримав підтвердження замовлення.

Перемикання робили руками: черговий інженер піднімав репліку, змінював точку підключення в конфігурації застосунку й лише потім знімав режим обслуговування. Простій становив від 4 до 11 хвилин, а кожна четверта відмова закінчувалася ручним перезбиранням вузла з резервної копії.

Що змінили й що стало

Зібрали кластер із трьох вузлів із синхронною реплікацією: запис підтверджується лише після того, як його прийняла більшість вузлів, тому втрата замовлень у разі відмови одного вузла перестала бути можливою.

Відмову відпрацьовує автоматика — два вузли, що залишилися, зберігають кворум, і кластер продовжує приймати записи без участі чергового.

Час перемикання скоротився з хвилин до 3-8 секунд, частка втрачених транзакцій — з 0.3% до нуля, частка ручних відновлень — з чверті відмов до одного з десяти, і лише коли диск вузла недоступний зовсім.

Розбір інциденту займає близько 20 хвилин: у журналі видно, який вузол випав, чому й коли повернувся в стрій, — раніше на звірку логів ішли години.

Налаштування ми звіряли з двома незалежними джерелами — документація Galera Cluster і звіти спільноти щодо кворуму: вони підтверджують, що вибраний режим дає передбачувану відмову, а не тиху втрату даних.

Що робити, якщо вже розгорнуто асинхронний кластер?

Перехід можливий без тривалого вікна недоступності: дані на репліках уже є, змінюється лише спосіб їх приймання та підтвердження запису. Порядок тут зворотний звичному — спочатку вводимо в синхронний кластер одну репліку, а поточний майстер продовжує працювати як раніше.

Перед цим перевіряємо поточну конфігурацію. Усі таблиці мають бути InnoDB і з первинним ключем: без ключа синхронне застосування рядків працює неефективно.

Дивимося, чи не зростає лаг репліки, чи збігаються схеми на вузлах, чи немає прямих підключень до реплік на читання — після перемикання це вже рівноправні учасники кластера.

Окремо — довгі транзакції та зміна структури таблиць: вони узгоджуються між вузлами й на великій таблиці можуть загальмувати запис.

Зворотна сумісність застосунків — головний ризик. Асинхронна схема терпить конфлікти: розходження накопичуються й спливають пізніше. Синхронна повертає їх одразу помилкою транзакції, тому код має вміти повторити операцію, а не впасти.

Друге — точка підключення: прописаний за іменем майстер змінюють на адресу кластера, інакше розподіл запису не запрацює.

План міграції: фіксуємо налаштування, піднімаємо новий вузол поруч із реплікою та переносимо дані фізичною копією — перелив дампом створює те саме довге вікно. Потім переводимо застосунок, додаємо інші вузли й стежимо за кворумом.

Саме вікно недоступності — хвилини на зміну точки підключення та перевірку запису з читанням. Відкат простий: повернути застосунок на попередній майстер, він залишається холодним резервом, поки кластер не відпрацює під навантаженням.

Часті технічні питання перед впровадженням кластера

На етапі проєктування важливо перевірити не саму реплікацію, а поведінку кластера в нештатних сценаріях: обрив зв’язку між майданчиками, додавання вузла під навантаженням, відгук запису. Нижче — п’ять питань інженерного рівня з короткими відповідями.

Скільки вузлів потрібно для кворуму?

Три — мінімальний склад, за якого кластер переживає відмову одного вузла й зберігає кворум. Два вузли відмовостійкі, але без запасу: втрата одного залишає один голос, і кластер переходить у режим лише для читання. Для двох майданчиків додаємо легкий арбітр без копії даних.

Що відбувається при розділенні мережі?

Менша частина втрачає кворум і переходить у режим лише для читання — запис на ній зупиняється, щоб версії даних не розійшлися. Більша частина продовжує обслуговувати транзакції, а після відновлення зв’язку відсталі вузли наздоганяють стан самі.

Чи можна додати вузол на ходу?

Так, зупинка сервісу не потрібна. Новий вузол отримує копію даних і включається в голосування лише після наздоганяння. На час повної передачі копії донором виступає один вузол — його навантаження заздалегідь розподіляємо, щоб не просадити відгук.

Чи сповільнює синхронна реплікація запис?

Відгук запису визначає затримка мережі між вузлами, а не диск. У межах майданчика це частки мілісекунд, між регіонами — помітніше. Групова фіксація об’єднує паралельні транзакції в один раунд узгодження, тому пропускна здатність при масовому навантаженні не просідає.

Як вузол відновлюється після збою?

Після короткої відсутності він наздоганяє зміни з журналу й повертається в стрій без повної копії бази. Якщо відстав сильніше, ніж зберігається журнал, запускається повна передача. Розходження даних між вузлами ловиться окремо й потребує перезбирання вузла.

Обговоримо задачу та повернемося з оцінкою й планом

Щоб оцінка була по суті, а не «на око», для старту потрібні вихідні дані з інфраструктури та вимоги до доступності.

Опишіть поточну схему реплікації, кількість вузлів і майданчиків, обсяги баз і профіль навантаження на запис — цього достатньо, щоб зрозуміти, які режими кворуму й синхронізації підійдуть саме вам.

  • Схему поточної топології: скільки вузлів, як рознесені по майданчиках, де зараз точки відмови.
  • Обсяги та характер навантаження: розмір баз, співвідношення читання й запису, пікові періоди.
  • Вимоги до доступності: допустимий час простою під час перемикання та чи потрібен автоматичний перехід у разі відмови вузла.
  • Вимоги до узгодженості: які транзакції зобов’язані підтверджуватися на більшості вузлів, а де достатньо асинхронної реплікації.
  • Як влаштовані резервне копіювання та відновлення — щоб план робіт не зламав чинні процедури.
  • Обмеження щодо вікна робіт: коли конфігурацію можна змінювати без впливу на користувачів.

Натомість повернемося з планом робіт із впровадження: поетапне переведення вузлів, склад кластера, порядок перевірок і порядок приймання з вимірюваними критеріями. Заздалегідь фіксуємо, яку відмову кластер зобов’язаний переживати й за який час повертається в норму після збою. Опишіть задачу — обговоримо деталі та повернемося з оцінкою й планом.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142