19/09/2018, 09:47

Xây dựng cho sản xuất: Ứng dụng web - Bản sao lưu

Giới thiệu Sau khi đưa ra kế hoạch khôi phục cho các thành phần khác nhau của ứng dụng, bạn nên thiết lập hệ thống sao lưu cần thiết để hỗ trợ nó. Hướng dẫn này sẽ tập trung vào việc sử dụng Bacula như một giải pháp sao lưu. Lợi ích của việc sử dụng một hệ thống sao lưu chính thức, như Bacula, là ...

Giới thiệu

Sau khi đưa ra kế hoạch khôi phục cho các thành phần khác nhau của ứng dụng, bạn nên thiết lập hệ thống sao lưu cần thiết để hỗ trợ nó. Hướng dẫn này sẽ tập trung vào việc sử dụng Bacula như một giải pháp sao lưu. Lợi ích của việc sử dụng một hệ thống sao lưu chính thức, như Bacula, là nó cho phép bạn kiểm soát hoàn toàn những gì bạn sao lưu và phục hồi ở cấp độ tệp riêng lẻ và bạn có thể lên lịch sao lưu và khôi phục theo những gì tốt nhất cho mình.

Backup Diagram

Các giải pháp như DigitalOcean Droplet Backups (Sao lưu ảnh chụp nhanh toàn bộ Droplet) dễ thiết lập và có thể đủ cho nhu cầu của bạn, nếu bạn chỉ yêu cầu sao lưu hàng tuần. Nếu bạn chọn sao lưu DigitalOcean, hãy đảm bảo thiết lập bản sao lưu nóng của cơ sở dữ liệu của bạn bằng cách làm theo Tạo bản sao lưu nóng của cơ sở dữ liệu của bạn phần.

Trong phần này của hướng dẫn, chúng tôi sẽ thiết lập một Bacula để duy trì các bản sao lưu hàng ngày của sao lưu cần thiết của các máy chủ bao gồm thiết lập ứng dụng của bạn (db1, app1, app2 và lb1), được định nghĩa trước đó trong kế hoạch khôi phục của chúng tôi về cơ bản, đây là hướng dẫn cho bạn biết cách sử dụng Bacula để tạo bản sao lưu của LAMP stack. Chúng tôi cũng sẽ sử dụng Percona XtraBackup để tạo bản sao lưu nóng của cơ sở dữ liệu MySQL của bạn. Cuối cùng, chúng tôi sẽ sử dụng rsync để tạo một bản sao lưu của bạn, trên một máy chủ trong một trung tâm dữ liệu từ xa. Thao tác này sẽ thêm hai máy chủ vào thiết lập của bạn: sao lưuremotebackups (nằm trong một trung tâm dữ liệu riêng biệt).

Băt đâu nao.

Cài đặt Bacula trên máy chủ sao lưu

Thiết lập Bacula trên sao lưu máy chủ bằng cách làm theo hướng dẫn này: Làm thế nào để cài đặt máy chủ Bacula trên Ubuntu 14.04.

Sau đó làm theo Tổ chức cấu hình giám đốc Bacula (Server) phần của hướng dẫn này: Làm thế nào để sao lưu một máy chủ Ubuntu 14.04 với Bacula. Bạn sẽ cần tên giám đốc khi thiết lập các máy khách Bacula (trên các máy chủ bạn muốn sao lưu). Dừng lại khi bạn đến Cài đặt và định cấu hình ứng dụng Bacula phần.

Lưu ý rằng chúng ta sẽ sử dụng pool RemoteFile cho tất cả các công việc sao lưu mà chúng ta sẽ thiết lập. Với điều đó đã nói, bạn có thể muốn thay đổi một số cài đặt trước khi tiếp tục.

Cài đặt Bacula Client trên mỗi máy chủ

Cài đặt ứng dụng Bacula trên mỗi máy chủ mà bạn muốn sao lưu (db1, app1, app2 và lb1) bằng cách làm theo Cài đặt và định cấu hình ứng dụng Bacula phần của hướng dẫn này: Làm thế nào để sao lưu một máy chủ Ubuntu 14.04 với Bacula. Dừng lại khi bạn đến Thêm tệp (máy chủ) phần.

Lưu ý rằng bạn sẽ cần Tên FileDaemon (thường là tên máy chủ được nối thêm bởi "-fd") và Giám đốc mật khẩu (mật khẩu mà máy chủ Bacula sẽ sử dụng để kết nối với từng máy khách) từ bacula-fd.conf trên mỗi máy chủ.

Thêm máy khách Bacula vào máy chủ sao lưu

Trên sao lưu, máy chủ Bacula, thêm Tài nguyên khách hàng đến /etc/bacula/conf.d/clients.conf tệp cho mỗi máy chủ mà bạn đã cài đặt máy khách Bacula.

Mở clients.conf tập tin:

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

Đây là một ví dụ về định nghĩa tài nguyên khách hàng cho máy chủ cơ sở dữ liệu, db1. Lưu ý rằng giá trị của Tên phải khớp với Tên của FileDaemon tài nguyên và Mật khẩu phải khớp với Mật khẩu của Giám đốc tài nguyên, trên máy chủ khách hàng - những giá trị này có thể được tìm thấy trong /etc/bacula/bacula-fd.conf trên mỗi máy chủ khách Bacula:

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
}

Tạo một tài nguyên khách hàng tương tự cho mỗi máy chủ khách Bacula còn lại. Trong ví dụ của chúng tôi, sẽ có bốn tài nguyên Khách hàng khi chúng tôi kết thúc: db1-fd, app1-fd, app2-fdlb1-fd. Điều này cấu hình Giám đốc Bacula, trên sao lưu máy chủ, để có thể kết nối với máy khách Bacula trên mỗi máy chủ ..

Lưu và thoát.

Bạn có thể tìm thấy thêm chi tiết về phần này trong Cài đặt và định cấu hình ứng dụng Bacula bên trong Làm thế nào để sao lưu máy chủ Ubuntu bằng hướng dẫn Bacula.

Tạo bản sao lưu nóng của cơ sở dữ liệu của bạn

Để đảm bảo rằng chúng tôi sản xuất các bản sao lưu nhất quán (tức là có thể sử dụng) của cơ sở dữ liệu hoạt động của chúng tôi, cần phải lưu ý đặc biệt. Một cách đơn giản và hiệu quả để tạo bản sao lưu nóng với MySQL là sử dụng Percona XtraBackup.

Cài đặt Percona XtraBackup

Trên máy chủ cơ sở dữ liệu của bạn, db1, cài đặt và cấu hình Percona XtraBackup bằng cách làm theo hướng dẫn này: Làm thế nào để tạo bản sao lưu nóng của cơ sở dữ liệu MySQL với Percona XtraBackup trên Ubuntu 14.04. Dừng lại khi bạn đến Thực hiện sao lưu toàn bộ nóng phần.

Tạo tập lệnh XtraBackup

Percona XtraBackup đã sẵn sàng để tạo bản sao lưu nóng của cơ sở dữ liệu MySQL của bạn, cuối cùng sẽ được sao lưu bởi Bacula (hoặc DigitalOcean Backups), nhưng các bản sao lưu nóng phải được lên lịch bằng cách nào đó. Chúng tôi sẽ thiết lập giải pháp đơn giản nhất: một tập lệnh bash và một công việc cron.

Tạo tập lệnh bash có tên run_extra_backup.sh trong /usr/local/bin:

sudo vi /usr/local/bin/run_xtrabackup.sh

Thêm tập lệnh sau. Hãy đảm bảo thay thế người dùng và mật khẩu bằng bất kỳ thứ gì bạn đã thiết lập khi cài đặt 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

Lưu và thoát. Chạy tập lệnh này (với các đặc quyền superuser) sẽ xóa bản sao lưu XtraBackup hiện có tại /data/backups/full và tạo một bản sao lưu đầy đủ mới. Bạn có thể tìm thấy thêm chi tiết về cách tạo bản sao lưu với XtraBackup trong Thực hiện sao lưu toàn bộ nóng trong phần hướng dẫn của XtraBackup.

Làm cho tập lệnh chạy được:

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

Để sao lưu đúng cơ sở dữ liệu của chúng ta, chúng ta phải chạy (và hoàn thành) tập lệnh XtraBackup trước khi Bacula cố gắng sao lưu máy chủ cơ sở dữ liệu. Một giải pháp tốt là định cấu hình công việc sao lưu Bacula của bạn để chạy tập lệnh dưới dạng "tập lệnh sao lưu trước", nhưng chúng tôi sẽ chọn sử dụng công việc lương thấp để giữ cho nó đơn giản.

Tạo tệp cấu hình cron (tệp trong /etc/cron.d được thêm vào crontab của root):

sudo vi /etc/cron.d/xtrabackup

Thêm công việc cron sau đây:

/etc/cron.d/xtrabackup

30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

Lịch trình này chạy tập lệnh gốc mỗi ngày lúc 10:30 tối (22 giờ 30 phút). Chúng tôi đã chọn thời gian này bởi vì Bacula hiện đang được lên kế hoạch để chạy các công việc sao lưu của mình lúc 11:05 tối hàng ngày ”chúng tôi sẽ thảo luận điều chỉnh điều này sau. Điều này cho phép 35 phút để hoàn thành tập lệnh XtraBackup.

Bây giờ các backup cơ sở dữ liệu được thiết lập, chúng ta hãy xem xét tập tin sao lưu Bacula.

Cấu hình tập tin Bacula

Bacula sẽ tạo bản sao lưu các tệp được chỉ định trong FileSets được liên kết với Công việc sao lưu sẽ được thực hiện. Phần này sẽ bao gồm việc tạo các FileSets bao gồm sao lưu cần thiết mà chúng tôi đã xác định trong các kế hoạch khôi phục của mình. Thêm chi tiết về việc thêm FileSets vào Bacula có thể được tìm thấy trong Thêm tệp (máy chủ) phần của hướng dẫn Bacula.

Về bạn sao lưu máy chủ, mở filesets.conf tập tin:

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

Bộ máy chủ cơ sở dữ liệu máy chủ

Các bản sao lưu cần thiết cho máy chủ cơ sở dữ liệu của chúng tôi, theo gói khôi phục máy chủ cơ sở dữ liệu của chúng tôi, bao gồm:

  • Cơ sở dữ liệu MySQL: một bản sao lưu được tạo bởi tập lệnh XtraBackup của chúng tôi trong /data/backups/full, hàng ngày lúc 10:30 chiều
  • Cấu hình MySQL: nằm ở /etc/mysql

Chúng tôi cũng sẽ bao gồm tập lệnh XtraBackup: /usr/local/bin/run_xtrabackup.shvà tệp cron được liên kết.

Với các bản sao lưu cần thiết của chúng tôi, chúng tôi sẽ thêm tập tin "Cơ sở dữ liệu MySQL" này vào cấu hình Bacula của chúng tôi:

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

Bây giờ hãy chuyển sang máy chủ ứng dụng FileSet.

Máy chủ ứng dụng FileSet

Các bản sao lưu cần thiết cho các máy chủ ứng dụng của chúng tôi, theo gói khôi phục máy chủ ứng dụng của chúng tôi, bao gồm:

  • Tệp ứng dụng: nằm ở /var/www/html trong ví dụ của chúng tôi

Với các bản sao lưu cần thiết của chúng tôi, chúng tôi sẽ thêm tập tin "Apache DocumentRoot" này vào cấu hình Bacula của chúng tôi:

filesets.conf — Apache DocumentRoot

FileSet {
  Name = "Apache DocumentRoot"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /var/www/html
  }
  Exclude {
    File = /var/www/html/exclude
  }
}

Bạn cũng có thể muốn bao gồm tệp cấu hình cổng Apache, nhưng có thể thay thế dễ dàng.

Bây giờ hãy chuyển sang máy chủ cân bằng tải FileSet.

Load Balancer Server FileSet

Các bản sao lưu cần thiết cho các máy chủ cân bằng tải của chúng tôi, theo gói khôi phục máy chủ cân bằng tải của chúng tôi, bao gồm:

  • Chứng chỉ SSL (PEM) và các tệp liên quan: nằm ở /root/certs trong ví dụ của chúng tôi
  • Tệp cấu hình HAProxy: nằm ở /etc/haproxy

Với các bản sao lưu cần thiết của chúng tôi, chúng tôi sẽ thêm tập tin "Apache DocumentRoot" này vào cấu hình Bacula của chúng tôi:

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

Lưu và thoát.

Bây giờ FileSets của chúng tôi được cấu hình. Hãy chuyển sang tạo công việc sao lưu Bacula sẽ sử dụng các FileSets này.

Tạo công việc sao lưu Bacula

Chúng tôi sẽ tạo ra công việc sao lưu Bacula sẽ chạy và tạo bản sao lưu của các máy chủ của chúng tôi.

Tạo một jobs.conf trong tập tin /etc/bacula/conf.d:

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

Công việc sao lưu máy chủ cơ sở dữ liệu

Đối với công việc sao lưu máy chủ cơ sở dữ liệu của chúng tôi, chúng tôi sẽ tạo một công việc mới có tên là "Sao lưu db1". Điều quan trọng ở đây là chúng tôi chỉ định chính xác Khách hàng (db1-fd) và FileSet (Cơ sở dữ liệu MySQL):

jobs.conf — Backup db1

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

Bây giờ chúng ta sẽ thiết lập các công việc sao lưu máy chủ ứng dụng.

Công việc sao lưu máy chủ ứng dụng

Đối với các máy chủ ứng dụng của chúng tôi, chúng tôi sẽ tạo hai công việc sao lưu có tên là "Backup app1" và "Backup app2". Điều quan trọng ở đây là chúng tôi chỉ định chính xác Khách hàng (app1-fd và app2-fd) và FileSet (Apache DocumentRoot).

Công việc App1:

jobs.conf — Backup app1

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

Công việc App2:

jobs.conf — Backup app2

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

Bây giờ chúng tôi sẽ thiết lập công việc sao lưu máy chủ cân bằng tải.

Load Balancer Server Backup Job

Đối với công việc sao lưu máy chủ cân bằng tải của chúng tôi, chúng tôi sẽ tạo một công việc mới có tên là "Backup lb1". Điều quan trọng ở đây là chúng tôi chỉ định chính xác Khách hàng (lb1-fd) và FileSet (SSL Certs và Cấu hình HAProxy):

jobs.conf — Backup lb1

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

Lưu và thoát.

Bây giờ công việc sao lưu của chúng tôi được cấu hình. Bước cuối cùng là khởi động lại Giám đốc Bacula.

Khởi động lại Giám đốc Bacula

Trên sao lưu máy chủ, khởi động lại Giám đốc Bacula để đưa tất cả các thay đổi của chúng tôi có hiệu lực:

sudo service bacula-director restart

Tại thời điểm này, bạn sẽ muốn kiểm tra các kết nối khách hàng của bạn và các công việc sao lưu, cả hai đều được bao phủ trong Làm thế nào để sao lưu một máy chủ với hướng dẫn Bacula. Hướng dẫn đó cũng bao gồm cách khôi phục các bản sao lưu của Bacula. Lưu ý rằng khôi phục cơ sở dữ liệu MySQL sẽ yêu cầu bạn thực hiện theo Thực hiện khôi phục sao lưu bước trong Hướng dẫn Percona XtraBackup.

Xem lại lịch sao lưu

Lịch trình sao lưu Bacula có thể được điều chỉnh bằng cách thay đổi cấu hình của Giám đốc Bacula (/etc/bacula/bacula-dir.conf). Tất cả các công việc sao lưu mà chúng tôi đã tạo sử dụng JobDef "DefaultJob", sử dụng lịch biểu "WeeklyCycle", được định nghĩa là:

  • Sao lưu toàn bộ vào Chủ nhật đầu tiên của tháng lúc 11:05 chiều
  • Sao lưu khác biệt vào tất cả các ngày Chủ Nhật khác vào lúc 11:05 chiều
  • Sao lưu gia tăng vào các ngày khác, từ Thứ Hai đến Thứ Bảy, lúc 11:05 chiều

Bạn có thể xác minh điều này bằng cách sử dụng bảng điều khiển Bacula để kiểm tra trạng thái của Giám đốc. Nó sẽ xuất tất cả các công việc đã lên lịch của bạn:

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

Vui lòng thêm hoặc điều chỉnh lịch biểu của bất kỳ công việc sao lưu nào của bạn. Nó sẽ có ý nghĩa để sửa đổi lịch trình của các máy chủ ứng dụng xảy ra cùng một lúc mà kịch bản Percona XtraBackup được thực thi (10:30 chiều). Điều này sẽ ngăn chặn các ứng dụng và sao lưu cơ sở dữ liệu không nhất quán với nhau.

Thiết lập sao lưu từ xa

Bây giờ chúng ta đã sẵn sàng để thiết lập một máy chủ từ xa sẽ lưu trữ các bản sao lưu của Bacula của chúng ta. Máy chủ từ xa này phải ở trong một khu vực địa lý riêng biệt, do đó bạn sẽ có một bản sao các bản sao lưu quan trọng của mình ngay cả khi có thảm họa trong trung tâm dữ liệu sản xuất của bạn. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng vùng San Francisco (SFO1) của DigitalOcean cho remotebackups máy chủ.

Chúng tôi sẽ giải thích một phương pháp đơn giản để gửi các bản sao lưu của chúng tôi từ sao lưu máy chủ của chúng tôi remotebackups máy chủ sử dụng các khóa SSH công khai, rsync và cron.

Trên remotebackups máy chủ, tạo người dùng sẽ được sử dụng để đăng nhập rsync.

Tiếp theo, trên sao lưu máy chủ, tạo cặp khóa SSH mật khẩu ít hơn làm gốc. Cài đặt khóa công khai trên remotebackups người dùng mà bạn vừa tạo. Điều này được đề cập trong Cách thiết lập khóa SSH hướng dẫn.

Trên sao lưu máy chủ, viết một lệnh rsync sao chép dữ liệu sao lưu Bacula (/bacula/backup) đến một nơi nào đó trên remotebackups máy chủ. Rsync sử dụng được bao phủ trong của chúng tôi Cách sử dụng hướng dẫn Rsync. Lệnh này có thể sẽ trông giống như sau:

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

Thêm lệnh vào tập lệnh, chẳng hạn như /usr/local/bin/rsync_backups.sh và làm cho nó thực thi được.

Cuối cùng, bạn sẽ muốn thiết lập một công việc định kỳ chạy rsync_backups.sh kịch bản như là người chủ, sau khi các công việc sao lưu của Bacula thường hoàn thành. Điều này được đề cập trong Làm thế nào để lịch trình công việc thường xuyên với Cron hướng dẫn.

Sau khi bạn thiết lập tất cả điều này, hãy xác minh rằng có một bản sao lưu của bạn trên remotebackups máy chủ vào ngày hôm sau.

Những ý kiến ​​khác

Chúng tôi đã không nói về các yêu cầu về đĩa cho các bản sao lưu của bạn. Bạn chắc chắn sẽ muốn xem lại dung lượng ổ đĩa của bạn đang sử dụng bao nhiêu, và sửa lại lịch trình thiết lập và sao lưu của bạn dựa trên nhu cầu và tài nguyên của bạn.

Ngoài việc tạo bản sao lưu của máy chủ ứng dụng của bạn, có thể bạn sẽ muốn thiết lập sao lưu cho bất kỳ máy chủ nào khác được thêm vào thiết lập của bạn. Ví dụ, bạn nên cấu hình Bacula để tạo các bản sao lưu của các máy chủ ghi nhật ký và tập trung của bạn một khi bạn khởi động và chạy chúng.

Phần kết luận

Bây giờ bạn sẽ có bản sao lưu hàng ngày và bản sao từ xa của các bản sao lưu đó, của các máy chủ ứng dụng sản xuất của bạn. Hãy chắc chắn xác minh rằng bạn có thể khôi phục các tệp và thêm các bước khôi phục dữ liệu của bạn vào các gói khôi phục của bạn.

Tiếp tục với hướng dẫn tiếp theo để bắt đầu thiết lập giám sát cho thiết lập máy chủ sản xuất của bạn: Xây dựng cho sản xuất: Ứng dụng web - Giám sát.

0