序章

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

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

これが過度に思われる場合は、 DigitalOcean Droplet Backups (Droplet全体のスナップショットバックアップ)を検討することをお勧めします。これは、Dropletを作成するときに有効にする必要があります。 これらのバックアップはセットアップが簡単で、毎週のバックアップのみが必要な場合は、ニーズに十分対応できる場合があります。 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サーバーを作成できます。

前述のファイルをバックアップの選択に含める理由がわからない場合は、マルチパート本番環境用の構築:Webアプリケーションチュートリアルシリーズのリカバリ計画セグメントを確認してください。 マルチサーバーセットアップを例として使用して、Webアプリケーションの回復計画を作成する方法について説明します。

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

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

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

PerconaXtraBackupをインストールします

LAMP サーバーで、次のチュートリアルに従ってPerconaXtraBackupをインストールおよび構成します。Ubuntu14.04でPerconaXtraBackupを使用してMySQLデータベースのホットバックアップを作成する方法。 フルホットバックアップの実行セクションに到達したら停止します。

XtraBackupスクリプトを作成する

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

と呼ばれるbashスクリプトを作成します run_extra_backup.sh/usr/local/bin:

  1. 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=bkpuser  --password=bkppassword --no-timestamp /data/backups/full

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

保存して終了。 このスクリプトを(スーパーユーザー権限で)実行すると、既存のXtraBackupバックアップが削除されます。 /data/backups/full 新しい完全バックアップを作成します。 つまり、このスクリプトはデータベースのホットバックアップの単一コピーを維持します。 XtraBackupを使用したバックアップの作成の詳細については、XtraBackupチュートリアルのフルホットバックアップの実行セクションを参照してください。

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

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

データベースを適切にバックアップするには、Baculaがデータベースのバックアップを試みる前に、XtraBackupスクリプトを実行(および完了する)する必要があります。 良い解決策は、スクリプトを「バックアップ前スクリプト」として実行するようにBaculaバックアップジョブを構成することですが、単純にするためにcronジョブを使用することを選択します。

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

  1. sudo vi /etc/cron.d/xtrabackup

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

/etc/cron.d/xtrabackup
30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

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

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

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

backups サーバーで、次のチュートリアルに従ってBaculaサーバーをセットアップします: Ubuntu14.04にBaculaサーバーをインストールする方法。

次に、このチュートリアルの Organize Bacula Director Configuration(Server)セクションに従ってください:Baculaを使用してUbuntu14.04サーバーをバックアップする方法。 (バックアップするサーバー上で)Baculaクライアントをセットアップするときにディレクター名が必要になります。 BaculaClientのインストールと設定セクションに到達したら停止します。

設定するすべてのバックアップジョブにRemoteFileプールを使用することに注意してください。 そうは言っても、先に進む前にいくつかの設定を変更することをお勧めします。

LAMPサーバーにBaculaクライアントをインストールする

LAMP サーバーで、このチュートリアルのBaculaクライアントのインストールと構成セクションに従ってBaculaクライアントをインストールします。Baculaを使用してUbuntu14.04サーバーをバックアップする方法ファイルセットの追加(サーバー)セクションに到達したら停止します。

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

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

バックアップサーバーであるBaculaサーバーで、LAMPサーバーのクライアントリソースをに追加します。 /etc/bacula/conf.d/clients.conf ファイル。

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

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

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

projects.conf —クライアントリソース定義の例
Client {
  Name = lamp-fd
  Address = lamp_private_IP_or_hostname
  FDPort = 9102
  Catalog = MyCatalog
  Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46"          # password for Remote FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

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

このセクションの詳細については、[X54X]Baculaを使用したUbuntuサーバーのバックアップ方法チュートリアルのBaculaクライアントのインストールと構成を参照してください。

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

Baculaファイルセットを設定する

Baculaは、実行されるバックアップジョブに関連付けられているFileSetで指定されているファイルのバックアップを作成します。 このセクションでは、以前にバックアップ選択の一部であると判断したファイルを含むファイルセットの作成について説明します。 BaculaへのFileSetsの追加の詳細については、Baculaチュートリアルの Add FileSets(Server)セクションを参照してください。

バックアップサーバーで、 filesets.conf ファイル:

  1. 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
    }
    File = /var/www/html
    File = /data/backups
    File = /etc/mysql
    File = /etc/apache2    
    File = /usr/local/bin/run_xtrabackup.sh
    File = /etc/cron.d/xtrabackup
  }
  Exclude {
    File = /data/backups/exclude
  }
}

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

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

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

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

作成する jobs.conf のファイル /etc/bacula/conf.d:

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

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

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

jobs.conf —バックアップdb1
Job {
  Name = "Backup LAMP"
  JobDefs = "DefaultJob"
  Client = lamp-fd
  Pool = RemoteFile
  FileSet="LAMP Files"
}

保存して終了。

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

BaculaDirectorを再起動します

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

  1. sudo service bacula-director restart

この時点で、クライアント接続とバックアップジョブをテストする必要があります。どちらもBaculaチュートリアルでサーバーをバックアップする方法で説明されています。 このチュートリアルでは、Baculaバックアップを復元する方法についても説明しています。 MySQLデータベースを復元するには、PerconaXtraBackupチュートリアルのPerform BackupRestorationの手順に従う必要があることに注意してください。

バックアップスケジュールを確認する

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

  • 月の第1日曜日の午後11時5分に完全バックアップ
  • 他のすべての日曜日の午後11時5分の差分バックアップ
  • 月曜日から土曜日の午後11時5分の他の日の増分バックアップ

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

Director Status — Scheduled Jobs
Scheduled 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 サーバーで、rsyncログインに使用されるユーザーを作成します。

次に、 backups サーバーで、パスワードなしのSSHキーペアをrootとして生成します。 作成したremotebackupsユーザーに公開鍵をインストールします。 これについては、SSHキーの設定方法チュートリアルで説明しています。

backups サーバーで、Baculaバックアップデータをコピーするrsyncコマンドを記述します(/bacula/backupremotebackupsサーバーのどこかに。 Rsyncの使用法については、Rsyncの使用方法チュートリアルで説明されています。 コマンドはおそらく次のようになります。

  1. rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup

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

最後に、を実行するcronジョブを設定する必要があります rsync_backups.sh Baculaのバックアップジョブが通常完了した後、rootとしてスクリプトを作成します。 これについては、Cronチュートリアルでルーチンタスクをスケジュールする方法で説明されています。

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

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

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

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

結論

これで、LAMPサーバーの毎日のバックアップと(設定した場合は)それらのバックアップのリモートコピーが作成されます。 復元プロセスをすばやく実行して、バックアップされたファイルを復元できることを確認してください。