Горячий клон живого сервиса Linux


14

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

У нас есть расчетный узел, можно сказать, расчетный узел НЛП, на котором запущены некоторые модели. Когда мы запускаем узел (конечно, с сервисом), вычисления будут ужасно медленными, пока мы не подадим его несколько раз. Мы назвали это разминкой.

К сожалению, на прогревание у нас уходит много времени (может быть, наши вычисления закончились до того, как узел прогрелся).

Итак, проблема в том, существует ли стабильный способ горячего клонирования сервера Linux, чтобы обеспечить максимальную производительность узла, чтобы мы могли клонировать его и подключить к сети в более короткие сроки?


Будет ли полезна визуализация машины и моментальный снимок «разогретого» состояния?
TripeHound

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

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

спасибо, @TripeHound, я попросил моего друга, который работает в VMWare, и он сказал, что для них просто невозможно сделать снимок «разогретого» состояния, ни чего-нибудь зеркального. MSalters, я не уверен на 100%, что происходит во время прогрева, но похоже, что после
запуска

2
Не знают о вашей фоновой настройке, но это пахнет как ситуация, когда ваш сервер никогда не должен выходить из строя. Это говорит о том, что ядро ​​вашего хоста может быть древним и что обновления никогда не применялись. Возможно, это показатель системного конструктивного недостатка, который необходимо учитывать.
Criggie

Ответы:


28

Возможно, вы не можете «горячо клонировать» целый сервер (вы можете, но только если это виртуальная машина), но вы можете заморозить и восстановить один процесс с помощью команды Criu , Checkpoint / Restore в Userspace.

Это позволяет сохранить внутреннее состояние программы на диск и остановить программу, а затем восстановить программу до этого состояния из сохраненных файлов.

Для поддержки желаемой операции вы можете скопировать файлы, представляющие сохраненную программу, на другой сервер и восстановить их там.

Для criu требуется свежее ядро ​​с скомпилированными различными функциями, поэтому старые дистрибутивы Linux могут не работать. Вы можете запустить criu checkна определенном компьютере, чтобы определить наличие предварительных условий для criu.


это выглядит удивительным , и я буду делать некоторые тесты на это, спасибо братан
чен Steven

Из вашего опыта, насколько хорошо это работает на практике? Глядя на списки ограничений (которые в основном ожидаются - это сложная проблема), я чувствую, что вряд ли будет работать с приложениями, которые не были разработаны с учетом этого варианта использования.
James_pic

@James_pic Прошёл, пожалуй, год с тех пор, как я серьёзно к этому относился, так как в данный момент у меня его нет. Для демона, который просто принимает соединения и выполняет некоторые вычисления (например, работу по машинному обучению OP или веб-сервер), он работает довольно хорошо.
Майкл Хэмптон

12

Может быть, это немного выходит за рамки вашей текущей среды, но стандартный способ сделать это - виртуализировать ваш сервер. Многие хосты виртуализации (VMware, virtualbox и т. Д.) Допускают «моментальные снимки», которые сохраняют состояние сервера, которые затем могут быть клонированы в новые экземпляры. Эти новые экземпляры будут иметь точно такое же состояние, что и исходные, вплоть до запущенных процессов. Конечно, вы захотите убедиться, что программное обеспечение, которое вы используете, будет по-прежнему работать корректно в виртуальной среде (на ум приходит расчет CUDA / GPU).


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

Для меня приемлемо запустить проект на «реальной» машине или хосте виртуализации, и мы можем использовать несколько способов обработки «старого» кода, например, A / B-тестирование или обновление .etc. Но вы уверены, что снимки могут полностью клонировать прогретое состояние моего рабочего узла?
Чен Стивен

3
Когда вы «живете-мигрируете» машину, она должна быть приостановлена. Пока он находится в режиме паузы, его память копируется 1: 1 на другой компьютер в кластере, где он не приостановлен - не поврежден. Это может занять некоторое время, в зависимости от того, сколько памяти используется и насколько быстро работает сетевая структура. Вы можете использовать этот метод, если время простоя, которое он вызывает, достаточно мало для ваших нужд.
шпульницы

@chensteven Я недавно пришел из виртуальной среды. Это было некоторое время назад, но, насколько я помню, запущенный снимок содержит точное состояние виртуальной машины на момент создания снимка, включая запущенные процессы и содержимое памяти. Этот моментальный снимок можно затем клонировать в новый 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.