序章
アプリケーションのさまざまなコンポーネントの復旧計画を立てたら、それをサポートするために必要なバックアップシステムを設定する必要があります。 このチュートリアルでは、バックアップソリューションとして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で、Baculaクライアントをインストールした各サーバーの/etc/bacula/conf.d/clients.conf
ファイルにクライアントリソースを追加します。
clients.conf
ファイルを開きます。
sudo vi /etc/bacula/conf.d/clients.conf
これは、データベースサーバーdb1のクライアントリソース定義の例です。 Name の値は、 FileDaemon リソースの名前と一致する必要があり、 Password は、Directorリソースのパスワードと一致する必要があることに注意してください。 、クライアントサーバー上-これらの値は、各Baculaクライアントサーバー上の/etc/bacula/bacula-fd.conf
にあります。
projects.conf —クライアントリソース定義の例
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ジョブを設定します。
/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=bkpuser --password=bkppassword --no-timestamp /data/backups/full # xtrabackup prepare backup innobackupex --apply-log /data/backups/full
保存して終了。 このスクリプトを(スーパーユーザー権限で)実行すると、/data/backups/full
にある既存のXtraBackupバックアップが削除され、新しい完全バックアップが作成されます。 XtraBackupを使用したバックアップの作成の詳細については、XtraBackupチュートリアルのフルホットバックアップの実行セクションを参照してください。
スクリプトを実行可能にします。
sudo chmod +x /usr/local/bin/run_xtrabackup.sh
データベースを適切にバックアップするには、Baculaがデータベースサーバーのバックアップを試みる前に、XtraBackupスクリプトを実行(および完了する)する必要があります。 良い解決策は、スクリプトを「バックアップ前スクリプト」として実行するようにBaculaバックアップジョブを構成することですが、単純にするためにcronジョブを使用することを選択します。
cron構成ファイルを作成します(/etc/cron.d
のファイルはrootのcrontabに追加されます):
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ファイルセットを設定する
Baculaは、実行されるバックアップジョブに関連付けられているFileSetで指定されているファイルのバックアップを作成します。 このセクションでは、リカバリプランで特定した必要なバックアップを含むファイルセットの作成について説明します。 BaculaへのFileSetsの追加の詳細については、Baculaチュートリアルの Add FileSets(Server)セクションを参照してください。
バックアップサーバーで、filesets.conf
ファイルを開きます。
sudo vi /etc/bacula/conf.d/filesets.conf
データベースサーバーファイルセット
データベースサーバーの復旧計画によると、データベースサーバーに必要なバックアップは次のとおりです。
- MySQLデータベース:バックアップコピーは、
/data/backups/full
のXtraBackupスクリプトによって毎日午後10時30分に作成されます - MySQL構成:
/etc/mysql
にある
また、XtraBackupスクリプト/usr/local/bin/run_xtrabackup.sh
と関連するcronファイルも含まれます。
必要なバックアップを念頭に置いて、この「MySQLデータベース」FileSetをBacula構成に追加します。
filesets.conf —MySQLデータベース
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構成に追加します。
filesets.conf — Apache DocumentRoot
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構成に追加します。
filesets.conf —SSL証明書とHAProxy構成
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バックアップジョブを作成します。
/etc/bacula/conf.d
にjobs.conf
ファイルを作成します。
sudo vi /etc/bacula/conf.d/jobs.conf
データベースサーバーのバックアップジョブ
データベースサーバーのバックアップジョブでは、「Backupdb1」という名前の新しいジョブを作成します。 ここで重要なことは、正しい Client (db1-fd)と FileSet (MySQLデータベース)を指定することです。
jobs.conf —バックアップdb1
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ジョブ:
jobs.conf —バックアップapp1
Job { Name = "Backup app1" JobDefs = "DefaultJob" Client = app1-fd Pool = RemoteFile FileSet="Apache DocumentRoot" }
App2ジョブ:
jobs.conf —バックアップapp2
Job { Name = "Backup app2" JobDefs = "DefaultJob" Client = app2-fd Pool = RemoteFile FileSet="Apache DocumentRoot" }
次に、ロードバランサーサーバーのバックアップジョブを設定します。
ロードバランサーサーバーのバックアップジョブ
ロードバランサーサーバーのバックアップジョブでは、「Backuplb1」という名前の新しいジョブを作成します。 ここで重要なのは、正しい Client (lb1-fd)と FileSet (SSL証明書とHAProxy構成)を指定することです。
jobs.conf —バックアップlb1
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バックアップデータ(/bacula/backup
)をremotebackupsサーバーのどこかにコピーするrsyncコマンドを記述します。 Rsyncの使用法については、Rsyncの使用方法チュートリアルで説明されています。 コマンドはおそらく次のようになります。
rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup
/usr/local/bin/rsync_backups.sh
などのスクリプトにコマンドを追加して、実行可能にします。
最後に、Baculaのバックアップジョブが通常完了した後、rootとしてrsync_backups.sh
スクリプトを実行するcronジョブを設定する必要があります。 これについては、Cronチュートリアルでルーチンタスクをスケジュールする方法で説明されています。
これらすべてを設定したら、翌日remotebackupsサーバーにバックアップのコピーがあることを確認します。
その他の考慮事項
バックアップのディスク要件については話しませんでした。 バックアップが使用しているディスク容量を確認し、ニーズとリソースに基づいてセットアップとバックアップのスケジュールを修正することをお勧めします。
アプリケーションサーバーのバックアップを作成することに加えて、セットアップに追加された他のサーバーのバックアップをセットアップすることをお勧めします。 たとえば、監視サーバーと集中ログサーバーを起動して実行した後、それらのバックアップを作成するようにBaculaを構成する必要があります。
結論
これで、本番アプリケーションサーバーの毎日のバックアップとそれらのバックアップのリモートコピーが作成されます。 必ずファイルを復元できることを確認し、データを復元する手順を復旧計画に追加してください。
次のチュートリアルに進んで、本番サーバーのセットアップの監視のセットアップを開始します:本番用のビルド:Webアプリケーション—監視。