Ubuntu 14.04でBaculaを使用してLAMPサーバーをバックアップする方法

前書き

アプリケーションサーバーを立ち上げて実行した後、重要な次のステップはバックアップシステムをセットアップすることです。 バックアップシステムを使用すると、データの定期的なバックアップコピーを作成し、それらのバックアップからデータを復元できます。 ユーザーエラーや、コンピューターシステムが発生しやすいハードウェア障害が原因でデータが失われる可能性があるため、バックアップをセーフティネットとして設定する必要があります。

このチュートリアルでは、Baculaを実行している別のバックアップサーバーを使用して、単一のUbuntu 14.04サーバー上でLAMPスタックを実行し、PHPアプリケーションの適切なバックアップを作成する方法を示します。 Baculaのようなバックアップシステムを使用する利点の1つは、個々のファイルレベルでバックアップおよび復元する対象と、バックアップを作成するスケジュールを完全に制御できることです。 バックアップを作成するときにファイルレベルの粒度を設定すると、必要なファイルのみにバックアップの選択を制限できるため、ファイルシステム全体をバックアップするよりもディスクスペースを節約できます。

image:https://assets.digitalocean.com/articles/architecture/production/backup_system.png [バックアップ図]

これが過度に思える場合は、https://www.digitalocean.com/community/tutorials/understanding-digitalocean-droplet-backups [DigitalOcean Droplet Backups](ドロップレット全体のスナップショットバックアップ)を検討することをお勧めします。ドロップレットを作成すると有効になります。 これらのバックアップは簡単に設定でき、週単位のバックアップのみが必要な場合は十分な場合があります。 DigitalOceanバックアップを選択する場合は、*データベースのホットバックアップの作成*セクションに従ってデータベースのホットバックアップを設定してください。これは、データベースバックアップの一貫性(使用可能)を確保するために必要です。

前提条件

このチュートリアルでは、プライベートネットワーキングが有効になっている単一のUbuntu 14.04サーバー上のLAMP(Linux、Apache、MySQL / MariaDB、およびPHP)スタックで実行されているWordPressなどのPHPアプリケーションを実行していることを前提としています。 これを* LAMP *サーバーと呼びます。 この例では、次のチュートリアルに従って作成されたWordPressサーバーのバックアップを作成します。

別のPHPアプリケーションを実行している場合、またはApacheの代わりにNginxを使用している場合、バックアップの選択に必要な調整を行っていれば、このチュートリアルは引き続き正常に機能します。

もちろん、Baculaサーバーソフトウェアをインストールするサーバーへのsudoアクセスが必要になります。これを* backups *サーバーと呼びます。 理想的には、LAMPサーバーと同じデータセンターにあり、プライベートネットワークを有効にします。 作成されたバックアップはこのサーバー上に存在するため、バックアップ選択の複数のコピーを保存するのに十分なディスク容量が必要になります。

バックアップ選択

はじめに説明したように、バックアップの選択(バックアップが作成されるたびにコピーされるファイル)は、アプリケーションを以前の状態に復元するために必要なファイルのみで構成されます。 つまり、これは次のデータをバックアップすることを意味します。

  • * PHPアプリケーションファイル:*これは、WebサーバーのDocumentRootになります。 Ubuntuでは、これはデフォルトで `+ / var / www / html`になります

  • * MySQLデータベース:* MySQLデータファイルは通常 `+ / var / lib / mysql +`に保存されますが、別の場所にデータベースのホットバックアップを作成する必要があります。 ホットバックアップはバックアップ選択の一部になります

便宜上、ApacheおよびMySQL構成ファイルもバックアップ対象に含めます。 SSLキーや証明書ファイルなど、他の重要なファイルがある場合は、それらも含めるようにしてください。

サーバー上の残りのファイルは、初期セットアップのソフトウェアインストール手順に従って置き換えることができます。 サーバーに障害が発生した場合、前提条件のチュートリアルに従ってバックアップを復元し、適切なサービスを再起動することにより、交換用のLAMPサーバーを作成できます。

バックアップの選択に前述のファイルを含める理由が不明な場合は、https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-recovery-planning [回復計画]マルチパートの*セグメント*実稼働向けの構築:Webアプリケーション*チュートリアルシリーズ。 例としてマルチサーバー設定を使用して、Webアプリケーションの回復計画を開発する方法を説明します。

データベースのホットバックアップを設定しましょう。

データベースのホットバックアップを作成する

一貫性のある(つまり、 使用可能)アクティブデータベースのバックアップ、特別な注意が必要です。 MySQLでホットバックアップを作成する簡単で効果的な方法は、Percona XtraBackupを使用することです。

Percona XtraBackupをインストールする

  • LAMP *サーバーで、次のチュートリアルに従ってPercona XtraBackupをインストールおよび構成します。https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona -xtrabackup-on-ubuntu-14-04 [Ubuntu 14.04でPercona XtraBackupを使用してMySQLデータベースのホットバックアップを作成する方法]。 * Perform Full Hot Backup *セクションに到達したら停止します。

XtraBackupスクリプトを作成する

Percona XtraBackupはMySQLデータベースのホットバックアップを作成する準備ができており、最終的にBacula(またはDigitalOceanバックアップ)によってバックアップされますが、ホットバックアップは何らかの方法でスケジュールする必要があります。 最も簡単なソリューション、bashスクリプトとcronジョブをセットアップします。

+ / usr / local / bin`に + run_extra_backup.sh + `というbashスクリプトを作成します。

sudo vi /usr/local/bin/run_xtrabackup.sh

次のスクリプトを追加します。 XtraBackupのインストール時に設定したもので、ユーザーとパスワードを必ず置き換えてください。

/usr/local/bin/run_xtrabackup.sh

#!/bin/bash

# pre xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;

# delete existing full backup
rm -r /data/backups/full

# xtrabackup create backup
innobackupex --user=  --password= --no-timestamp /data/backups/full

# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full

保存して終了。 このスクリプトを(スーパーユーザー権限で)実行すると、 `+ / data / backups / full +`にある既存のXtraBackupバックアップが削除され、新しい完全バックアップが作成されます。 つまり、このスクリプトは、データベースのホットバックアップの単一のコピーを保持します。 XtraBackupを使用したバックアップ作成の詳細については、https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-をご覧ください。 ubuntu-14-04#perform-full-hot-backup [XtraBackupチュートリアルのフルホットバックアップの実行]セクション。

スクリプトを実行可能にします。

sudo chmod +x /usr/local/bin/run_xtrabackup.sh

データベースを適切にバックアップするには、Baculaがデータベースをバックアップする前にXtraBackupスクリプトを実行(および完了)する必要があります。 良い解決策は、スクリプトを「バックアップ前スクリプト」として実行するようにBaculaバックアップジョブを設定することですが、https://www.digitalocean.com/community/tutorials/how-to-schedule-を使用することを選択しますシンプルな状態を維持するための、cronとアナクロンのvps [cronジョブ]を使用したルーチンタスク。

cron構成ファイルを作成します( `+ / etc / cron.d +`内のファイルがルートのcrontabに追加されます):

sudo vi /etc/cron.d/xtrabackup

次のcronジョブを追加します。

/etc/cron.d/xtrabackup

   * * *   root    /usr/local/bin/run_xtrabackup.sh

これにより、スクリプトは毎日午後10時30分(22時30分)にrootとして実行されるようにスケジュールされます。 Baculaのデフォルトのバックアップジョブは毎日午後11時5分に実行されるようにスケジュールされているため、この時間を選択しました。これについては後で調整します。 これにより、XtraBackupスクリプトが完了するまで35分かかります。

データベースのホットバックアップが設定されたので、バックアップサーバーにBaculaをインストールしましょう。

バックアップサーバーにBaculaをインストールする

  • backups *サーバーで、次のチュートリアルに従ってBaculaサーバーをセットアップします:https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-ubuntu-14-04[How To Ubuntu 14.04にBaculaサーバーをインストールします]。

次に、このチュートリアルの「Bacula Director Configuration(Server)*の整理」セクションに従ってください:https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with -bacula#organize-bacula-director-configuration-(server)[BaculaでUbuntu 14.04サーバーをバックアップする方法]。 (バックアップしたいサーバー上で)Baculaクライアントをセットアップするとき、Director Nameが必要になります。 * Bacula Client *のインストールと設定*セクションに到達したら停止します。

設定するすべてのバックアップジョブにRemoteFileプールを使用することに注意してください。 とはいえ、先に進む前に設定の一部を変更することもできます。

Bacula ClientをLAMPサーバーにインストールする

  • LAMP サーバーで、このチュートリアルの Baculaクライアントのインストールと設定*セクションに従ってBaculaクライアントをインストールします:https://www.digitalocean.com/community/tutorials/how-to-back-up-an- ubuntu-14-04-server-with-bacula#install-and-configure-bacula-client [BaculaでUbuntu 14.04サーバーをバックアップする方法]。 * Add FileSets(Server)*セクションに到達したら停止します。

`+ bacula-fdからの* FileDaemon Name (通常は「-fd」が付加されたホスト名)と Director Password *(BaculaサーバーがBaculaクライアントへの接続に使用するパスワード)が必要になることに注意してください。 LAMPサーバー上の.conf + `ファイル。

バックアップクライアントをバックアップサーバーに追加する

  • backups サーバー、Baculaサーバーで、LAMPサーバーの Clientリソース*を `+ / etc / bacula / conf.d / clients.conf +`ファイルに追加します。

`+ clients.conf +`ファイルを開きます:

sudo vi /etc/bacula/conf.d/clients.conf

LAMPサーバーのクライアントリソース定義は、次のコードブロックのようになります。 * Name の値は FileDaemon リソースの名前と一致し、 Password Director *リソースのパスワードと一致する必要があることに注意してください。LAMPサーバーでは、これらの値は `+ / etcにありますLAMPサーバー上の/ bacula / bacula-fd.conf + `:

clients.conf-クライアントリソース定義の例

Client {
 Name = -fd
 Address =
 FDPort = 9102
 Catalog = MyCatalog
 Password = ""          # password for Remote FileDaemon
 File Retention = 30 days            # 30 days
 Job Retention = 6 months            # six months
 AutoPrune = yes                     # Prune expired Jobs/Files
}

保存して終了。 これにより、* backups *サーバー上のBacula Directorが各サーバーのBaculaクライアントに接続できるように設定されます。

このセクションの詳細は、https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-serverの* Bacula Client *のインストールと設定にあります。 -with-bacula#install-and-configure-bacula-client [BaculaでUbuntuサーバーをバックアップする方法のチュートリアル]。

それでは、Baculaのバックアップファイルセットを設定しましょう。

Baculaファイルセットを構成する

Baculaは、実行されるバックアップジョブに関連付けられたファイルセットで指定されたファイルのバックアップを作成します。 このセクションでは、以前の* backup selection *の一部であると判断したファイルを含むFileSetの作成について説明します。 Baculaへのファイルセットの追加に関する詳細は、https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#add-で見つけることができますBaculaチュートリアルのfilesets-(server)[FileSets(Server)の追加]セクション。

  • backups *サーバーで、 `+ filesets.conf +`ファイルを開きます:

sudo vi /etc/bacula/conf.d/filesets.conf

バックアップの選択によると、LAMPサーバーに必要なバックアップは次のとおりです。

  • * PHPアプリケーションファイル:* + / var / www / html

  • * MySQLデータベース:* + / data / backups / full +-フルホットバックアップはXtraBackupスクリプトによって毎日午後10時30分に作成されます

便宜上、次のファイルも含めます。

  • * MySQL設定:* + / etc / mysql

  • * Apache設定:* + / etc / apache2 +

  • * XtraBackupスクリプト:* + / usr / local / bin / run_xtrabackup.sh +

  • * XtraBackup cronファイル:* + / etc / cron.d / xtrabackup +

バックアップの選択を念頭に置いて、次のFileSetをBaculaの構成に追加します。

filesets.conf-MySQLデータベース

FileSet {
 Name = "LAMP Files"
 Include {
   Options {
     signature = MD5
     compression = GZIP
   }






 }
 Exclude {

 }
}

保存して終了。 ハイライトされたすべての* File ディレクティブは Include ブロックにあることに注意してください。 これらは、バックアップするすべてのファイルです。 含まれるディレクトリ内に存在するファイルをバックアップジョブから除外する場合は、それらを Exclude *ブロックに追加します。

これで、FileSetが構成されました。 このファイルセットを使用するBaculaバックアップジョブの作成に移りましょう。

Baculaバックアップジョブを作成する

LAMPサーバーのバックアップを実行および作成するBaculaバックアップジョブを作成します。

`+ / etc / bacula / conf.d `に ` jobs.conf +`ファイルを作成します:

sudo vi /etc/bacula/conf.d/jobs.conf

LAMPサーバーバックアップジョブ

LAMPサーバーのバックアップジョブでは、「Backup LAMP」という名前の新しいジョブを作成します。 ここで重要なことは、正しい* Client (lamp-fd)および FileSet *(LAMP Files)を指定することです。

jobs.conf-db1のバックアップ

Job {
 Name = "Backup LAMP"
 JobDefs = "DefaultJob"
 Client =
 Pool = RemoteFile
 FileSet=""
}

保存して終了。

これで、バックアップジョブが構成されました。 最後のステップは、Bacula Directorを再起動することです。

Bacula Directorを再起動します

  • backups *サーバーで、Bacula Directorを再起動して、すべての変更を有効にします。

sudo service bacula-director restart

この時点で、クライアント接続とバックアップジョブをテストする必要があります。両方ともhttps://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14で説明されています。 -04-server-with-bacula#test-client-connection [Baculaでサーバーをバックアップする方法のチュートリアル]。 このチュートリアルでは、Baculaのバックアップを復元する方法も説明しています。 MySQLデータベースを復元するには、https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-に従う必要があることに注意してください。 ubuntu-14-04#perform-b​​ackup-restoration [Percona XtraBackupチュートリアルのバックアップの復元を実行]ステップ。

バックアップスケジュールの確認

Baculaのバックアップスケジュールは、Bacula Directorの設定( + / etc / bacula / bacula-dir.conf +)を変更することで調整できます。 作成したバックアップジョブは、「DefaultJob」JobDefを使用します。これは、「WeeklyCycle」スケジュールを使用します。

  • 月の第1日曜日の午後11時5分に完全バックアップ

  • 他のすべての日曜日の午後11:05の差分バックアップ

  • 月曜日から土曜日の午後11時5分に、他の日に増分バックアップ

これを確認するには、Baculaコンソールを使用してDirectorのステータスを確認します。 スケジュールされたすべてのジョブを出力するはずです:

Director Status - Scheduled JobsScheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Incremental    Backup    10  20-May-15 23:05    BackupLocalFiles   MyVolume
Incremental    Backup    10  20-May-15 23:05    Backup lamp         Remote-0002

バックアップジョブのスケジュールを自由に追加または調整してください。 バックアップをもう少し柔軟にしたい場合は、データベースのバックアップを他のすべてのものから分離するのが賢明でしょう。 この方法では、Percona XtraBackupスクリプトの実行(午後10時30分)と同時に実行されるようにアプリケーションファイルバックアップジョブのスケジュールを変更し、終了時にデータベース(XtraBackupが作成)のホットバックアップをバックアップできます。準備中。 これにより、アプリケーションとデータベースのバックアップが互いに矛盾する可能性が低くなります。

リモートバックアップのセットアップ(オプション)

必要に応じて、Baculaのバックアップのコピーを保存するリモートサーバーを作成できます。 このリモートサーバーは、本番データセンターで災害が発生した場合でも重要なバックアップのコピーを保持できるように、地理的に離れた地域に配置する必要があります。 たとえば、LAMPサーバーとバックアップサーバーがニューヨークにある場合、* remotebackups *サーバーにDigitalOceanのサンフランシスコ(SFO1)リージョンを使用できます。

公開SSHキー、rsync、cronを使用して、* backups サーバーから remotebackups *サーバーにバックアップを送信する簡単な方法を説明します。

  • remotebackups *サーバーで、https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-an-ubuntu-14-04-vps [ユーザーを作成] rsyncログインに使用されます。

次に、* backups サーバーで、rootとしてパスワードなしのSSHキーペアを生成します。 作成した remotebackups *ユーザーに公開キーをインストールします。 これについては、https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys—​2 [SSHキーの設定方法]チュートリアルで説明されています。

  • backups サーバーで、Baculaバックアップデータ( + / bacula / backup +)を remotebackups *サーバーのどこかにコピーするrsyncコマンドを作成します。 Rsyncの使用法は、https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps [Rsyncの使用方法]で説明されています。チュートリアル]。 コマンドはおそらく次のようになります。

rsync -az /bacula/backup @:/

`+ / usr / local / bin / rsync_backups.sh +`などのコマンドをスクリプトに追加し、実行可能にします。

最後に、Baculaのバックアップジョブが通常完了した後、rootとして `+ rsync_backups.sh +`スクリプトを実行するcronジョブを設定する必要があります。 これについては、https://www.digitalocean.com/community/tutorials/how-to-schedule-routine-tasks-with-cron-and-anacron-on-a-vps [Cronで定期タスクをスケジュールする方法]で説明されています。チュートリアル]。

これらすべてを設定したら、翌日に* remotebackups *サーバーにバックアップのコピーがあることを確認します。

バックアップディスクの要件を確認する

バックアップのディスク要件については話しませんでした。 バックアップが使用しているディスク容量を確認し、ニーズとリソースに基づいてセットアップとバックアップのスケジュールを修正する必要があります。

この例では、PHPアプリケーションにかなり大量のコンテンツとメディアがない限り、バックアップはおそらく比較的少ないディスク容量を消費します。 これは、バックアップの選択が非常に保守的であり、デフォルトのバックアップジョブが可能な限り*増分*バックアップを作成するためです。

結論

これで、LAMPサーバーの毎日のバックアップ、および(セットアップする場合)それらのバックアップのリモートコピーが必要になります。 復元プロセスをすばやく実行して、バックアップファイルを復元できることを確認してください。