AWS EC2のディスクアレイ(LVMやダイナミックディスク)をバックアップ パート3:EBSボリュームで構成されたLVM


パート2では、EC2でディスクアレイに対してEBSスナップショットでバックアップを行う場合の課題をご紹介しました。今回は、複数のEBSボリュームにまたがり、構成されたLVMボリュームでバックアップを実行する場合についてご紹介します。


この場合、EBSスナップショットで一貫性のある状態が取得されていることを確認する必要がありますが、AWS APIは現状、完全に同一タイミングで複数ボリュームのスナップショットを取得することはできません。

しかしLVMでは、自身がLVMスナップショットを作成できます。LVMスナップショットは、元のボリュームのボリュームグループに存在し、スナップショット作成以降の元のボリュームに対する全ての変更を保存します。ただ、LVMスナップショット自体をバックアップとして使用することは推奨されません。理由は以下の通りです。

  • LVMはコピーオンライトメカニズムを使用し、変更をスナップショット領域にコピーします。これはリソースを消費し、論理ボリュームのI/Oパフォーマンスに悪影響を与える場合があります。
  • スナップショットはプライマリディスク上のストレージ容量を消費します。
  • スナップショットはプライマリデータに依存しているため、データ損失や破損、停止が発生した場合、プライマリデータと同様に役に立たないものとなります。

このように単体ではバックアップとして使用できないものですが、LVMスナップショットはEBSスナップショットと組み合わせて使用した場合、ボリュームレベルでの整合性を保証する強力な手段となります。EBSスナップショットを作成する直前に、最小限のストレージスペースを割り当ててLVMスナップショットを作成します。その後、EBSスナップショットの作成が完了した直後にLVMスナップショット削除すれば、LVMスナップショットを保持する時間は非常に短時間となり、パフォーマンスへの影響や大容量のストレージスペースの消費といった問題は回避できます。そして、この時に作成されたEBSスナップショットには削除されたLVMスナップショットが含まれます。そのため、復旧する際にLVMスナップショットを使用し、整合性を保った状態への戻すことも可能になります。

LVMスナップショットを作成する際には以下のような実行します。このコードは、スクリプト実行が可能な各種バックアップソフトで使用できますが、ここではCloud Protection Manager(CPM)を使用した場合を例としてご紹介します。CPMを使用する場合、ポリシーを作成し、そのポリシーを各インスタンスやボリュームに割り当てます。このポリシー設定で、EBSスナップショットを作成する直前と直後に実行するスクリプトを指定可能です(beforeおよびafterスクリプト)。これらのスクリプトはCPMサーバインスタンス上で実行され、SSH使用してバックアップ対象のインスタンスに接続しLVMスナップショットに関する操作を実施します。

beforeスクリプト

ここではLVMスナップショットに関するコードのみですが、この前処理としてアプリケーションの静止を実施しているものとします。

#!/bin/bash
ssh -i @ “lvcreate -n snapvolcpm -L 1G -s /dev/mapper/VolGroup00-MyVol00”
if [ $? -gt 0 ]; then
echo “Failed taking lvm snapshot” 1>&2
exit 1
else
echo “lvm snapshot succeeded” 1>&2
fi

このスクリプトではインスタンスにSSHを使用して接続し、事前定義した名前でLVMスナップショットを作成するコマンドを実行しています。実際に運用で使用する際には、さらにエラーチェックを追加する必要がある場合があります。バックアップポリシーに一つ以上のLVMボリュームグループが含まれる場合には、複数のLVMスナップショットを作成する必要があります。

afterスクリプト

ここでは単純にLVMスナップショットの削除を行っています。

#!/bin/bash
if [ $1 -eq 0 ]; then
echo “There was an issue running the first script” 1>&2
fi
ssh -i @“lvremove –force /dev/VolGroup00/snapvolcpm”
if [ $? -gt 0 ]; then
echo “Failed removing lvm snapshot” 1>&2
exit 1
else
echo “remove lvm snapshot succeeded” 1>&2
fi

これらのスクリプトを構成後、LVMにはEBSスナップショットの作成時以外、LVMスナップショットは存在しませんが、EBSスナップショットからリカバリを行うと、その中にはLVMスナップショットが含まれます。インスタンスを復旧するために全てのEBSボリュームをリストア後、最初に、LVMスナップショットに戻す操作が必要になります。そのため、復旧後のインスタンスにログイン後、以下のようにコマンドを実行します

umount / dev / mapper / VolGroup00-MyVol00
lvconvert -merge / dev / VolGroup00 / snapvolcpm
mount/ dev / mapper / VolGroup00-MyVol00 / volume_mountpoint

これらのコマンドで、ボリュームは一度アンマウントされ、スナップショットをメインボリュームとマージした後、再度マウントします。これにより、ボリュームマネージャレベルで一貫性を保証した上で、EBSスナップショットを活用した、効率的で高速なバックアップを実現できます。


関連トピックス:

カテゴリー: クラウド・仮想インフラ タグ: , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

この記事のトラックバック用URL