生きているLinuxサービスのホットクローン


14

リブートできないなどの理由だけでなく、Linuxサービスが生きているときにホットクローンを作成する必要があります。それは私たちの特別なシナリオのためです(はい、私はすでにこの答えを読んでいますが、それは私のCloneで動作するLinuxサーバーとは少し異なります)。

計算ノードがあります。いくつかのモデルを実行しているNLP計算ノードと言えます。(もちろんサービスを使用して)ノードを起動すると、数回フィードするまで計算がひどく遅くなります。ウォームアップと呼ばれます。

残念ながら、ウォームアップジョブが待機するのに長い時間がかかります(ノードがウォームアップする前に計算が終了した可能性があります)。

そこで問題が発生します。Linuxサーバーをホットクローンしてノードを最高のパフォーマンスに保ち、より短時間でクローンを作成してオンラインにするための安定した方法はありますか。


マシンを視覚化し、「ウォームアップ」状態のスナップショットを撮ることは何の役に立つでしょうか?
TripeHound

13
このウォームアップが発生する理由を理解していますか?たとえば、ファイルキャッシュの副作用である可能性があります。しかし、クローンマシンに対するいくつかの答えは、ファイルキャッシュを破棄します。これは、定義によってキャッシュが元のオリジナルから再構築できるためです。
–MSalters

fork()は、起動時のオーバーヘッドを節約しながら、特定のマシンでより多くのプロセスを作成する1つの方法です。
さらに別のユーザー

@TripeHoundに感謝します。VMWareで働いている友人に尋ねましたが、彼は単に「ウォームアップ」状態のスナップショットを撮ることは不可能だと言いました。MSaltersは、私はウォーミングアップ中に何が起こるかわから100%ではないんだけど、計算ジョブが含まれた後、いくつかの遅延読み込みジョブが動作しますが、サービスの起動後のように見える
チェン・スティーブン

2
バックグラウンドのセットアップには気づきませんが、これはサーバーが決してダウンしてはならない状況のようなにおいがします。これは、ホストのカーネルが古く、更新プログラムが適用されたことがないことを示唆しています。おそらくこれは、考慮すべきシステム設計上の欠陥の指標です。
クリギー

回答:


28

サーバー全体を「ホットクローン」することはできませんが(仮想マシンの場合のみ可能)、criuを使用して単一のプロセスをフリーズおよび復元できます(ユーザースペースにチェックポイント/復元)。

これにより、プログラムの内部状態をディスクに保存してプログラムを停止し、後で、保存したファイルからプログラムをその状態に復元できます。

目的の操作をサポートするために、保存したプログラムを表すファイルを別のサーバーにコピーして、そこに復元できます。

criuには、さまざまな機能がコンパイルされた最新のカーネルが必要であるため、古いLinuxディストリビューションは動作しない可能性があります。criu check特定のマシンで実行して、criuの前提条件が存在するかどうかを判断できます。


それは素晴らしい見て、私はこの上でいくつかのテストをやる、感謝仲間
陳スティーブン

あなたの経験から、これは実際にどれくらいうまく機能していますか?制限項目リスト(これは私が期待するもののほとんどです-これは難しい問題です)を見ると、このユースケースを念頭に置いて設計されていないアプリケーションでは動作しそうにないと感じます。
James_pic

@James_pic現在使用していないので、真剣に調べてから1年が経ちました。接続を受け入れて何らかの計算(OPの機械学習ジョブ、またはWebサーバーなど)を実行しているだけのデーモンでは、かなりうまく機能します。
マイケルハンプトン

12

現在の環境の範囲から少し外れているかもしれませんが、これを行うための業界標準の方法は、サーバーを仮想化することです。多くの仮想化ホスト(VMware、virtualboxなど)では、サーバーの状態を保存する「スナップショット」が許可され、新しいインスタンスにクローンを作成できます。これらの新しいインスタンスは、実行中のプロセスに至るまで、元のインスタンスとまったく同じ状態になります。もちろん、実行しているソフトウェアが仮想環境で正しく実行されることを確認する必要があります(CUDA / GPU計算が思い浮かびます)。


ソフトウェア(またはその依存関係)で更新が必要になるまで、仮想化は優れており、適切なリロードメカニズムは提供されません。VMスナップショットまたはライブマイグレーションが古いコードを実行しています。
ジョンマハワルド

「実際の」マシンまたは仮想化ホストでプロジェクトを実行することは私にとって受け入れられ、A / Bテストやローリング更新などの「古い」コードを処理する方法をいくつか取ることができます。しかし、スナップショットは、作業ノードのウォームアップ状態を完全に複製できると確信していますか?
チェンスティーブン

3
マシンを「ライブ移行」するときは、一時停止する必要があります。一時停止している間、そのメモリはクラスタ内の別のマシンに1:1でコピーされます。これは、使用中のメモリの量とネットワークファブリックの速度によっては時間がかかる場合があります。起動するダウンタイムの量がニーズに対して十分に短い場合、このメソッドを使用できる場合があります。
スプーラー

@chensteven最近私はvirtualbox環境から来ました。それは少し前のことですが、私が覚えているのは、実行中のスナップショットには、実行中のプロセスやメモリの内容など、スナップショットが作成された時点のvmの正確な状態が含まれていることです。その後、このスナップショットを新しいvmに複製して、まったく同じ状態の2台のマシンを作成できます。
cawwot

3

あなたが言及した質問はリンクを指します、 http://www.linuxfocus.org/English/March2005/article370.shtmlの参照します。これは、私があなたのリクエストを行うことを想像していたすべての方法を説明しています。

オプションが存在するということは、サーバーで実行されているものにとってあまり意味がありません。クローン作成プロセスで変更される可能性のあるすべてのファイルは、ターゲットマシン上で一貫性のないファイルになる可能性があることを考慮する必要があります。その投稿で、あなたは彼らがデータベースについて話すことを提供し、そのようにクローンを作成しても、データの完全性を保証しません。

「何回か餌をあげるまで」とはどういう意味かは明確ではありません。

しかし、私があなたの質問をよく理解しているなら、システムを複製するためにはリソースをコピーして計算する時間が必要だと考えなければなりません。

「ON / OF」またはそれ以上のアクティブ/バックアップ環境を実行するには、サーバーをクラスタ内で適切に構成する必要があります。

あなたが期待する答えではない場合は申し訳ありませんが、あなたが得るオプションはそれらです。


ここで少し混乱させるのは私のせいです。「フィード」は、サービスの起動後、計算タスクを数回呼び出して、ノードが最高のパフォーマンスに「ウォームアップ」されるようにする必要があることを意味します。したがって、ここでの問題は、システムにヒットする多数の要求が、新しい計算ノードをセットアップするのに十分な時間がないため(ウォームアップに時間がかかりすぎる)、生きているジョブの動的なクローンまたは拡張のようなものです波が来るように、それらを処理します
チェンスティーブン

1

実行しようとしていることには多くの潜在的な問題があります。もちろん、データが動的に保存されていないときにサーバーをオフラインにしてクローンを作成するのが最善です。

しかし、あなたがしようとしていることは、私が以前にやったように、完全にもっともらしいです。使用ddする場合、ブロックレベルでサーバー全体を別のドライブまたは別のサーバーに複製できます。ただし、新しいサーバーで追加のセットアップが必要になり、おそらく他のサーバーをオフにして新しいサーバーをオンにすることはおそらくできないでしょう。これを理解するには、サーバーのハードウェアとソフトウェアに関するいくつかのことを知る必要があります。

まず、最良のデータ戦略を決定するために、何が定期的に更新されているかを知ることが役立つでしょう。動的に更新しているが静的なコンテンツを持っているSQLサーバーはありますか?あるいは、コンテンツの更新を継続的に送信するgitなどのサブバージョン管理システムを使用する開発者チームがありますか?更新内容に応じて、最善の完全な行動方針が決定されます。

たとえば、定期的に更新しているのがSQLのみである場合、そのサーバーが次の方法で稼働している間に新しいサーバーに移行できます。

  • dd すべてのデータを新しいサーバーに複製します。
  • 新しいサーバーのセットアップを開始します。ハードウェアが異なる場合は特に多少の作業が必要になりますが、最初からセットアップするよりも高速です。
  • また、最初のサーバーが稼働している間に2番目のサーバーで作業する必要がある場合、別のサーバーで同じDNSを使用できないため、DNSの変更が必要になる場合があります。
  • 新しいサーバーが完成して独立して実行されたら、元のサーバーでSQLサーバーの最終バックアップを取り、それを新しいサーバーにインポートします。

データを見逃さないように、元のサーバーを一時的にオフラインにする必要がある場合があります。あるいは、ダウンタイムをゼロにするには、2回目のライブを行い、DNSを新しいサーバーに向け、新しいサーバーでDNSエントリを手動で更新することで、ダウンタイムを事実上ゼロにすることができます。これは、SQLをバックアップして新しいサーバーに復元するための数分のダウンタイムよりも手間がかかりますが、ゼロのダウンタイムには必要な場合があります。

もちろん、これは1つのユースケースの例にすぎず、構成といくつかの変数によっては、特定のケースに基づいて独自の移行戦略を作成する必要があります。

もう1つの問題は、サーバーのハードウェア構成に関するものです。新しいサーバーのハードウェアは、古いサーバーと100%同じですか?その場合、セットアップは簡単です。ただし、まったく別の完全に異なるハードウェア構成である場合は、2番目のサーバーを事前に単純にセットアップし、すべてのデータとSQLデータベースをバックアップするという別の戦略を実装する必要がある場合があります最初のサーバーを手動で移行し、必要に応じて構成を変更します。

サーバーの移行は決して些細なことではありません。移行を成功させるためには、サーバーに関する深い知識、または同じサーバーを持っているスタッフが必要です。いずれにせよ、最悪のシナリオが発生した場合(サーバーがクラッシュして修復不能な状態になった場合)、まだ別のコンピューターが存在するように、すぐに完全バックアップを作成して、ローカルコンピューター上であっても3番目のソースに保存することを強くお勧めしますサーバーを再構築するためのデータのコピー。

これがお役に立てば幸いです。そして、サーバーの移動に幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.