Адміністрування Tarantool: відмовостійкий in-memory кластер

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

Адміністрування Tarantool: де кластер втрачає стійкість

Tarantool тримає робочу множину в оперативній пам'яті, а на диск ідуть журнал змін і періодичні знімки стану.

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

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

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

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

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

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

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

Що дає адміністрування Tarantool: ефект у цифрах

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

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

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

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

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

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

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

Тримають ці цифри на рівні саме моніторинг стану вузлів і своєчасна підтримка кластера в пам'яті.

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

Режими відмовостійкості: порівняння варіантів

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

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

Варіанти та їхні обмеження

Варіант Коли підходить Чим обмежений
Одиночний вузол Навантаження передбачуване, простій на час відновлення з копії допустимий Режиму реплікації немає: відмова вузла — втрата даних з моменту останньої копії
Провідний із резервним і ручним перемиканням Потрібна гаряча копія та контроль над моментом перемикання Автоматики немає: перемикає інженер, резервний вузол не приймає запис
Кластер з автоматичним вибором провідного за кворумом Сервіс має пережити відмову вузла без участі людини Потрібен непарний склад вузлів і стійка мережа: втрата кворуму зупиняє запис
Шардована схема Дані та навантаження не вміщаються на один вузол Схема розміщення даних ускладнює запити: частина операцій іде в кілька шардів, перебалансування потребує регламенту

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

Порядок робіт: від аудиту до передачі в експлуатацію

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

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

  2. Проєктування схеми кластера. Визначаємо число реплік на шард, кворум запису, розкладку вузлів по зонах і режим читання. Схему фіксуємо до налаштування, інакше топологія збирається «як вийшло».

  3. Налаштування вузлів і ролей. Розгортаємо конфігурації, розмічаємо ролі, вмикаємо реплікацію, моніторинг і резервне копіювання з перевіркою відновлення.

  4. Перевірка перемикань. По черзі виводимо вузли з ладу й заміряємо, за скільки обирається новий провідний вузол і повертається запис. Кожен сценарій — із зафіксованим результатом.

  5. Навантажувальна перевірка. Проганяємо профіль, близький до робочого: зростання числа з'єднань, сплески запису, поведінка під час заповнення пам'яті.

  6. Передача в експлуатацію. Навчаємо чергову зміну, віддаємо інструкції з типових операцій, схему моніторингу та порядок дій під час відмови.

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

Схеми, політики доступу та регламенти перемикання

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

  • Карта вузлів і зв'язків — ролі інстансів, розкладка реплікасетів по зонах відмови, адреси й порти, хто з ким реплікується. За нею черговий за хвилину розуміє, що саме впало і які сервіси зачеплені.
  • Політики доступу та ролі — окремі облікові записи для застосунку, моніторингу, діагностики лише на читання й адміністративних операцій. Рутинна перевірка не потребує прав на зміну даних, а дії адміністратора потрапляють у журнал.
  • Документація щодо кластера — схеми спейсів та індексів, порядок застосування міграцій схеми, конфігурація кожного інстансу з поясненням, чому параметри виставлені саме так.
  • Регламент перемикання — умови переведення майстра на інший вузол, хто ухвалює рішення, як перевіряється відставання реплік перед перемиканням і як виконується повернення, якщо новий лідер не втримався.
  • Регламент резервного копіювання та відновлення — що копіюється і з якою періодичністю, де зберігаються копії, як регулярно перевіряється їхня придатність і за який час система піднімається з нуля.
  • Інструкції для чергової зміни — покрокові сценарії на типові відмови: вузол не відповідає, репліка відстала, закінчилася пам'ять під дані. Що дивитися, що робити і коли ескалувати.

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

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

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

Що змінили

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

Перевірки доступності та правила відновлення налаштовані так, що за пікового навантаження кластер не йде в каскадну деградацію.

Результати впровадження

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

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

Чим відрізняється шардинг від реплікації на практиці

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

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

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

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

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

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

Ціна — затримка запису; якщо кворум не збирається, запис зупиняється повністю, і це усвідомлений вибір на користь цілісності.

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

Технічні сумніви перед стартом робіт щодо кластера

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

Що станеться, якщо провідний вузол вийде з ладу?

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

Чи можна додати вузол і оновити кластер без зупинки запису?

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

Що робити, якщо документації щодо кластера немає?

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

Як контролюється споживання пам'яті?

Задаємо межі на зв'язку загалом і на окремі простори, вмикаємо витіснення за часом життя запису. Це прибирає головний клас відмов систем у пам'яті — зупинку процесу в разі її вичерпання.

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

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

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

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

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

Якщо частина даних недоступна, це не блокує старт: відсутнє фіксуємо як припущення в плані робіт і знімаємо на етапі обстеження.

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

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

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