VPSの効果的なバックアップ戦略を選択する方法
序章
作業とデータをデジタル環境に保存する際の重要な考慮事項は、問題が発生した場合に情報を確実に利用できるようにする方法です。 これは、使用しているアプリケーション、即時フェイルオーバーを行うことの重要性、および予想している問題の種類に応じて、さまざまな意味を持ちます。
このガイドでは、バックアップとデータの冗長性を提供するためのさまざまなアプローチについて説明します。 さまざまなユースケースでさまざまなソリューションが必要になるため、この記事では万能の答えを出すことはできませんが、さまざまなシナリオで何が重要であり、どの実装(または複数の実装)が最適かを学習します。手術。
このガイドの最初の部分では、いくつかのバックアップソリューションを確認し、それぞれの相対的なメリットを確認して、環境に適したアプローチを選択できるようにします。 パート2では、冗長性オプションについて説明します。
冗長性とバックアップの違いは何ですか?
冗長とバックアップという用語の定義は重複していることが多く、多くの場合、混乱しています。 これらは、関連しているが異なる2つの異なる概念です。 一部のソリューションは両方を提供します。
冗長性
データの冗長性は、システムに問題が発生した場合に即座にフェイルオーバーが発生することを意味します。 フェイルオーバーとは、あるデータセットが使用できなくなった場合に、別の完全なコピーがすぐに本番環境にスワップされて代わりになることを意味します。 これにより、知覚できるダウンタイムはほとんど発生せず、アプリケーションまたはWebサイトは何も起こらなかったかのようにリクエストを処理し続けることができます。 その間、システム管理者(この場合はあなた)は問題を修正し、システムを完全に動作可能な状態に戻す機会があります。
これは優れたバックアップソリューションとしても役立つように思われるかもしれませんが、これは危険な誤謬です。 冗長性は、マシンまたはシステム全体に影響を与える障害に対する保護を提供しません。 たとえば、ミラー化されたRAID(RAID 1など)が構成されている場合、データは冗長であり、一方のドライブに障害が発生しても、もう一方のドライブは引き続き使用できます。 ただし、マシン自体に障害が発生すると、すべてのデータが失われる可能性があります。
このタイプのセットアップのもう1つの欠点は、すべての操作がデータのすべてのコピーに対して実行されることです。 これには、悪意のある、または偶発的な操作が含まれます。 真のバックアップソリューションを使用すると、データが良好であることがわかっている以前のポイントから復元できます。
バックアップ
すでに述べたように、重要なデータの機能的なバックアップを維持することが不可欠です。 状況によっては、これはアプリケーションやユーザーデータ、またはWebサイトやマシン全体のバックアップを意味する場合があります。 バックアップの背後にある考え方は、システム、マシン、またはデータが失われた場合に、データを復元、再デプロイ、またはその他の方法でアクセスできるということです。 バックアップからの復元にはダウンタイムが必要になる場合がありますが、1日前の時点から開始することと、最初から開始することの違いを意味する場合があります。 失うわけにはいかないものは、定義上、バックアップする必要があります。
メソッドに関しては、かなりの数の異なるレベルのバックアップがあります。 これらは、さまざまな種類の問題を説明するために、必要に応じて階層化できます。 たとえば、構成ファイルを変更する前にバックアップして、問題が発生した場合に以前の設定に簡単に戻すことができるようにすることができます。 これは、積極的に監視している小さな変更に最適です。 ただし、このセットアップは、ディスク障害またはより複雑な場合に惨めに失敗します。 また、リモートロケーションへの定期的な自動バックアップも必要です。
バックアップ自体は自動フェイルオーバーを提供しません。 つまり、障害によってデータが犠牲になることはありませんが(バックアップが100 % u p-to-dateであると仮定)、稼働時間がかかる可能性があります。 これが、冗長性とバックアップが互いに排除するのではなく、タンデムで使用されることが最も多い理由の1つです。
ファイルレベルのバックアップ
最もよく知られているバックアップの形式の1つは、ファイルレベルのバックアップです。 このタイプのバックアップでは、通常のファイルシステムレベルのコピーツールを使用して、ファイルを別の場所またはデバイスに転送します。
cpコマンドの使用方法
VPSのようなLinuxマシンをバックアップする最も簡単な形式は、cp
コマンドを使用することです。 これは、あるローカルの場所から別の場所にファイルをコピーするだけです。 ローカルコンピューターでは、リムーバブルドライブをマウントして、ファイルをそのドライブにコピーできます。
- mount /dev/sdc /mnt/my-backup
- cp -a /etc/* /mnt/my-backup
- umount /dev/sdc
この例では、リムーバブルディスクをマウントしてから、/etc
ディレクトリをディスクにコピーします。 次に、ドライブをアンマウントします。ドライブは別の場所に保存できます。
Rsyncの使用方法
cp
のより良い代替手段は、rsync
コマンドです。これを使用すると、より柔軟にローカルバックアップを実行できます。 次のコマンドでrsyncを使用して、上記と同じ操作を実行できます。
- mount /dev/sdc /mnt/my-backup
- rsync -azvP /etc/* /mnt/my-backup
- umount /dev/sdc
これは単純で要点ですが、ローカルファイルシステムでのバックアップは面倒で問題があることにすぐに気付くでしょう。 盗難や火災の際にデータを保存する場合は、バックアップドライブを物理的に取り付けたり取り外したりして、別の場所に移動する必要があります。 ネットワークバックアップを使用することで、同じ利点の多くを実現できます。
Rsyncは、ローカルバックアップを完了するのと同じくらい簡単にリモートバックアップを実行できます。 別の構文を使用する必要があります。 これは、rsyncが両端にインストールされている限り、SSHで接続できるすべてのホストで機能します。
- rsync -azvP /etc/* username@remote_host:/backup/
これにより、ローカルマシンの/etc
ディレクトリが/backup
にあるremote_host
上のディレクトリにバックアップされます。 このディレクトリへの書き込み権限があり、使用可能なスペースがある場合、これは成功します。
rsyncを使用してバックアップする方法の詳細については、ここをクリックしてください。
他のバックアップツールの使用方法
cp
とrsync
はシンプルで簡単に使用できますが、必ずしも理想的なソリューションとは限りません。 バックアップを自動化するには、これらのユーティリティをスクリプト化し、ローテーションやその他の機能に必要なコードを記述する必要があります。
幸いなことに、より複雑なバックアップ手順を簡単に実行できるユーティリティがいくつかあります。
Bacula
Baculaは、クライアントサーバーモデルを活用してホストをバックアップする、複雑で柔軟なソリューションです。 Baculaは、クライアント、バックアップの場所、およびディレクター(実際のバックアップを調整するコンポーネント)のアイデアを分離します。 また、各バックアップタスクを「ジョブ」と呼ばれる単位に構成します。
これにより、非常にきめ細かく柔軟な構成が可能になります。 複数のクライアントを1つのストレージデバイスにバックアップし、1つのクライアントを複数のストレージデバイスにバックアップし、ノードを追加したり詳細を調整したりすることで、バックアップスキームをすばやく簡単に変更できます。 ネットワーク環境で十分に機能し、拡張可能でモジュール式であるため、複数のマシンに分散しているサイトまたはアプリケーションのバックアップに最適です。
Baculaバックアップサーバーを構成する方法およびBacula を使用してリモートシステムをバックアップする方法の詳細については、これらのリンクにアクセスしてください。
BackupPC
もう1つの一般的なソリューションはBackupPCです。 BackupPCを使用すると、LinuxおよびWindowsシステムを簡単にバックアップできます。 バックアップサーバーとして機能するマシンまたはVPSにインストールされます。 次に、このサーバーは、通常のファイル転送方法を使用して、クライアントからデータを「プル」します。
このセットアップには、関連するすべてのパッケージを1台の集中型マシンにインストールできるという利点があります。 クライアント側で必要な唯一の構成は、バックアップサーバーのSSHアクセスを許可することです。 これは簡単に構成でき、DigitalOceanを使用すると、展開時にBackupPCサーバーのSSHキーをクライアントに埋め込むことができます。 これにより、追加のソフトウェアを使用せずに、バックアップサーバーからのバックアップを簡単に構成し、本番環境をクリーンに展開できます。
サーバーにBackupPCをインストールして使用する方法については、ここをクリックしてください。
二枚舌
重複は、従来のツールのもう1つの優れた代替手段です。 Duplicityの差別化の主な主張は、GPG暗号化を使用してデータを転送および保存することです。 これにはいくつかの顕著な利点があります。
ファイルのバックアップにGPG暗号化を使用することの明らかな利点は、データがプレーンテキストで保存されないことです。 GPGキーの所有者のみがデータを復号化できます。 これにより、データが複数の場所に保存されている場合に必要なセキュリティ対策の急増を相殺するためのある程度のセキュリティが提供されます。
GPGを定期的に使用しない人にはすぐにはわからないかもしれない他の利点は、各トランザクションが完全に正確であることが検証されることです。 GPGは、転送中にデータが失われないように、厳密なハッシュチェックを実施します。 これは、バックアップからデータを復元するときに、ファイルの破損の問題が発生する可能性が大幅に低くなることを意味します。
Duplicity を使用してGPG暗号化バックアップを有効にする方法については、このリンクをたどってください。
ブロックレベルのバックアップ
少し一般的ではありませんが、ファイルレベルのバックアップの重要な代替手段はブロックレベルのバックアップです。 このスタイルのバックアップは、デバイス全体の複製と復元に使用できるため、「イメージング」とも呼ばれます。 ブロックレベルのバックアップを使用すると、ファイルよりも深いレベルでコピーできます。 ファイルベースのバックアップでは、file1、file2、およびfile3がバックアップ場所にコピーされる場合がありますが、ブロックベースのバックアップシステムでは、これらのファイルが存在する「ブロック」全体がコピーされます。 同じ概念を説明する別の方法は、ブロックレベルのバックアップが情報をビットごとにコピーすると言うことです。 それらは、それらのバイトによって表される可能性のある抽象ファイルを気にしません(ただし、ファイルはプロセスを通じてそのまま転送されます)。
ブロックレベルのバックアップの利点の1つは、通常は高速であるということです。 ファイルベースのバックアップは通常、個別のファイルごとに新しい転送を開始しますが、ブロックベースのバックアップはブロックを転送します。ブロックは通常、より大きく、コピーを完了するために開始する必要のある転送が少なくなります。
ddを使用してブロックレベルのバックアップを実行する
ブロックレベルのバックアップを実行する最も簡単な方法は、おそらくdd
ユーティリティを使用することです。 このソフトウェアは非常に柔軟性がありますが、情報をビットごとに新しい場所にコピーすることができます。 これは、事前の手順なしで、パーティションまたはディスクを単一のファイルまたはrawデバイスにバックアップできることを意味します。
パーティションまたはディスクをバックアップする最も基本的な方法は、次のようにddを使用することです。
- dd if=/path/of/original/device of=/path/to/place/backup
このシナリオでは、if=
は入力デバイスまたは場所を指定します。 of=
は、出力ファイルまたは場所を示します。 これらを逆にした場合、ディスク全体をワイプするのは簡単なので、この区別を覚えておくことが非常に重要です。
/dev/sda3
にあるドキュメントを含むパーティションをバックアップする場合は、次のようなイメージファイルを作成できます。
- dd if=/dev/sda3 of=~/documents.img
Linuxマシンで利用できるブロックレベルのバックアップソリューションは他にもいくつかありますが、ここではそれらについては説明しません。
バックアップのバージョン管理
データをバックアップする主な理由の1つは、不要な変更や削除が発生した場合に、以前のバージョンのファイルまたはファイルのグループを復元できるようにすることです。 これまでに説明したすべてのバックアップメカニズムはある程度これを提供しますが、いくつかの追加ツールを使用して、より堅牢なシステムを実装できます。
これを手動で行う方法は、次のように、編集する前にバックアップファイルを作成することです。
- cp file1 file1.bak
- nano file1
エディターでファイルを変更するたびにタイムスタンプ付きの隠しファイルを作成することで、このプロセスを自動化することもできます。 たとえば、これを~/.bashrc
ファイルに配置できます。
- nano() { cp $1 .${1}.`date +%y-%m-%d_%H.%M.%S`.bak; /usr/bin/nano $1; }
これで、「nano」コマンドを呼び出すと、バックアップが自動的に作成されます。
これはある程度のバックアップを提供しますが、非常に壊れやすく、ファイルを頻繁に編集している場合はすぐにディスクがいっぱいになる可能性があります。 これは優れたソリューションではなく、編集するファイルを手動でコピーするよりもはるかに悪い結果になる可能性があります。
この設計に固有の問題の多くを解決する別の方法は、git
を使用することです。これは、特にバージョン管理システムです。 明らかではないかもしれませんが、gitを使用してほとんどすべての種類のファイルを制御できます。
次のように入力するだけで、ホームディレクトリにgitリポジトリをすぐに作成できます。
- cd ~
- git init
特定のファイルを除外するには、ここで設定を微調整する必要がありますが、一般に、複雑なバージョン管理が即座に作成されます。 次に、ディレクトリの内容を追加し、次のようにしてファイルをコミットできます。
- git add .
- git commit -m "Initializing home directory"
gitの組み込みシステムを使用して、リモートの場所に簡単にプッシュすることもできます。
- git remote add backup_server git://backup_server/path/to/project
- git push backup_server master
これは、単独でバックアップするのに最適なシステムではありませんが、別のバックアップシステムと組み合わせると、このタイプのバージョン管理により、行った変更を非常にきめ細かく制御できます。
gitの使用方法およびgitを使用して通常のファイルをバージョン管理する方法の詳細については、これらのリンクを確認してください。
VPSレベルのバックアップ
バックアップを自分で管理することは重要ですが、DigitalOceanには、独自のバックアップを補足するメカニズムもいくつか用意されています。
このサービスを有効にした液滴の自動バックアップを定期的に実行するバックアップ機能があります。 [バックアップ]チェックボックスをオンにすると、ドロップレットの作成中にこれをオンにできます。
これにより、VPSイメージ全体がバックアップされます。 これは、バックアップから簡単に再デプロイしたり、新しいドロップレットのベースとして使用したりできることを意味します。
システムの1回限りのイメージングでは、スナップショットを作成することもできます。 これらはバックアップと同じように機能しますが、自動化されていません。 実行中のシステムのスナップショットを撮ることは可能ですが、ファイルシステムが一貫した状態にあることを確認するために、通常は電源を切ることをお勧めします。 2016年10月以降、スナップショットのコストは、ファイルシステム内の使用済みスペースの量に基づいて、1ギガバイトあたり月額0.05ドルになります。 ドロップレットに移動し、左側のメニューから[スナップショット]を選択して、それらを作成できます。
DigitalOceanのバックアップとスナップショットの詳細については、ここをクリックしてください。
結論
この記事では、さまざまなバックアップの概念とソリューションについて説明しました。 パート2では、冗長性を有効にするためのいくつかのオプションについて説明します。