バックアップ戦略としてのLVMスナップショット


17

バックアップ戦略として、xen domUの定期的なLVMスナップショットはどの程度実行可能でしょうか?長所、短所、落とし穴はありますか?

私にとっては、ブレインレスの高速復元に最適なソリューションのようです。中断したことなくdomUが正常に実行されている状態で、破損した論理ボリュームで調査を行うことができます。

編集:

システムの完全バックアップを行うとき、私は今ここにいます。

  • domUディスクのlvmスナップショット
  • サイズがスナップショットのサイズに等しい新しい論理ボリューム。
  • dd if = / dev / snapshot of = / dev / new_lv
  • lvremoveを使用したスナップショットの破棄
  • kpartx / mount / lsによるオプションの検証

次に、これを自動化する必要があります。

回答:


32

LVMスナップショットは、凍結状態のファイルシステムをキャプチャすることを目的としています。 それらは、それ自体のバックアップではありません。ただし、凍結されたイメージはバックアッププロセス中に変更できないため、変更されないため、一貫性のあるバックアップイメージを取得するのに役立ちます。 したがって、これらを直接使用して長期バックアップを作成することはありませんが、使用することに決めたバックアッププロセスでは非常に価値があります。

スナップショットを実装するには、いくつかの手順があります。1つ目は、新しい論理ボリュームを割り当てる必要があることです。このボリュームの目的は、ファイルシステムへのデルタ(変更)が記録される領域を提供することです。これにより、既存の読み取り/書き込みアクセスを中断することなく、元のボリュームを継続できます。これの欠点は、スナップショット領域のサイズが有限であることです。これは、書き込みが忙しいシステムでは、かなり早くいっぱいになる可能性があることを意味します。大量の書き込みアクティビティがあるボリュームの場合、スナップショットのサイズを増やして、すべての変更を記録するのに十分なスペースを確保する必要があります。スナップショットがオーバーフローする(いっぱいになる)と、両方のスナップショットが停止し、使用不可としてマークされます。これが発生した場合、元のボリュームをオンラインに戻すことができるように、スナップショットを解放する必要があります。リリースが完了すると、

2番目に起こることは、LVMが問題のボリュームの真の目的を「スワップ」することです。新しく割り当てられたスナップショットは、ファイルシステムへの変更を探す場所になると思うでしょう、結局のところ、すべての書き込みが行われる場所ですよね?いいえ、それは逆です。ファイルシステムはLVMボリューム名にマウントされるので、システムの残りの下から名前を交換することは、no-noになります(スナップショットは別の名前を使用するため)。したがって、ここでの解決策は簡単です。元のボリューム名にアクセスすると、スナップショットを作成したボリュームのライブ(読み取り/書き込み)バージョンを引き続き参照します。作成するスナップショットボリュームは、凍結を参照します(読み取り専用)バックアップするボリュームのバージョン。最初は少し混乱しますが、理にかなっています。

これらはすべて2秒未満で発生します。システムの残りの部分は気づいていません。もちろん、オーバーフローする前にスナップショットをリリースしない限り...

ある時点で、スナップショットを解放して、スナップショットが占有しているスペースを再利用できます。リリースが完了すると、スナップショットボリュームはボリュームに戻され、元のボリュームが残ります。

長期的なバックアップ戦略としてこれを追求することはお勧めしません。障害が発生する可能性のある同じ物理ドライブ上でデータをホストしているため、障害が発生したドライブからのファイルシステムの回復はバックアップされません。

だから、簡単に言うと:

  • スナップショットはバックアップの支援に適しています
  • スナップショットは、それ自体がバックアップの形式ではありません
  • スナップショットは永遠に続きません
  • 完全なスナップショットは良いことではありません
  • スナップショットはある時点でリリースする必要があります
  • LVMは、賢く使用すればあなたの友達です。

4
また、LVMスナップショットのパフォーマンスは直線的に低下します-8スナップショットはIOの8倍です。
スティーブン

9
あなたの説明には、私が間違っていると思ういくつかの点があります。LVMの現在のバージョンでは、スナップショットがいっぱいになると、スナップショットは使用不可とマークされ、削除する必要があります。デバイスのI / Oは停止しません。第二に、スナップショットを削除すると、データは元のボリュームにコピーされません。基本的に、ライブボリュームに書き込むと、元のブロックが最初にスナップショットにコピーされ、次にライブブロックが更新されます。次に、スナップショットを削除するときは、デバイスマッパーからエントリを削除するだけです。コピーは不要です。
カミルキジエル2009年

2
完全を期すために、Kamil Kisielは正しい。参照:tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html
ktower

1
誤った情報を与えられたために自分自身に多くの不平を言った後、答えは文書化と議論の複数のソースに基づいて修正されました。申し訳ありませんが、私の悪い。
エイブリーペイン

10

LVMスナップショットは、オフラインにせずにサーバーをバックアップできるという点で優れています。前述のように、LVMスナップショットはほとんどインスタントコピーです。lvcreateLV自体を作成するのと同じようにコマンドを使用してそれらを作成し--snapshotます。VGの代わりにオプションと元のLV を指定するだけです。例えば:

lvcreate -L <LV size> -s -n <snapshot name> /dev/<VG name>/<LV name>

これにより、指定されたスナップショット名で特定のLVのスナップショットが作成され、このスナップショットLVをマウントして使用することで、ファイルがアクティブに使用されることを心配せずにバックアップを実行できます。これは、アクティブなデータベースサーバーをバックアップしようとする場合に特に役立ちます。

スナップショットからのバックアップが完了したら、他の人が言及しているように、追加のI / Oオーバーヘッドやその他のパフォーマンスの問題を減らすためにスナップショットを削除します。

lvremove /dev/<VG name>/<snapshot name>

LVMスナップショットは、データベースなどのシステムの信頼性の高いバックアップを作成するのに非常に貴重であり、ファイルの競合を避けるために通常はバックアップにシャットダウンする必要がある場合がありますが、クイックリストアとしての長期操作には理想的ではありません。


9

良い考えではありません、IMO。

スナップショットはコピーオンライト方式で実装されるため、すべての書き込みを読み取りと2つの書き込みに変更します(更新するブロックは、最初にメインボリュームから読み取られ、新しいデータが配置される前にスナップショットボリュームに格納されますその場所)ので、VMで大量の書き込みが一般的である場合、パフォーマンスの低下が見られます。

また、IIRCは、スナップショットボリュームがいっぱいになると、単に不意にドロップされます。これはバックアップの目的には適していません!したがって、これをバックアップ方法として試す場合は、スナップショットの有効期間中に発生するすべての変更を処理できるように、スナップショットボリュームを十分に大きくしてください。もちろん、サイズの問題を認識して監視し、パフォーマンスの問題があなたにとって問題ではない場合、提案することは、適切な他のバックアッププロセスに役立つ追加になる可能性があります。

LVMスナップショットは、バックアッププロセスの一部として非常に便利です(スナップショットの取得、スナップショットを他の場所にバックアップして、「実」ボリュームへの更新を無効にすることなく一貫性を確保し、その後スナップショットを削除する)、しかし、それ自体ではバックアップ機能として意図されていません。


スナップショットがどのように機能するか理解していないかもしれません。マニュアルでは、スナップショットは論理ボリュームのほぼ瞬時のコピーであり、それを使用するシステムをオフラインにする必要がないと述べています。あなたの説明から、スナップショットは、フリーズされたコピーではなく、ブランチ、レプリカのように見えるでしょう。スナップショットは、元のシステムの作成後に行われたすべての変更で更新されますか?その場合、バックアップのストレージメカニズムとして意図されていないため、すぐにデータを取り出してスナップショットを破棄する必要がありますか?ありがとう!
カロリスT.

2
作成元のボリュームのフリーズコピーですが、スナップショットが取得されてから変更されたブロックのみが含まれます(スナップショットボリュームは、スナップショットのボリュームよりもはるかに小さくすることができます)。ライブボリュームでブロックが更新されると、元のブロックのコンテンツがスナップショットのストレージに追加されるため、スナップショットを見ると、LVMは更新されたブロックではなく元のブロックを提供できます。
デビッドスピレット2009年

しかし、それが変更された場合(スナップショット)、この「フリーズ」はどこから来たのでしょうか?私はこのシナリオを持っているとしましょう、稼働中のシステムが何らかの形で時間の経過とともに破損します。正常に動作していたときのスナップショットがあります。スナップショットは、システムがまだ正常に動作している間、システムの表現になりますか、それとも元のシステムを最初に破損させた変更がありますか?私が十分に明確であり、本当にそれを本当に理解していることを確認したいだけです。
カロリスT.

凍結がどこから来たのかを理解するために、アクティブなファイルシステムを含むオリジナルと、ファイルシステムの凍結バージョンを変更するスナップショットという2つの別個のボリュームがあることを理解してください。詳細については私の答えをご覧ください。
エイブリーペイン

1
あなたの人々はそれをより複雑に聞こえさせます。スナップショットは、スナップショットが作成されたときのソースファイルシステムの状態を保存します。ソースfsが変更されても、スナップショットは変更されないため、ソースfsの代わりにスナップショットから読み取るようにバックアッププログラムを指定できます。はい、コピーオンライトが画面の背後で発生しますが、ユーザーは余分なIO使用を除いてこれに気付きません。
マーティンヒーメルス

6

スナップショットを作成する前に、ディスク上のデータが一貫した状態であることを確認する必要があります。たとえば、mysqlには、データベースをダンプするかシャットダウンすることで、ディスクに強制的に格納する必要があるメモリにデータがキャッシュされている場合があります。詳細については、アプリケーションのマニュアルを参照してください。


5

スマートに見えるものの下では、LVMは実際には「単なる」デバイスマッパートリックです。lvcreateを使用してスナップショットを作成することは、dmsetupの一部のラッパーにすぎません。ラッパーは、1つの古いボリューム(元のlv)と新しいボリューム(copy-on-writeボリューム)から新しいデバイス(スナップショットボリューム)を作成します。それとともに、元のLVの名前が-realに変更されます(以下を参照、dmsetup ls --tree出力)。この-real LVは、スナップショットボリュームと元のボリュームの両方にマッピングされるため、両方の場所で使用できます。コピーオンライトボリュームは、-real LVのオーバーレイとして機能します。-snap LVは、コピーオンライトボリュームと-realボリュームの組み合わせを示します。これにより、実際にパフォーマンスのオーバーヘッドが発生します。

Volume00-snap (253:11)
 |-Volume00-snap-cow (253:13)
 |  `- (104:2)
 `-Volume00-LogVol01-real (253:12)
    `- (104:2)

Volume00-LogVol01 (253:5)
 `-Volume00-LogVol01-real (253:12)
    `- (104:2)

スナップショットを削除すると、再び名前の変更とマッピングが発生します。その後、状況は再び次のようになります

Volume00-LogVol01 (253:5)
 `- (104:2)

これはどの程度までバックアップするのが良い方法ですか:これを考慮すると、(1)仮想マシンのRAMに役立たず、(2)パフォーマンスが低下し、(3)必要になりますスナップショットの画像を別の場所に保存します。

VMware VCBは、LVMスナップショットではありませんが、スナップショットでも機能します。


4

スナップショットがパフォーマンスに影響を与えなかったとしても、理解する必要があります。スナップショットは、同じディスク上の別のフォルダーへのコピー以上のバックアップではありません。

ディスクがブレーキをかけると、データとバックアップが失われます。スナップショット領域をVGの別のPEに割り当てた場合でも、スナップショット以降に変更されたデータのみが含まれます。

バックアップとは、最低要件として少なくとも完全に別のドライブへのコピーを意味します。


はい、わかりました。RAID 1は、ストレージデバイスの障害、ソフトウェアの破損からの遠隔地へのバックアップを保護するために用意されています。LVMスナップショットは、fが何であるかわからず、現在オンラインのシステムが必要な場合に、本当に高速な復元を行うためのツールとして検討しています。他のオプションは、LVMバックアップからdomUを復元するよりも高速ですか?
T.

3

VMwareサーバーマシンとmysqlデータベースのスナップショットにこのようなセットアップを使用します。これまでのところ正常に動作します。いくつかの復元がありました-すべて問題なく。考慮すべき点が1つあります。スナップショットlvmを使用して実行すると、I / O操作のパフォーマンスが著しく低下します。見てここに。彼らがmysqlについて語るという事実を無視し、I / OオペレーションはI / Oオペレーションです... lvmにどんな種類のデータが置かれていても。


1
あは。ええ-スナップショットが作成され、リモートストレージサーバーにエクスポートされると思います。ローカルホストに残されていません。
pQd 2009年

2

lvmスナップショットは、DomU Lvを別のVgの別のスナップショットにコピーするためにのみ使用します。各ドメインには、3つのバックアップ「ノード」があります。

その後、スナップショットは破棄され、バックアップLvは次のラウンドまで残ります。復元する必要がある場合は、バックアップVgからソースLvを選択し、ドメインLvにコピーするだけです。

時々、バックアップLvは別のサーバーのイメージファイルにダンプされます。

これらはすべてスクリプトによって自動化され、バックアップは2日ごとに、ダンプは毎週行われます。

「パニック」モードを念頭に置いて、ドメインLvを復元しますが、スナップショットから実行し、2時間ごとにリセットします。 。


1

「パニックモード」の防衛線はどうなりましたか?

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