제품 배포를 위한 웹 애플리케이션 — 백업

소개

您的应用程序的各个组件的恢复计划确定后,您应该建立支持该计划的备份系统。本教程将重点介绍将Bacula作为备份解决方案的使用。使用像Bacula这样的完整备份系统的优点是,您可以在单个文件级别完全控制备份和恢复内容,并且可以根据需要自行安排备份和恢复。

DigitalOcean Droplet Backups(您整个Droplet的快照备份)这样的解决方案易于设置,如果只需要每周备份,可能就足够满足您的需求了。如果您选择DigitalOcean备份,请确保通过遵循创建数据库的热备份部分来设置数据库的热备份。

이 튜토리얼의 이 부분에서는 Bacula를 설정하여 응용 프로그램 설정(이전에 복구 계획에서 정의한 db1, app1, app2, lb1)을 구성하는 서버의 필요한 백업을 매일 백업하는 방법을 설명합니다. 이 튜토리얼은 Bacula를 사용하여 LAMP 스택의 백업을 생성하는 방법을 보여줍니다. 또한, Percona XtraBackup를 사용하여 MySQL 데이터베이스의 핫 백업을 만들고, rsync를 사용하여 원격 데이터 센터의 서버에 백업 사본을 만듭니다. 이 과정에서 설정에 두台의 서버를 추가합니다: backupsremotebackups(분리된 데이터 센터에 위치한).

시작해보겠습니다.

backups 서버에 Bacula 설치

backups 서버에 Bacula를 설정하려면 다음 튜토리얼을 따라야 합니다: Ubuntu 14.04에 Bacula 서버 설치 방법.

이 튜토리얼의 바acula 디렉터 구성 (서버) 组织 섹션을 따라ください: Ubuntu 14.04 서버에 바acula를 사용하여 백업하는 방법. 바acula 클라이언트를 설정할 때 디렉터 이름이 필요합니다 (백업하려는 서버에서). 바acula 클라이언트 설치 및 구성 섹션에 도달할 때까지 진행하세요.

설정을 계속하기 전에 몇 가지 설정을 변경하고 싶을 수 있으므로, 모든 백업 작업에 RemoteFile 풀을 사용할 것임을 참고하세요.

각 서버에 바acula 클라이언트 설치

백업하려는 각 서버에 (db1, app1, app2, lb1) 이 튜토리얼의 바acula 클라이언트 설치 및 구성 섹션을 따라 바acula 클라이언트를 설치하세요: Ubuntu 14.04 서버에 바acula를 사용하여 백업하는 방법. 파일셋 추가 (서버) 섹션에 도달할 때까지 진행하세요.

파일 데몬 이름 (보통 호스트네임에 “-fd”을 추가한 것)과 디렉터 비밀번호 (바acula 서버가 각 클라이언트에 연결할 때 사용할 비밀번호, bacula-fd.conf 파일에서 가져올 것)가 필요합니다. 각 서버의 bacula-fd.conf 파일에서 가져올 것입니다.

바acula 클라이언트를 백업 서버에 추가

backups에서, 바acula 서버에서 각 클라이언트가 설치된 서버에 대해 /etc/bacula/conf.d/clients.conf 파일에 클라이언트 리소스를 추가하십시오.

clients.conf 파일을 엽니다:

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

다음은 데이터베이스 서버 db1에 대한 클라이언트 리소스 정의 예제입니다. 이름의 값은 파일 데몬 리소스의 이름과 일치하고, 비밀번호는 클라이언트 서버의 디렉터 리소스의 비밀번호와 일치해야 합니다. 이 값들은 각 바acula 클라이언트 서버의 /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
}

나머지 바acula 클라이언트 서버에 대해 유사한 클라이언트 리소스를 만듭니다. 우리의 예제에서는 완료되면 네 가지 클라이언트 리소스가 있어야 합니다: db1-fd, app1-fd, app2-fd, 그리고 lb1-fd. 이 설정은 backups 서버의 바acula 디렉터가 각 서버의 바acula 클라이언트에 연결할 수 있도록 구성합니다…

저장 후 종료.

이 섹션에 대한 더 자세한 내용은 Bacula Client 설치 및 구성에서 Ubuntu 서버에 Bacula를 사용하여 백업하는 방법 튜토리얼에서 찾을 수 있습니다.

데이터베이스의 핫 백업 만들기

활성 데이터베이스의 일관성 있는 (즉, 사용 가능한) 백업을 생성하기 위해서는 특별한 주의가 필요합니다. MySQL에서 핫 백업을 만드는 간단하고 효과적인 방법은 Percona XtraBackup를 사용하는 것입니다.

Percona XtraBackup 설치

데이터베이스 서버인 db1에서 이 튜토리얼을 따라 Percona XtraBackup를 설치하고 구성합니다: Ubuntu 14.04에서 Percona XtraBackup를 사용하여 MySQL 데이터베이스의 핫 백업 만들기. 전체 핫 백업 수행 섹션에 도달할 때까지 진행하세요.

XtraBackup 스크립트 생성

Percona XtraBackup가 MySQL 데이터베이스의 열정 备份을 생성하기 위해 준비되었습니다. 이를 Bacula (または DigitalOcean Backups)가 最终に 备份하지만, 열정 备份은 somehow 계획化되어야 합니다. 우리는 가장 간단한 솔루션을 设置할 것입니다: 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 "{}" \;

# 现有的 完全备份을 삭제하기
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

우리가 데이터베이스를 옳바른 방식으로 备份하려면, Bacula가 데이터베이스 서버의 备份을 시도하기 전에 (및 완료하기 전에) XtraBackup 스크립트를 실행해야 합니다. 좋은 솔루션은 Bacula 备份 작업을 스크립트를 “pre-backup 스크립트”로 실행시키는 것입니다만, 우리는 간단하게 하기 위해 cron job을 사용하겠습니다.

Cron 구성 파일을 생성하십시오 (/etc/cron.d 内的 파일은 root의 crontab에 추가됩니다):

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

次の cron job을 추가하십시오:

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

이는 스크립트를 루트로 매일 10:30pm (22시, 30분)에 실행하도록 计划합니다. 우리는 이러한 시간을 선택하였으며, Bacula가 매일 11:05pm에 其 backups를 실행하는 것을 计划하고 있습니다 – 나중에 이를 조정하는 方法을 discuss 할 것입니다. 이는 XtraBackup 스크립트가 완료되기 위한 35분이 있게 합니다.

이제 데이터베이스의 핫 备份이 설정되었으면, Bacula 备份 FileSets에 대해 보겠습니다.

Bacula FileSets 구성

Bacula는 备份 작업에 연관된 FileSets에 지정된 파일들의 백업을 생성합니다. 이 섹션은 재overy plans에 지정한 필수 备份을 포함하는 FileSets을 생성하는 것을 다룹니다. Bacula에 FileSets를 추가하는 자세한 내용은 Bacula 튜토리얼의 Add FileSets (Server) 섹션에 있습니다.

备份 서버에서 filesets.conf 파일을 오픈합니다.

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

Database Server FileSet

우리의 데이터 베이스 서버 재overy plan에 따라 데이터 베이스 서버의 필수 备份은 다음과 같습니다.

  • MySQL 데이터베이스: 우리의 XtraBackup 스크립트가 /data/backups/full에 매일 22:30에 备份 コピー을 생성합니다.
  • MySQL configurations: /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에 위치한 것입니다

우리의 필요한 备份을 고려하여, Bacula configurations에 “Apache DocumentRoot” 파일셋을 추가하게 됩니다:

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 포트 설정 파일도 추가하는 것이 좋을 수 있지만, 그것은 용이하게 替わる 것입니다.

이제 로드 balancer 서버 파일셋으로 이동합니다.

로드 balancer 서버 파일셋

우리의 로드 balancer 서버 복구 计画에 따라 필요한 备份 내용은 다음과 같습니다:

  • SSL cerificate (PEM)와 相关 파일: 예시에서는 /root/certs에 위치한 것입니다
  • HAProxy 설정 파일: /etc/haproxy에 위치합니다

우리의 필요한 备份을 고려하여, Bacula configurations에 “Apache DocumentRoot” 파일셋을 추가하게 됩니다:

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

저장하고 나가십시오.

지금我们的FileSets는 설정되었습니다. 이제 이 FileSets을 사용할 Bacula 백업 작업을 생성해보겠습니다.

Bacula 백업 작업 생성

우리의 서버들의 백업을 생성할 Bacula 백업 작업을 생성하겠습니다.

/etc/bacula/conf.djobs.conf 파일을 생성하세요:

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

데이터베이스 서버 백업 작업

데이터베이스 서버 백업 작업을 위해 “Backup db1″라는 새로운 작업을 생성하겠습니다. 여기서 중요한 것은 정확한 Client (db1-fd)와 FileSet (MySQL Database)를 지정하는 것입니다:

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

이제 응용 서버 백업 작업을 설정해보겠습니다.

응용 서버 백업 작업

응용 서버들에 대해 “Backup app1″과 “Backup app2″라는 두 개의 백업 작업을 생성하겠습니다. 여기서 중요한 것은 정확한 Clients (app1-fd와 app2-fd)와 FileSet (Apache DocumentRoot)를 지정하는 것입니다.

App1 작업:

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

アプリ2 ジョブ:

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

NOW WE WILL SET UP THE LOAD BALANCER SERVER BACKUP JOB.


LOAD BALANCER SERVER BACKUP JOB

FOR OUR LOAD BALANCER SERVER BACKUP JOB, WE WILL CREATE A NEW JOB NAMED “BACKUP LB1”. THE IMPORTANT THING HERE IS THAT WE SPECIFY THE CORRECT クライエント (lb1-fd) AND ファイルセット (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"
}

SAVE AND EXIT.

NOW OUR BACKUP JOBS ARE CONFIGURED. THE LAST STEP IS TO RESTART THE BACULA DIRECTOR.


RESTART BACULA DIRECTOR

ON THE バックアップ SERVER, RESTART THE BACULA DIRECTOR TO PUT ALL OF OUR CHANGES INTO EFFECT:

  1. sudo service bacula-director restart

이제 클라이언트 연결과 백업 작업을 시험해야 합니다. 이러한 両方의 내용은 How To Back Up a Server with Bacula 튜orial에 기술되어 있습니다. 이 튜orial은 Bacula 备份을 恢复了하는 방법도 다룹니다. MySQL 데이터베이스를 恢复了하는 것은 Percona XtraBackup 튜orial의 Perform Backup Restoration 단계를 따라야 합니다.

Backups Schedule Review

Bacula 备份 일정을 조절하려면 Bacula Director 구성을 수정해야 합니다 (/etc/bacula/bacula-dir.conf). 우리가 생성한 모든 备份 작업은 “DefaultJob” JobDef를 사용하고 있으며, 이는 “WeeklyCycle” 일정을 사용합니다. 이 일정은 다음과 같습니다:

  • 한 달의 첫 일요일에 11:05 PM에 전체 备份
  • 나머지 일요일에 모두 11:05 PM에 차이 备份
  • 나머지 날, 월요일에서 토요일까지 11:05 PM에 인kremental 备份

이러한 내용을 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 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

아래의 내용을 한국어로 번역하면 다음과 같습니다:

– 어떤 백업 작업의 시간표를 자유롭게 변경할 수 있습니다. 특히, 어떤 서버들의 시간표를 10:30에 동일하게 변경해야 합니다(application servers). 이는 어떤 상황에도 어떤 것들은 서로 矛盾되지 않게 되어야 합니다.

远程备份设置

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

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

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

次に、备份 サーバー上で、ルートとして無口化SSHキー对を生成します。今作成した远程备份 ユーザーに公開キーをインストールします。これについては、私たちの SSHキーの設定方法 チュートリアルに記載されています。

接下来,在备份 服务器上,编写一个rsync命令,将Bacula备份数据(/bacula/backup)复制到远程备份 服务器上的某个位置。 Rsyncの使用法は、私たちの Rsyncの使用法チュートリアルに記載されています。 そのコマンドはおそらくこのようになります:

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

そのコマンドをスクリプトに追加します。例えば、/usr/local/bin/rsync_backups.sh としてそれを実行可能にします。

最後に、Baculaの备份ジョブが通常完了する後、rsync_backups.sh スクリプトをルートとして設定するcronジョブを作成します。これについては、私たちの Cronを使用して定期タスクをスケジュールする方法 チュートリアルに記載されています。

これらを設定した後、明日になって、远程备份 サーバーに备份のコピーがあることを確認してください。

その他の考慮

우리가 이전에 말했듯이 당신의 백업의 디스크 요구사항은 아직 討論하지 않았습니다. 당신의 백업들이 얼마나 많은 디스크 공간을 사용하는지 확인해야 합니다, 그리고 당신의 需要과 資源에 따라 설정과 백업 시간표를 revisit 할 필요가 있습니다.

다른 서버들도 같이 설정해야 합니다. 예를 들어, 관리와 집중화된 로ging 서버들도 Bacula를 사용して 백업을 설정해야 합니다.

결론

이제 당신은 당신의 프로due션 애플리케이션 서버들의 매일 백업을 만들었습니다, 그리고 이 백업들의 remotecopy 도 있습니다. 파일을 복원하는 단계를 체험해보세요, 그리고 당신의 재난 대책에 이 단계를 포함시키는 것을 위해 준비해야 합니다.

다음으로 다음 강좌로 넘어가겠습니다: 프로duection 설치: 웹 アプlication — 모니터링.

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