実稼働用の構築:Webアプリケーション—バックアップ
序章
アプリケーションのさまざまなコンポーネントの復旧計画を立てたら、それをサポートするために必要なバックアップシステムを設定する必要があります。 このチュートリアルでは、バックアップソリューションとしてBaculaを使用することに焦点を当てます。 Baculaなどの本格的なバックアップシステムを使用する利点は、個々のファイルレベルでバックアップと復元を完全に制御でき、最適なものに応じてバックアップと復元をスケジュールできることです。
DigitalOcean Droplet Backups (Droplet全体のスナップショットバックアップ)などのソリューションは、セットアップが簡単で、毎週のバックアップのみが必要な場合は、ニーズに十分対応できる場合があります。 DigitalOceanバックアップを選択する場合は、データベースのホットバックアップの作成セクションに従って、データベースのホットバックアップを設定してください。
チュートリアルのこの部分では、Baculaをセットアップして、アプリケーションセットアップ(db1、app1、app2、およびlb1)を構成するサーバーの必須バックアップの毎日のバックアップを維持します。リカバリプラン-基本的に、これはBaculaを使用してLAMPスタックのバックアップを作成する方法を示すチュートリアルです。 また、Percona XtraBackupを使用して、MySQLデータベースのホットバックアップを作成します。 最後に、rsyncを使用して、リモートデータセンターのサーバーにバックアップのコピーを作成します。 これにより、セットアップにbackupsとremotebackups(別のデータセンターにあります)の2つのサーバーが追加されます。
始めましょう。
バックアップサーバーにBaculaをインストールする
次のチュートリアルに従って、backupsサーバーにBaculaをセットアップします。Ubuntu14.04にBaculaサーバーをインストールする方法。
次に、このチュートリアルの Organize Bacula Director Configuration(Server)セクションに従ってください:Baculaを使用してUbuntu14.04サーバーをバックアップする方法。 (バックアップするサーバー上で)Baculaクライアントをセットアップするときにディレクター名が必要になります。 BaculaClientのインストールと設定セクションに到達したら停止します。
設定するすべてのバックアップジョブにRemoteFileプールを使用することに注意してください。 そうは言っても、先に進む前にいくつかの設定を変更することをお勧めします。
各サーバーにBaculaクライアントをインストールする
このチュートリアルのBaculaクライアントのインストールと構成セクションに従って、バックアップする各サーバー(db1、app1、app2、およびlb1)にBaculaクライアントをインストールします。バックアップ方法Baculaを搭載したUbuntu14.04サーバー。 ファイルセットの追加(サーバー)セクションに到達したら停止します。
FileDaemon Name (通常は「-fd」が付加されたホスト名)と Director Password (Baculaサーバーが各クライアントに接続するために使用するパスワード)が必要になることに注意してください。から bacula-fd.conf
各サーバー上のファイル。
Baculaクライアントをバックアップサーバーに追加する
Baculaサーバーであるbackupsで、クライアントリソースを /etc/bacula/conf.d/clients.conf
Baculaクライアントをインストールした各サーバーのファイル。
を開きます clients.conf
ファイル:
- sudo vi /etc/bacula/conf.d/clients.conf
これは、データベースサーバーdb1のクライアントリソース定義の例です。 Name の値は、 FileDaemon リソースの名前と一致する必要があり、 Password は、Directorリソースのパスワードと一致する必要があることに注意してください。 、クライアントサーバー上-これらの値は、 /etc/bacula/bacula-fd.conf
各Baculaクライアントサーバー:
Client {
Name = db1-fd
Address = db1.nyc3.example.com
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
}
残りのBaculaクライアントサーバーごとに同様のクライアントリソースを作成します。 この例では、終了時に4つのクライアントリソースが必要です。 db1-fd 、 app1-fd 、 app2-fd 、および lb1 -fd。 これにより、 backupsサーバー上のBaculaDirectorが、各サーバー上のBaculaクライアントに接続できるように構成されます…
保存して終了。
このセクションの詳細については、[X54X]Baculaを使用したUbuntuサーバーのバックアップ方法チュートリアルのBaculaクライアントのインストールと構成を参照してください。
データベースのホットバックアップを作成する
一貫性のある(つまり 使用可能)アクティブなデータベースのバックアップ。特別な注意が必要です。 MySQLでホットバックアップを作成する簡単で効果的な方法は、PerconaXtraBackupを使用することです。
PerconaXtraBackupをインストールします
データベースサーバーdb1で、次のチュートリアルに従ってPerconaXtraBackupをインストールおよび構成します。Ubuntu14.04でPerconaXtraBackupを使用してMySQLデータベースのホットバックアップを作成する方法。 フルホットバックアップの実行セクションに到達したら停止します。
XtraBackupスクリプトを作成する
Percona XtraBackupは、MySQLデータベースのホットバックアップを作成する準備ができています。これは、最終的にBacula(またはDigitalOcean Backups)によってバックアップされますが、ホットバックアップは何らかの方法でスケジュールする必要があります。 最も簡単なソリューションであるbashスクリプトとcronジョブを設定します。
と呼ばれるbashスクリプトを作成します run_extra_backup.sh
の /usr/local/bin
:
- sudo vi /usr/local/bin/run_xtrabackup.sh
次のスクリプトを追加します。 ユーザーとパスワードは、XtraBackupのインストール時に設定したものに置き換えてください。
#!/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チュートリアルのフルホットバックアップの実行セクションを参照してください。
スクリプトを実行可能にします。
- sudo chmod +x /usr/local/bin/run_xtrabackup.sh
データベースを適切にバックアップするには、Baculaがデータベースサーバーのバックアップを試みる前に、XtraBackupスクリプトを実行(および完了する)する必要があります。 良い解決策は、スクリプトを「バックアップ前スクリプト」として実行するようにBaculaバックアップジョブを構成することですが、単純にするためにcronジョブを使用することを選択します。
cron構成ファイルを作成します( /etc/cron.d
ルートのcrontabに追加されます):
- sudo vi /etc/cron.d/xtrabackup
次のcronジョブを追加します。
30 22 * * * root /usr/local/bin/run_xtrabackup.sh
これにより、スクリプトが毎日午後10時30分(22時間30分)にrootとして実行されるようにスケジュールされます。 Baculaは現在毎日午後11時5分にバックアップジョブを実行するようにスケジュールされているため、今回を選択しました。これについては後で調整します。 これにより、XtraBackupスクリプトが完了するまで35分かかります。
データベースのホットバックアップが設定されたので、Baculaバックアップファイルセットを見てみましょう。
Baculaファイルセットを設定する
Baculaは、実行されるバックアップジョブに関連付けられているFileSetで指定されているファイルのバックアップを作成します。 このセクションでは、リカバリプランで特定した必要なバックアップを含むファイルセットの作成について説明します。 BaculaへのFileSetsの追加の詳細については、Baculaチュートリアルの Add FileSets(Server)セクションを参照してください。
バックアップサーバーで、 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データベース」FileSetをBacula構成に追加します。
FileSet {
Name = "MySQL Database"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /data/backups
File = /etc/mysql/my.cnf
File = /usr/local/bin/run_xtrabackup.sh
File = /etc/cron.d/xtrabackup
}
Exclude {
File = /data/backups/exclude
}
}
それでは、アプリケーションサーバーのFileSetに移りましょう。
アプリケーションサーバーファイルセット
アプリケーションサーバーの復旧計画に従って、アプリケーションサーバーに必要なバックアップには、次のものが含まれます。
- アプリケーションファイル:にあります
/var/www/html
この例では
必要なバックアップを念頭に置いて、この「ApacheDocumentRoot」FileSetをBacula構成に追加します。
FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}
Apacheポート構成ファイルも含めることもできますが、これは簡単に置き換えることができます。
次に、ロードバランサーサーバーのFileSetに移りましょう。
ロードバランサーサーバーのファイルセット
ロードバランサーサーバーの復旧計画に従って、ロードバランサーサーバーに必要なバックアップには次のものが含まれます。
- SSL証明書(PEM)および関連ファイル:にあります
/root/certs
この例では - HAProxy構成ファイル:にあります
/etc/haproxy
必要なバックアップを念頭に置いて、この「ApacheDocumentRoot」FileSetをBacula構成に追加します。
FileSet {
Name = "SSL Certs and HAProxy Config"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /root/certs
File = /etc/haproxy
}
Exclude {
File = /root/exclude
}
}
保存して終了。
これで、FileSetが構成されました。 これらのファイルセットを使用するBaculaバックアップジョブの作成に移りましょう。
Baculaバックアップジョブを作成する
サーバーのバックアップを実行および作成するBaculaバックアップジョブを作成します。
作成する jobs.conf
のファイル /etc/bacula/conf.d
:
- sudo vi /etc/bacula/conf.d/jobs.conf
データベースサーバーのバックアップジョブ
データベースサーバーのバックアップジョブでは、「Backupdb1」という名前の新しいジョブを作成します。 ここで重要なことは、正しい Client (db1-fd)と FileSet (MySQLデータベース)を指定することです。
Job {
Name = "Backup db1"
JobDefs = "DefaultJob"
Client = db1-fd
Pool = RemoteFile
FileSet="MySQL Database"
}
次に、アプリケーションサーバーのバックアップジョブを設定します。
アプリケーションサーバーのバックアップジョブ
アプリケーションサーバー用に、「Backupapp1」と「Backupapp2」という名前の2つのバックアップジョブを作成します。 ここで重要なのは、正しいクライアント(app1-fdおよびapp2-fd)と FileSet (Apache DocumentRoot)を指定することです。
App1ジョブ:
Job {
Name = "Backup app1"
JobDefs = "DefaultJob"
Client = app1-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}
App2ジョブ:
Job {
Name = "Backup app2"
JobDefs = "DefaultJob"
Client = app2-fd
Pool = RemoteFile
FileSet="Apache DocumentRoot"
}
次に、ロードバランサーサーバーのバックアップジョブを設定します。
ロードバランサーサーバーのバックアップジョブ
ロードバランサーサーバーのバックアップジョブでは、「Backuplb1」という名前の新しいジョブを作成します。 ここで重要なのは、正しい Client (lb1-fd)と FileSet (SSL証明書とHAProxy構成)を指定することです。
Job {
Name = "Backup lb1"
JobDefs = "DefaultJob"
Client = lb1-fd
Pool = RemoteFile
FileSet="SSL Certs and HAProxy Config"
}
保存して終了。
これで、バックアップジョブが構成されました。 最後のステップは、BaculaDirectorを再起動することです。
BaculaDirectorを再起動します
backups サーバーで、Bacula Directorを再起動して、すべての変更を有効にします。
- 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 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分)。 これにより、アプリケーションとデータベースのバックアップが互いに矛盾するのを防ぐことができます。
リモートバックアップを設定する
これで、Baculaバックアップのコピーを保存するリモートサーバーをセットアップする準備が整いました。 このリモートサーバーは地理的に離れた地域にある必要があります。これにより、本番データセンターで災害が発生した場合でも、重要なバックアップのコピーを入手できます。 この例では、 remotebackups サーバーにDigitalOceanのサンフランシスコ(SFO1)リージョンを使用します。
パブリックSSHキー、rsync、およびcronを使用して、backupsサーバーからremotebackupsサーバーにバックアップを送信する簡単な方法を説明します。
remotebackups サーバーで、rsyncログインに使用されるユーザーを作成します。
次に、 backups サーバーで、パスワードなしのSSHキーペアをrootとして生成します。 作成したremotebackupsユーザーに公開鍵をインストールします。 これについては、SSHキーの設定方法チュートリアルで説明しています。
backups サーバーで、Baculaバックアップデータをコピーするrsyncコマンドを記述します(/bacula/backup
)remotebackupsサーバーのどこかに。 Rsyncの使用法については、Rsyncの使用方法チュートリアルで説明されています。 コマンドはおそらく次のようになります。
- 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サーバーにバックアップのコピーがあることを確認します。
その他の考慮事項
バックアップのディスク要件については話しませんでした。 バックアップが使用しているディスク容量を確認し、ニーズとリソースに基づいてセットアップとバックアップのスケジュールを修正することをお勧めします。
アプリケーションサーバーのバックアップを作成することに加えて、セットアップに追加された他のサーバーのバックアップをセットアップすることをお勧めします。 たとえば、監視サーバーと集中ログサーバーを起動して実行した後、それらのバックアップを作成するようにBaculaを構成する必要があります。
結論
これで、本番アプリケーションサーバーの毎日のバックアップとそれらのバックアップのリモートコピーが作成されます。 必ずファイルを復元できることを確認し、データを復元する手順を復旧計画に追加してください。
次のチュートリアルに進んで、本番サーバーのセットアップの監視のセットアップを開始します:本番用のビルド:Webアプリケーション—監視。