本番環境向けの構築:ウェブアプリケーション — バックアップ

導入

アプリケーションのさまざまなコンポーネント用に復旧計画を立てた後、それをサポートする必要のあるバックアップシステムを設定する必要があります。このチュートリアルでは、Baculaをバックアップソリューションとして使用する方法に焦点を当てます。Baculaのような完全なバックアップシステムを使用する利点は、個々のファイルレベルでバックアップおよび復元する対象を完全に制御できることそして、最適なバックアップおよび復元スケジュールを設定できることです。

DigitalOcean Droplet Backups(全体のDropletのスナップショットバックアップ)のようなソリューションは設定が簡単で、週次のバックアップだけが必要な場合は十分かもしれません。DigitalOcean Backupsを選択する場合は、データベースのホットバックアップの作成のセクションに従ってデータベースのホットバックアップを設定することをお勧めします。

このチュートリアルのこの部分では、アプリケーションセットアップ(db1、app1、app2、およびlb1)に必要なバックアップをデイリーバックアップを行うためのBaculaを設定します。これらは先ほどリカバリープランで定義したものです。基本的に、これはBaculaを使用してLAMPスタックのバックアップを作成する方法を示すチュートリアルです。また、Percona XtraBackupを使用してMySQLデータベースのホットバックアップを作成します。最後に、rsyncを使用してリモートデータセンターのサーバー上にバックアップのコピーを作成します。これにより、セットアップに2台のサーバーが追加されます:backupsremotebackups(別のデータセンターに位置する)。

始めましょう。

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

backupsサーバー上にBaculaを設定するために、このチュートリアルに従ってください:Ubuntu 14.04にBaculaサーバーをインストールする方法

このチュートリアルのOrganize Bacula Director Configuration (Server)節を参照してください:Ubuntu 14.04 ServerをBaculaでバックアップする方法。Baculaクライアント(バックアップしたいサーバー)の設定時に必要なディレクター名を记録してください。Install and Configure Bacula Client節に到达するまでに止めてください。

注意:私たちはこれから設定するすべてのバックアップジョブにRemoteFileプールを使用することにしました。それでは、進める前にいくつかの設定を変更したいと考えるかもしれません。

Install Bacula Client on Each Server

Ubuntu 14.04 ServerをBaculaでバックアップする方法チュートリアルのInstall and Configure Bacula Client節を参照して、バックアップしたい各サーバー(db1、app1、app2、lb1)にBaculaクライアントをインストールしてください。Add FileSets (Server)節に到达するまでに止めてください。

FileDaemon名(通常ホスト名に「-fd」を追加した名前)と、Directorパスワード(Baculaサーバーが各クライアントに接続する際に使用するパスワード)を、各サーバーのbacula-fd.confファイルから取得する必要があります。

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

backups、すなわちBaculaサーバー上で、Baculaクライアントをインストールした各サーバーに対してクライアントリソース/etc/bacula/conf.d/clients.confファイルに追加してください。

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

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

以下は、データベースサーバーdb1のクライアントリソース定義の例です。 Nameの値はFileDaemonリソースのNameと一致し、Passwordはクライアントサーバー上のDirectorリソースのPasswordと一致する必要があります。これらの値は、各Baculaクライアントサーバーの/etc/bacula/bacula-fd.confにあります:

clients.conf — Example Client resource definition
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-fdapp1-fdapp2-fd、およびlb1-fdです。これにより、backupsサーバー上のBaculaディレクターが、各サーバー上のBaculaクライアントに接続できるようになります…

保存して終了します。

この節の詳細は、UbuntuサーバーをBaculaクlientで备份するためにHow To Back Up an Ubuntu Server with Bacula tutorialのInstall and Configure Bacula Client节を見てください。

データベースの熱备份を作成

MySQLの热備份を作成するときは、特に注意が必要です。簡単な方法でMySQLを热备份するには、Percona XtraBackupを使用します。

Percona XtraBackupをinstall and configure

db1(database server)上でPercona XtraBackupをinstall and configureします。以下のtutorialを参照してください: How To Create Hot Backups of MySQL Databases with Percona XtraBackup on Ubuntu 14.04. 到了Full Hot Backup部分就停止安装。

XtraBackupスクリプトを作成する

Percona XtraBackupは、MySQLデータベースの热いバックアップを作成する準備が整いました。最終的にはBacula(またはDigitalOcean Backups)によるバックアップになりますが、热いバックアップは何らかの方法でスケジュールされなければなりません。最も簡単な解決法を設定しましょう:bashスクリプトとcronジョブです。

bashスクリプトを/usr/local/binrun_extra_backup.shという名前で作成します:

  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 "{}" \;

# 既存の完全なバックアップを削除
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チュートリアルの完全な热いバックアップを行う節を参照してください。

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

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

数据库を正しく备份するために、XtraBackup脚本を実行しておく必要があります。Baculaでデータベースサーバーの备份を試みる前に、このスクripトを完了させるという良い方法は、Baculaの备份ジョブを設定して「前置処理スクリプト」として使うことですが、今回は簡単になるためにcronJobを使用します。

cron設定ファイルを作成します(/etc/cron.d内のファイルはrootのcrontabに追加されます):

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

以下のcron作业を追加します:

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

これは毎日22時30分(22時間30分)にrootで実行させます。この時間点を選択した理由は、Baculaは現在每日23时05分に备份ジョブを実行していますから、XtraBackupスクリプトの完了を35分余計に许容しています。

database hot backups are now set up, let’s look at the Bacula backup FileSets.

Configure Bacula FileSets

Baculaは、バックアップジョブで実行されることになっているFileSetsに指定されたファイルのバックアップを作成します。この節では、私たちの恢复計画で识別した必要なバックアップを含むFileSetの作成を説明します。BaculaにFileSetを追加する詳細信息は、BaculaチュートリアルのFileSetを追加する(サーバー)節にあります。

あなたのバックアップサーバーで、filesets.confファイルを開いてください:

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

データベースサーバー FileSet

私たちのデータベースサーバーの復旧計画に基づいて、データベースサーバーの必要なバックアップは以下の通りです:

  • MySQLデータベース: XtraBackupスクリプトにより/data/backups/fullに日々22:30にバックアップコピーが作成されます。
  • MySQL設定:/etc/mysqlに配置されます。

また、XtraBackupスクリプト(/usr/local/bin/run_xtrabackup.sh)とその関連のcronファイルも含めます。

必要なバックアップを念頭に、私たちはBacula設定にこの「MySQLデータベース」FileSetを追加します:

filesets.conf — MySQL Database
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 にあります

必要なバックアップを考慮して、この「Apache DocumentRoot」ファイルセットを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のポート設定ファイルも含めることができますが、それは簡単に置き換え可能です。

次に、ロードバランサーサーバーファイルセットに移りましょう。

ロードバランサーサーバーファイルセット

ロードバランサーサーバーの復旧計画に基づき、必要なバックアップは以下の通りです:

  • SSL証明書(PEM)および関連ファイル:例では /root/certs にあります
  • HAProxy設定ファイル:/etc/haproxy にあります

必要なバックアップを考慮して、この「Apache DocumentRoot」ファイルセットをBaculaの設定に追加します:

filesets.conf — SSL Certs and HAProxy Config
FileSet {
  Name = "SSL Certs and HAProxy Config"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /root/certs
    File = /etc/haproxy
  }
  Exclude {
    File = /root/exclude
  }
}

保存し、終了します。

ファイルセットの設定が完了しました。次に、これらのファイルセットを使用するバaculaバックアップジョブの作成に移りましょう。

バaculaバックアップジョブの作成

サーバーのバックアップを作成するバaculaバックアップジョブを作成します。

/etc/bacula/conf.djobs.confファイルを作成します:

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

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

データベースサーバーバックアップジョブのために、「Backup db1」という新しいジョブを作成します。ここで重要なのは、正しいクライアント(db1-fd)とファイルセット(MySQL Database)を指定することです:

jobs.conf — Backup db1
Job {
  Name = "Backup db1"
  JobDefs = "DefaultJob"
  Client = db1-fd
  Pool = RemoteFile
  FileSet="MySQL Database"
}

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

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

アプリケーションサーバーのために、「Backup app1」と「Backup app2」という2つのバックアップジョブを作成します。ここで重要なのは、正しいクライアント(app1-fdおよびapp2-fd)とファイルセット(Apache DocumentRoot)を指定することです。

App1ジョブ:

jobs.conf — Backup app1
Job {
  Name = "Backup app1"
  JobDefs = "DefaultJob"
  Client = app1-fd
  Pool = RemoteFile
  FileSet="Apache DocumentRoot"
}

App2 ジョブ:

jobs.conf — Backup app2
Job {
  Name = "Backup app2"
  JobDefs = "DefaultJob"
  Client = app2-fd
  Pool = RemoteFile
  FileSet="Apache DocumentRoot"
}

今度は、負荷均配サーバーのバックアップJobを設定します。


Load Balancer Server Backup Job

私たちのload balancer server backup jobでは、新しいJobを作成します。重要な点は、正しいClient (lb1-fd) とFileSet (SSL Certs and HAProxy Config) を指定することです:

jobs.conf — Backup lb1
Job {
  Name = "Backup lb1"
  JobDefs = "DefaultJob"
  Client = lb1-fd
  Pool = RemoteFile
  FileSet="SSL Certs and HAProxy Config"
}

保存して退出します。

NOW, our backup jobs are configured. The last step is to restart the Bacula Director.


Restart Bacula Director

在备份服务器上,重新启动Bacula Director以使所有更改生效:

Bacula Directorを再起動します。

  1. sudo service bacula-director restart

この時点で、あなたはクlient接続をテストしておくと良いです。それらに関連しているバックアップ作业もテストします。これらの点はBaculaでサーバーをバックアップする方法のテクニックにより説明されています。そのテクニックではMySQLデータベースの復元も述べています。MySQLデータベースの復元はPercona XtraBackupの復元スtepを따라야 합니다。

Baculaのバックアップスケジュールを見直す

BaculaのバックアップスケジュールはBacula Directorの設定(/etc/bacula/bacula-dir.conf)で調整可能です。私たちが作成したすべてのJobは“DefaultJob”JobDefを使用しています,そのJobDefは以下のスケジュールを使っています:

  • 月の初めの日(土曜日)の11:05 PMにフルバックアップ
  • 他の日(日曜日から金曜日まで)の11:05 PMに差分バックアップ
  • 他の日(木曜日から土曜日まで)の11:05 PMに増殖バックアップ

Baculaコンソルを使用してDirectorの状態を確認してみます。Directorは全てのJobの状態を出力してください。正常に起動している場合は、次のような出力が見えます:

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 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

备份作业のスケジュールを自由に変更できます。あなたの任意の backup job のスケジュールを変更しても良いです。同じ時間(10:30 PM)でアプリケーションサーバーとデータベースの backup を行うことは、両者が不一致しなくなるようになります。

远程备份设置

接下来,我们将设置一个远程服务器来存储Bacula的备份副本。这个远程服务器应该位于与生产数据中心不同的地理区域,这样即使在生产数据中心发生灾难的情况下,您仍然可以拥有关键数据的副本。在我们的例子中,我们将使用DigitalOcean的旧金山(SFO1)地区作为我们的远程备份服务器。

我们将使用公钥SSH、rsync和cron的简单方法从备份服务器向远程备份服务器发送备份。

远程备份服务器上,创建一个用于rsync登录的用户。

次に、バックアップサーバーでroot権限でパスワード無しSSHキーペアを生成します。新たに作成した公钥は、RemoteBackupsユーザーにインストALLーします。これは私たちのHow To Set Up SSH Keysチュータリアルで説明されています。

Backupサーバーで、Baculaの备份データ(/bacula/backup)をRemoteBackupsサーVERTERにコピーしたいと思うと、rsyncコマンドを使ってください。Rsyncの使用方法は私たちのHow To Use Rsyncチュータリアルで解説されています。命令は次のようになります:

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

rsync_backups.shを作成し、実行可能にします。

最後に、cronジョブを設定して、Baculaの备份作业が完了した後、root権限でrsync_backups.shを実行させることです。これは私たちのHow To Schedule Routine Tasks With Cronチュータリアルで解説されています。

設定した後、翌日Baculaの备份データがRemoteBackupsサーVERTERに存在するか确认します。

その他の考え方

ディスク要件についてはお話しでなかったようです。バックアップに使用されるディスクスペースの量を確認し、ニーズとリソースに基づいてセットアップとバックアップスケジュールを見直す必要があります。

アプリケーションサーバーのバックアップを作成するだけでなく、セットアップに追加された他のすべてのサーバーにもバックアップを設定するべきです。例えば、監視と集中ログサーバーを設置し運用したら、Baculaを設定してそれらのバックアップを作成することをお勧めします。

結論

現在、本番アプリケーションサーバーの毎日のバックアップとそのバックアップのリモートコピーをお持ちであるべきです。ファイルを復元できることを確認し、データの復元手順をリカバリープランに追加してください。

次のチュートリアルに進んで、本番サーバー設定の監視を設定し始めましょう:プロダクション用構築:ウェブアプリケーション — 監視

Source:
https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-backups