Гарячий клон живої служби Linux


14

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

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

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

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


Чи візуалізуватимуть машину і зробити знімок «розігрітого» стану буде корисним?
TripeHound

13
Ви розумієте, чому трапляється така розминка? Наприклад, це може бути побічним ефектом кеш-файлів. Але деякі відповіді на машини клонування відкидають кеш файлів, оскільки кеш за визначенням може бути реконструйований з базового оригіналу.
MSalters

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

дякую, люди, @TripeHound, я попросив мого друга, який працює у VMWare, і він сказав, що їм здається неможливим просто зробити знімок "прогрітого" стану, ані деякі дзеркальні речі. MSalters, я не на 100% впевнений, що відбувається під час розминки, але це виглядає як після закінчення служби, якась ледача робота з завантаження працює після роботи з розрахунку
Чен Стівен

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

Відповіді:


28

Можливо, ви не можете "гаряче клонувати" цілий сервер (ви можете, але тільки якщо це віртуальна машина), але ви можете заморозити і відновити єдиний процес, за допомогою criu , Checkpoint / Restore в просторі користувачів.

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

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

criu потрібне недавнє ядро ​​з різними функціями, зібраними в, тому старі дистрибутиви Linux можуть не працювати. Ви можете запустити criu checkна конкретній машині, щоб визначити, чи є передумови для криу.


це виглядає дивним , і я буду робити деякі тести на це, спасибі братан
чен Steven

З вашого досвіду, наскільки добре це працює на практиці? Дивлячись на списки criu обмежень (які, як правило, ті, які я очікував - це складна проблема), я відчуваю, що це навряд чи буде працювати з додатками, які не були розроблені з урахуванням цього випадку використання.
James_pic

@James_pic Минув рік, як я серйозно подивився на це, оскільки в даний час я не використовую це. Для демона, який просто приймає з'єднання та виконує деякі обчислення (наприклад, машинне завдання ОП або веб-сервер), він працює досить добре.
Майкл Хемптон

12

Це може бути трохи поза сферою вашого поточного середовища, але галузевим стандартним способом цього є віртуалізація вашого сервера. Багато хостів віртуалізації (VMware, virtualbox тощо) дозволяють зробити «знімки», що зберігають стан сервера, який потім може бути клонований у нові екземпляри. Ці нові екземпляри матимуть такий самий стан, що і вихідний, аж до запущених процесів. Звичайно, ви хочете переконатися, що програмне забезпечення, яке ви працюєте, все-таки буде працювати належним чином у віртуальному середовищі (на увазі розрахунок CUDA / GPU).


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

Для мене обом прийнятним є запуск проекту в "справжній" машині або хості віртуалізації, і ми можемо скористатися декількома способами обробки "старого" кодового матеріалу, можливо, тестування A / B або постійного оновлення .etc. Але ви впевнені, що знімки можуть повністю клонувати розігрітий стан мого робочого вузла?
Чен Стівен

3
Коли ви "живе-мігруєте" машину, її потрібно призупинити. Поки вона призупинена, її пам’ять копіюється 1: 1 на іншу машину кластера, де вона не використовується, - неушкоджена. Це може зайняти деякий час, залежно від обсягу пам’яті та швидкості мережевої тканини. Можливо, ви зможете скористатися цим методом, якщо кількість простоїв, які він викликає, недостатньо для ваших потреб.
Спулер

@chensteven Останнім часом я походив із середовища virtualbox. Це було деякий час тому, але з того, що я пам’ятаю, запущений знімок містить точний стан vm на момент зробленого знімка, включаючи запущені процеси та вміст пам’яті. Цей знімок може бути клонований до нового vm, даючи вам дві машини в абсолютно однаковому стані.
cawwot

3

Питання, про яке ви згадуєте, посилається на посилання http://www.linuxfocus.org/English/March2005/article370.shtml , де описано всі способи, які я уявляв, щоб виконати ваші запити.

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

Не зовсім зрозуміло, що ви мали на увазі під собою, «поки ми не будемо його годувати кілька разів» .

Але якщо я добре зрозумів, що ви запитуєте, ви повинні врахувати, що для клонування системи потрібен час для копіювання та обчислення ресурсів.

Щоб виконати "ON / OF" або краще називати середовищем активного / резервного копіювання, сервер повинен бути належним чином налаштований у кластері.

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


Я винен, що ви трохи заплуталися тут, означає, що "подача" означає, що після запуску служби ми повинні кілька разів викликати завдання з обчислення, щоб переконатися, що вузол "прогрівся" до найвищої продуктивності. Отже, проблема полягає в тому, як динамічний клон або розширення для наших життєвих завдань, як якщо б велика кількість запитів, що потрапляють в нашу систему, у нас не буде достатньо часу для налаштування нових вузлів обчислення (розминка займає занадто багато часу), щоб поводьтеся з ними, знаєте, так само, як хвилі, що надходять
Чен Стівен

1

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

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

По-перше, для визначення найкращої стратегії даних було б корисно знати, що регулярно оновлюється. У вас є SQL-сервер, який динамічно оновлюється, але має статичний вміст? Крім того, чи є у вас команда розробників за такою підривною системою, як git, що надсилає постійні оновлення даних до вашого вмісту? Залежно від того, що оновлюється, визначається найкращий повний курс дій.

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

  • dd клонувати всі дані нового сервера.
  • Почніть налаштування нового сервера, це може зайняти деяку роботу, особливо якщо це інше обладнання, але все ж може бути швидшим, ніж налаштування з нуля.
  • Можливо, це може також унести деякі зміни DNS, оскільки ви не можете використовувати один і той же DNS на іншому сервері, якщо вам потрібно працювати на другому сервері в реальному часі, поки перший сервер все ще працює.
  • Після того, як новий сервер буде завершений і працює незалежно, візьміть остаточну резервну копію sql-сервера на вихідному сервері та імпортуйте його на новий сервер.

Можливо, вам доведеться тимчасово відключити свій оригінальний сервер в автономному режимі, щоб уникнути жодних даних. Крім того, щоб мати нульовий час простою, ви можете зробити друге в прямому ефірі, вказати dns на новий сервер, а потім оновити будь-які записи dns вручну на новому сервері, щоб фактично нульовий час простою. Це більше клопоту, ніж кілька хвилин простою, хоча резервне копіювання sql та відновлення на новому сервері, але може знадобитися для нульового простою.

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

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

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

Сподіваюсь, це допоможе, і удачі з переміщенням вашого сервера!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.