Архітектура високодоступних MySQL з автоматичним відмовою у фізично різних місцях


19

Я досліджував рішення високої доступності (HA) для MySQL між центрами обробки даних.

Для серверів, розташованих в одному фізичному середовищі, я віддав перевагу подвійному майстру з серцебиттям (плаваючий VIP), використовуючи активний пасивний підхід. Серцебиття перебуває як через послідовний зв'язок, так і через мережеве з'єднання.

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

Зверху буде BGP. Веб-кластери в обох місцях, які мали б потенціал для маршрутизації до баз даних між обома сторонами. Якщо підключення до Інтернету знизилось на сайті 1, клієнти прокладуть маршрут через сайт 2, до веб-кластеру, а потім до бази даних на сайті 1, якщо зв’язок між обома сайтами все ще працює.

При такому сценарії через відсутність фізичного зв’язку (серійного) існує більша ймовірність розщеплення мозку. Якщо WAN знизився між обома сайтами, VIP виявився б на обох сайтах, де різноманітні неприємні сценарії могли ввести десинхронізацію.

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

Мережевий шар - це не фокус. На цьому етапі архітектура гнучка. Знову ж таки, мою увагу приділено вирішенню для збереження цілісності даних, а також автоматичного відмови від баз даних MySQL. Я б, швидше за все, спроектував решту навколо цього.

Чи можете ви порекомендувати перевірене рішення для MySQL HA між двома фізично різноманітними сайтами?

Дякую, що знайшли час, щоб прочитати це. Я з нетерпінням чекаю ваших рекомендацій.


1
Привіт - Ви вже визначилися з підходом? Було б цікаво почути, що ви вирішили зробити. У нас така ж проблема.
Мартін

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

Можливо, ви не отримуєте рішення для запису, тому що ви ставите неправильне запитання? Які дані потрібно для копіювання і чому? Коли ви почнете задавати ці запитання, то зможете дізнатись, навіщо вам потрібна реплікація. Розділений мозок - це не просто проблема mysql, це концепція кластера.
Двірник Unix

Відповідь, яку я надав тут, включає додаткову інформацію: serverfault.com/questions/142683/… Я також надаю подальші дії, коли буде завершена реалізація виробництва.
Warner

Відповіді:


9

Ви зіткнетеся з проблемою теореми "CAP". Ви не можете одночасно мати послідовність, доступність та толерантність до розділів.

DRBD / MySQL HA покладається на синхронну реплікацію на рівні блочного пристрою. Це добре, коли обидва вузли доступні, або якщо хтось зазнав тимчасової несправності, перезавантажився тощо, то повертається назад. Проблеми починаються, коли ви отримуєте мережевий розділ.

Мережеві розділи надзвичайно вірогідні, коли ви працюєте в двох центрах даних. По суті, жодна із сторін не може відрізнити розділ від іншого вузла, який виходить з ладу. Вторинний вузол не знає, чи повинен він переймати (первинний не вдався) чи ні (посилання відсутнє).

Поки ваші машини знаходяться в одному місці, ви можете додати вторинний канал зв'язку (як правило, послідовний кабель або кроссовер Ethernet), щоб подолати цю проблему - таким чином, вторинний знає, коли основний ВЗАЄМО вниз, і це не мережевий розділ .


Наступна проблема - продуктивність. У той час як DRBD може забезпечити пристойну ** продуктивність, коли ваші машини мають низький запізнювальний зв’язок (наприклад, гігабітна Ethernet - але деякі користуються спеціалізованими високошвидкісними мережами), чим більше затримка в мережі, тим більше часу потрібно для здійснення транзакції *** . Це тому, що йому потрібно дочекатися, коли вторинний сервер (коли він є в Інтернеті) підтвердить усі записи, перш ніж сказати "ОК" додатку, щоб забезпечити довговічність записів.

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

** Ще набагато повільніше, ніж пристойний локальний IO-контролер

*** Ви не можете використовувати MyISAM для системи DRBD з високою доступністю, оскільки вона не відновлюється належним чином / автоматично після нечистого відключення, необхідного під час відмови.


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

1
Справді. Дані не хочуть бути відразу двома місцями.
Метт Сіммонс

3

А як щодо використання VLAN для з'єднання всіх серверів у двох (або більше) центрах обробки даних. Потім ви можете використовувати CARP для автоматичного виходу з ладу. Використовуйте реплікацію бази даних, щоб підтримувати синхронізацію всього.

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


Це була моя перша думка. Введення рівня 2 в такій мірі вимагає підходу зверху вниз між обома сайтами. Інші ролі сервера, які мають надмірність використання LinuxHA, повинні мати подібні реалізації, наприклад, брандмауери. Інакше виникнуть проблеми з маршрутизацією. Зрештою, навіть при безлічі WAN-посилань між обома сайтами, рівень мого комфорту значно нижчий, ніж у серійних та електронних мереж. Це більше ризику, ніж я можу терпіти. Більше того, видається, що має бути ідеальніше рішення.
Warner

3

Вашим першим етапом має бути оновлення вашого поточного рішення HA до такого, яке використовує OpenAIS як рівень членства в кластері: це дасть вам велику гнучкість, а зважаючи на низькі затримки зв’язків між сайтами, ви зможете досягти поперек. PaceMaker та RHEL Clustering це підтримують.

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

Кластеризація багатьох сайтів Windows Server 2008

Очевидно, що точна технологія не відображається на домені Linux, але концепції однакові.


1

Вибачте, це ще одна мережа вбік, але думка про дорогу ...

Для згаданого вами сценарію розділеного мозку ви могли мати надлишкові зв’язки між двома сайтами, а також зменшити шанс цього статися.


Я їздив туди-сюди. По-перше, я списав це цілком як занадто ризикований. Тепер я переглядаю. Реально, ризик корупції даних із навіть двома повністю диверсифікованими контурами досить високий. Зараз це в моєму короткому списку.
Warner

0

Зауважте, що ви, ймовірно, не можете використовувати BGP, оскільки найменший блок маршрутизації - 4k, a / 22, удача отримати його. Можливо, потрібне рішення на базі DNS.


+1 за дозу реальності. Ви можете використовувати добре керований DNS-сервіс, як UltraDNS, та його сервіс моніторингу сайту "SiteBacker", щоб отримати більшу частину шляху до нього.
Мартін

1
У нас вже є BGP. Це виходить за рамки мого питання.
Warner

2
Ні, найменший блок маршрутизації - 24. Насправді, ні. Найменший фізично рухомий блок - 28, але ви, швидше за все, будете проігноровані всіма. Найменший приставку, яку слухатимуть, - це / 24.
Том О'Коннор

0

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

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

Вам коли-небудь знадобиться третій сайт (інший центр обробки даних)? Якщо так, то скільки часу та грошей вам доведеться це робити?

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

Зважаючи на те, що центри обробки даних не спускаються часто, кілька сайтів означають балансування навантаження та деяке злому DNS, чи буде це в одному центрі обробки даних? Якщо так, якщо один центр обробки даних знищиться з будь-якої причини, ви зіткнетеся з проблемою, оскільки значна частина вашого DNS і балансування навантаження буде знаходитися в цьому центрі обробки даних.

Тож вам, можливо, доведеться планувати цю розділену ситуацію з мозком. Для всіх можливих налаштувань спосіб вирішити ситуацію з косою мозку різний. Крім того, кожен розчин займає X кількість часу.
Також може бути набагато простіше запланувати використання 3 центрів обробки даних з самого початку. Я не фахівець з MySQL, але я чув, що у виробництві було легше мати 3 майстри, ніж 2, якщо ти коли-небудь стикався з проблемою.

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

Удачі!


Даних порівняно мало, усі речі враховані. Кілька сотень гігабайт заради обговорення. Третій сайт, напевно. Якщо потрібно, я готовий скомпрометувати архітектуру для кращого рішення зараз і перегляну пізніше на третину. "Вузьке вузьке місце управління" або інші адміністративні проблеми не входять у сферу питання. Залишок буде встановлений для всіх технологій виробництва. Основна увага тут - MySQL.
Warner

0

DRBD не є рекомендованим рішенням для віддалених центрів обробки даних, оскільки він вимагає пропускної здатності, яка може впливати на швидкість роботи вашої бази даних та реплікацію. Рекомендоване рішення - Master - Master Replication. Єдине питання з цим полягає в тому, що ви автоматично збільшуєте поля автоматичного збільшення.

Якщо вам потрібне справді рішення HA для MySQL, вам доведеться працювати з кластером MySQL, оскільки DRBD не може надати вам цілісність даних у разі відмов.



0

Подолати відсутність послідовного кабелю насправді дуже просто, ви використовуєте річ із темних віків, яку називають модемом - у вас є її на кожному кінці, а потім запустіть Heartbeat через PPP-посилання. Також можна використовувати рамне реле. Обидва способи виправлять будь-які турботи, що виникають у вас із зайвими шляхами слой1 / 2.

Однак, як кажуть - затримка DRBD, що працює над будь-якою ланкою з набагато більше ніж 300 мкс (зауважте, що 0,3 мс), затримка стає дуже смішною дуже швидко.

Вам краще послужити, використовуючи стандартну реплікацію MySQL та LinuxHA через PPP & eth, щоб робити помилки.

Принаймні, це те, що я робив для клієнтів у минулому.


Цікава ідея. Раніше я використовував комутаційний зв'язок як відмову на PtP. Хоча я не думаю, що це повністю усуне випуск теореми CAP, я вважаю, що це може бути доповненням до того, щоб зробити розщеплений мозок менш імовірним. Складно створити той самий рівень впевненості, що створений за допомогою прямого фізичного зв’язку в кілька футів.
Warner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.