実動用の構築:Webアプリケーション—バックアップ

前書き

アプリケーションのさまざまなコンポーネントの回復計画を思いついたら、それをサポートするために必要なバックアップシステムをセットアップする必要があります。 このチュートリアルでは、Baculaをバックアップソリューションとして使用することに焦点を当てます。 Baculaなどの本格的なバックアップシステムを使用する利点は、個々のファイルレベルでバックアップおよび復元するものを完全に制御できることであり、最適な方法に従ってバックアップおよび復元をスケジュールできることです。

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

DigitalOcean Droplet Backups(Droplet全体のスナップショットバックアップ)などのソリューションは簡単にセットアップでき、ニーズには十分です。毎週のバックアップのみが必要な場合。 DigitalOceanバックアップを選択する場合は、*データベースのホットバックアップの作成*セクションに従って、データベースのホットバックアップを設定してください。

チュートリアルのこの部分では、Baculaをセットアップして、アプリケーションのセットアップ(db1、app1、app2、およびlb1)を構成するサーバーの*必要なバックアップ*の毎日のバックアップを維持します。 、これはBaculaを使用してLAMPスタックのバックアップを作成する方法を示すチュートリアルです。 また、Percona XtraBackupを使用して、MySQLデータベースのホットバックアップを作成します。 最後に、rsyncを使用して、リモートデータセンターのサーバー上にバックアップのコピーを作成します。 これにより、セットアップに2つのサーバーが追加されます:* backups および remotebackups *(別のデータセンターにあります)。

始めましょう。

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

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

次に、このチュートリアルの「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クライアントをインストールする

このチュートリアルの* Baculaクライアントのインストールと設定*セクションに従って、バックアップする各サーバー(db1、app1、app2、およびlb1)に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サーバーが各クライアントへの接続に使用するパスワード)が必要であることに注意してください。各サーバー上のconf + `ファイル。

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

Baculaサーバーの* backups で、Baculaクライアントをインストールした各サーバーの `+ / etc / bacula / conf.d / clients.conf +`ファイルに Clientリソース*を追加します。

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

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

以下に、データベースサーバー* db1 のクライアントリソース定義の例を示します。 * Name *の値は FileDaemon リソースの名前と一致し、 Password Director *リソースのパスワードと一致する必要があることに注意してください。これらの値は `+ / etcにあります。各Baculaクライアントサーバー上の/ 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
}

残りのBaculaクライアントサーバーのそれぞれに対して同様のクライアントリソースを作成します。 この例では、終了時に4つのクライアントリソースがあります:* db1-fd app1-fd app2-fd 、および lb1-fd 。 これにより、 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サーバーをバックアップする方法のチュートリアル]。

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

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

Percona XtraBackupをインストールする

データベースサーバー* db1 *で、このチュートリアルに従って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ファイルセットを構成する

Baculaは、実行されるバックアップジョブに関連付けられたファイルセットで指定されたファイルのバックアップを作成します。 このセクションでは、リカバリプランで特定した*必要なバックアップ*を含むファイルセットの作成について説明します。 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

データベースサーバーファイルセット

データベースサーバーの復旧計画に従って、データベースサーバーに必要なバックアップは次のとおりです。

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

  • * MySQL設定:* `+ / etc / mysql`にあります

また、XtraBackupスクリプト: + / usr / local / bin / run_xtrabackup.sh +、および関連するcronファイルも含めます。

必要なバックアップを念頭に置いて、この「MySQLデータベース」ファイルセットをBacula設定に追加します。

filesets.conf-MySQLデータベース

FileSet {
 Name = "MySQL Database"
 Include {
   Options {
     signature = MD5
     compression = GZIP
   }




 }
 Exclude {
   File = /data/backups/exclude
 }
}

それでは、アプリケーションサーバーのFileSetに移りましょう。

アプリケーションサーバーのファイルセット

アプリケーションサーバーの復旧計画に従って、アプリケーションサーバーに必要なバックアップには次のものが含まれます。

  • *アプリケーションファイル:*この例では、 `+ / var / www / html +`にあります

必要なバックアップを念頭に置いて、この「Apache DocumentRoot」FileSetをBacula構成に追加します。

filesets.conf-Apache DocumentRoot

FileSet {
 Name = "Apache DocumentRoot"
 Include {
   Options {
     signature = MD5
     compression = GZIP
   }

 }
 Exclude {
   File = /var/www/html/exclude
 }
}

Apacheポート構成ファイルも含めることができますが、これは簡単に交換できます。

次に、ロードバランサーサーバーのFileSetに進みます。

ロードバランサーサーバーFileSet

ロードバランサーサーバーの復旧計画に従って、ロードバランサーサーバーに必要なバックアップは次のとおりです。

  • * SSL証明書(PEM)および関連ファイル:*この例では `+ / root / certs +`にあります

  • * HAProxy設定ファイル:* `+ / etc / haproxy +`にあります

必要なバックアップを念頭に置いて、この「Apache DocumentRoot」FileSetをBacula構成に追加します。

filesets.conf-SSL証明書とHAProxy構成

FileSet {
 Name = "SSL Certs and HAProxy Config"
 Include {
   Options {
     signature = MD5
     compression = GZIP
   }


 }
 Exclude {
   File = /root/exclude
 }
}

保存して終了。

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

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

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

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

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

データベースサーバーバックアップジョブ

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

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

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

次に、アプリケーションサーバーのバックアップジョブを設定します。

アプリケーションサーバーのバックアップジョブ

アプリケーションサーバーの場合、「Backup app1」および「Backup app2」という2つのバックアップジョブを作成します。 ここで重要なことは、正しい* Clients (app1-fdおよびapp2-fd)および FileSet *(Apache DocumentRoot)を指定することです。

App1ジョブ:

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

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

App2ジョブ:

jobs.conf-バックアップapp2

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

次に、ロードバランサーサーバーのバックアップジョブを設定します。

ロードバランサーサーバーのバックアップジョブ

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

jobs.conf-バックアップlb1

Job {
 Name = "Backup lb1"
 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 +)を変更することで調整できます。 作成したすべてのバックアップジョブは、次のように定義される「WeeklyCycle」スケジュールを使用する「DefaultJob」JobDefを使用します。

  • 月の第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 lb1         Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup app2        Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup app1        Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup db1         Remote-0002

バックアップジョブのスケジュールを自由に追加または調整してください。 Percona XtraBackupスクリプトが実行されるのと同時に(10:30 pm)発生するように、アプリケーションサーバーのスケジュールを変更することは理にかなっています。 これにより、アプリケーションとデータベースのバックアップが互いに矛盾しなくなります。

リモートバックアップのセットアップ

これで、Baculaバックアップのコピーを保存するリモートサーバーをセットアップする準備が整いました。 このリモートサーバーは、本番データセンターで災害が発生した場合でも重要なバックアップのコピーを保持できるように、地理的に離れた地域に配置する必要があります。 この例では、* 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 *サーバーにバックアップのコピーがあることを確認します。

その他の考慮事項

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

アプリケーションサーバーのバックアップを作成することに加えて、セットアップに追加された他のサーバーのバックアップをセットアップすることをお勧めします。 たとえば、Baculaを設定して、監視サーバーと集中ログサーバーを立ち上げて実行した後にバックアップを作成する必要があります。

結論

これで、運用アプリケーションサーバーの毎日のバックアップとそれらのバックアップのリモートコピーが必要になります。 ファイルを復元できることを確認し、データを復元する手順を回復計画に追加してください。

次のチュートリアルに進み、実稼働サーバーのセットアップの監視の設定を開始します。https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-monitoring [実稼働用の構築:Webアプリケーション-モニタリング]。

Related