Thứ hai, 01/06/2015 | 00:00 GMT+7

Xây dựng cho Sản xuất: Ứng dụng Web - backup

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 cài đặt hệ thống backup 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 backup . Lợi ích của việc sử dụng hệ thống backup chính thức, chẳng hạn như Bacula, là nó cung cấp cho bạn toàn quyền kiểm soát những gì bạn backup và khôi phục ở cấp độ file riêng lẻ, đồng thời bạn có thể lên lịch backup và khôi phục theo những gì phù hợp nhất với bạn.

Sơ đồ  backup

Các giải pháp như DigitalOcean Server Backups ( backup ảnh chụp nhanh của toàn bộ Server) rất dễ cài đặt và có thể đủ cho nhu cầu của bạn, nếu bạn chỉ yêu cầu backup hàng tuần. Nếu bạn chọn Backup DigitalOcean, hãy đảm bảo cài đặt các bản backup nóng cho database của bạn theo phần Tạo bản backup nóng cho database của bạn .

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

Bắt đầu nào.

Cài đặt Bacula trên Server backup

Cài đặt Bacula trên server backup của bạn theo hướng dẫn này: Cách cài đặt Bacula Server trên Ubuntu 14.04 .

Sau đó, hãy làm theo phần Tổ chức Cấu hình Giám đốc Bacula ( Server ) của hướng dẫn này: Cách Backup Server Ubuntu 14.04 bằng Bacula . Bạn cần Tên Giám đốc khi cài đặt các client Bacula (trên các server bạn muốn backup ). Dừng lại khi bạn đến phần Cài đặt và Cấu hình Ứng dụng khách Bacula .

Lưu ý ta sẽ sử dụng group RemoteFile cho tất cả các công việc backup mà ta sẽ cài đặt . Như đã nói, bạn có thể cần thay đổi một số cài đặt trước khi tiếp tục.

Cài đặt ứng dụng Bacula trên mỗi server

Cài đặt client Bacula trên mỗi server mà bạn muốn backup (db1, app1, app2 và lb1) theo phần Cài đặt và cấu hình client Bacula của hướng dẫn này: Cách backup server Ubuntu 14.04 bằng Bacula . Dừng lại khi bạn đến phần Add FileSets (Server) .

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

Thêm khách hàng Bacula vào server backup

Trên các bản backup , server Bacula, thêm tài nguyên Máy khách vào file /etc/bacula/conf.d/clients.conf cho mỗi server mà bạn đã cài đặt client Bacula.

Mở file khách clients.conf :

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

Đây là một ví dụ về định nghĩa tài nguyên Máy khách cho server database , db1 . Lưu ý giá trị của Tên phải trùng với Tên của tài nguyên FileDaemonMật khẩu phải trùng với Mật khẩu của tài nguyên Giám đốc , trên server khách — các giá trị này có thể được tìm thấy trong /etc/bacula/bacula-fd.conf trên mỗi Server khách Bacula:

client.conf - Ví dụ về định nghĩa tài nguyên client
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 Máy khách tương tự cho mỗi server khách Bacula còn lại. Trong ví dụ của ta , sẽ có bốn tài nguyên Máy khách khi ta hoàn tất: db1-fd , app1-fd , app2-fdlb1-fd . Điều này cấu hình Bacula Director, trên server backup , để có thể kết nối với ứng dụng Bacula trên mỗi server ..

Lưu và thoát.

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

Tạo bản backup nóng cho database của bạn

Để đảm bảo ta tạo ra các bản backup nhất quán (tức là có thể sử dụng được) cho database đang hoạt động của ta , cần phải đặc biệt chú ý. Một cách đơn giản và hiệu quả để tạo các bản backup nóng với MySQL là sử dụng Percona XtraBackup.

Cài đặt Percona XtraBackup

Trên server database của bạn, db1 , cài đặt và cấu hình Percona XtraBackup theo hướng dẫn này: Cách tạo bản backup nóng của database MySQL với Percona XtraBackup trên Ubuntu 14.04 . Dừng lại khi bạn đến phần Thực hiện backup đầy đủ nóng .

Tạo tập lệnh XtraBackup

Percona XtraBackup đã sẵn sàng để tạo các bản backup nóng cho database MySQL của bạn, cuối cùng sẽ được backup bằng Bacula (hoặc DigitalOcean Backups), nhưng các bản backup nóng phải được lên lịch bằng cách nào đó. Ta sẽ cài đặt 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 một 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. Đảm bảo thay thế user và password bằng bất cứ thứ gì bạn cài đặt 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 quyền siêu user ) sẽ xóa bản backup XtraBackup hiện có tại /data/backups/full và tạo một bản backup đầy đủ mới. Bạn có thể tìm thấy thêm chi tiết về cách tạo bản backup với XtraBackup trong phần Thực hiện backup toàn bộ nóng của hướng dẫn XtraBackup.

Làm cho tập lệnh có thể thực thi:

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

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

Tạo file 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:

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

Điều này lập lịch cho tập lệnh chạy dưới dạng root hàng ngày vào lúc 10:30 tối (giờ thứ 22, phút thứ 30). Ta chọn thời điểm này vì Bacula hiện được lên lịch chạy các công việc dự phòng lúc 11:05 tối hàng ngày — ta sẽ thảo luận về việc đ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 bản backup nóng database đã được cài đặt , hãy xem FileSets backup Bacula.

Cấu hình Bacula FileSets

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

Trên server backup của bạn, hãy mở file filesets.conf :

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

File server database

Các bản backup cần thiết cho server database của ta , theo kế hoạch khôi phục server database của ta , bao gồm:

  • Database MySQL: một bản backup được tạo bởi tập lệnh XtraBackup của ta trong /data/backups/full , hàng ngày lúc 10:30 tối
  • Cấu hình MySQL: nằm trong /etc/mysql

Ta cũng sẽ bao gồm tập lệnh XtraBackup: /usr/local/bin/run_xtrabackup.sh và file cron được liên kết.

Với các bản backup bắt buộc của ta , ta sẽ thêm FileSet “ Database MySQL” này vào cấu hình Bacula của ta :

filesets.conf - Database 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   } } 

Bây giờ ta hãy chuyển sang server ứng dụng FileSet.

File server ứng dụng

Các bản backup bắt buộc cho server ứng dụng của ta , theo kế hoạch khôi phục server ứng dụng của ta , bao gồm:

  • Tệp ứng dụng: nằm trong /var/www/html trong ví dụ của ta

Với các bản backup bắt buộc của ta , ta sẽ thêm FileSet “Apache DocumentRoot” này vào cấu hình Bacula của ta :

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ể cần bao gồm file cấu hình cổng Apache, nhưng file này có thể dễ dàng thay thế.

Bây giờ ta hãy chuyển sang server cân bằng tải FileSet.

Load Balancer Server FileSet

Các bản backup bắt buộc cho các server cân bằng tải của ta , theo kế hoạch khôi phục server cân bằng tải của ta , bao gồm:

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

Với các bản backup bắt buộc của ta , ta sẽ thêm FileSet “Apache DocumentRoot” này vào cấu hình Bacula của ta :

filesets.conf - Chứng chỉ SSL và Cấu hình HAProxy
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 ta đã được cấu hình. Hãy chuyển sang việc tạo các Công việc backup Bacula sẽ sử dụng các FileSets này.

Tạo công việc backup Bacula

Ta sẽ tạo các Công việc backup Bacula sẽ chạy và tạo các bản backup các server của ta .

Tạo một jobs.conf file trong /etc/bacula/conf.d :

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

Công việc backup server database

Đối với công việc backup server database của ta , ta sẽ tạo một công việc mới có tên “ Backup db1”. Điều quan trọng ở đây là ta chỉ định đúng Client (db1-fd) và FileSet (MySQL Database):

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

Bây giờ ta sẽ cài đặt các công việc backup server ứng dụng.

Công việc backup server ứng dụng

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

Công việc App1:

job.conf - Ứng dụng backup 1
Job {   Name = "Backup app1"   JobDefs = "DefaultJob"   Client = app1-fd   Pool = RemoteFile   FileSet="Apache DocumentRoot" } 

Công việc App2:

job.conf - Ứng dụng backup 2
Job {   Name = "Backup app2"   JobDefs = "DefaultJob"   Client = app2-fd   Pool = RemoteFile   FileSet="Apache DocumentRoot" } 

Bây giờ ta sẽ cài đặt công việc backup server cân bằng tải.

Công việc backup server cân bằng tải

Đối với công việc backup server cân bằng tải của ta , ta sẽ tạo một công việc mới có tên “ Backup lb1”. Điều quan trọng ở đây là ta chỉ định đúng Client (lb1-fd) và FileSet (SSL Certs và HAProxy Config):

job.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 backup của ta đã được cấu hình . Bước cuối cùng là khởi động lại Bacula Director.

Khởi động lại Bacula Director

Trên server backup , khởi động lại Bacula Director để tất cả các thay đổi của ta có hiệu lực:

  • sudo service bacula-director restart

Đến đây, bạn cần kiểm tra các kết nối client và công việc backup của bạn , cả hai đều được đề cập trong hướng dẫn Cách backup server bằng Bacula . Hướng dẫn đó cũng bao gồm cách khôi phục các bản backup Bacula. Lưu ý việc khôi phục database MySQL sẽ yêu cầu bạn làm theo bước Thực hiện khôi phục backup trong Hướng dẫn Percona XtraBackup.

Xem lại lịch trình backup

Lịch trình backup Bacula có thể được điều chỉnh bằng cách sửa đổi cấu hình Bacula Director ( /etc/bacula/bacula-dir.conf ). Tất cả các Công việc dự phòng mà ta đã tạo đều sử dụng JobDef “DefaultJob”, sử dụng lịch “WeeklyCycle”, được định nghĩa là:

  • Bản backup đầy đủ vào Chủ nhật đầu tiên của tháng lúc 11:05 chiều
  • Các bản backup chênh lệch vào tất cả các Chủ Nhật khác lúc 11:05 tối
  • Backup tăng dần 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 console Bacula để kiểm tra trạng thái của Giám đốc. Nó sẽ xuất ra tất cả các công việc đã lên lịch của bạn:

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

Hãy thoải mái thêm hoặc điều chỉnh lịch trình của bất kỳ công việc dự phòng nào của bạn. Sẽ có ý nghĩa nếu sửa đổi lịch trình của các server ứng dụng để diễn ra cùng lúc với tập lệnh Percona XtraBackup được thực thi (10:30 tối). Điều này sẽ ngăn ứng dụng và bản backup database không nhất quán với nhau.

Cài đặt backup từ xa

Bây giờ ta đã sẵn sàng để cài đặt một server từ xa sẽ lưu trữ các bản backup Bacula của ta . Server từ xa này phải nằm trong một khu vực địa lý riêng biệt, do đó bạn sẽ có một bản sao của các bản backup quan trọng của bạn ngay cả khi có sự cố xảy ra trong trung tâm dữ liệu production của bạn. Trong ví dụ của ta , ta sẽ sử dụng khu vực San Francisco (SFO1) DigitalOcean cho server remotebackups của ta .

Ta sẽ giải thích một phương pháp đơn giản để gửi các bản backup của ta từ server backup của ta để server của ta remotebackups sử dụng public key SSH, rsync, và cron.

Trên server remotebackups, tạo một user sẽ được sử dụng để đăng nhập rsync.

Tiếp theo, trên server backup , tạo cặp SSH key không cần password làm root . Cài đặt public key trên user remotebackups mà bạn vừa tạo. Điều này được đề cập trong hướng dẫn Cách cài đặt SSH key của ta .

Trên server backup , hãy viết lên một lệnh rsync rằng sao chép Bacula backup dữ liệu ( /bacula/backup ) để ở đâu đó trên server remotebackups. Cách sử dụng Rsync được đề cập trong hướng dẫn Cách Sử dụng Rsync của ta . Lệnh có thể 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 một tập lệnh, chẳng hạn như /usr/local/bin/rsync_backups.sh và làm cho nó có thể thực thi được.

Cuối cùng, bạn cần cài đặt một công việc cron chạy tập lệnh rsync_backups.sh làm folder root , sau khi các công việc backup Bacula thường hoàn thành. Điều này được đề cập trong hướng dẫn Cách lập lịch các công việc thường xuyên với Cron của ta .

Sau khi bạn đặt tất cả lên này, kiểm chứng rằng có một bản sao của bản backup của bạn trên server remotebackups vào ngày hôm sau.

Những ý kiến khác

Ta đã không nói về các yêu cầu đĩa cho các bản backup của bạn. Bạn chắc chắn sẽ muốn xem lại dung lượng ổ đĩa mà các bản backup của bạn đang sử dụng, đồng thời sửa đổi lịch trình cài đặt và backup dựa trên nhu cầu và tài nguyên của bạn.

Ngoài việc tạo bản backup của các server ứng dụng, bạn có thể sẽ muốn cài đặt bản backup cho bất kỳ server nào khác được thêm vào cài đặt của bạn. Ví dụ: bạn nên cấu hình Bacula để tạo bản backup của server giám sát và ghi log tập trung sau khi bạn cài đặt và chạy chúng.

Kết luận

Đến đây bạn sẽ có các bản backup hàng ngày và bản sao từ xa của các bản backup đó, của các server ứng dụng production của bạn. Đảm bảo xác minh bạn có thể khôi phục file và thêm các bước khôi phục dữ liệu vào gói khôi phục của bạn.

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


Tags:

Các tin liên quan

Xây dựng cho Sản xuất: Ứng dụng Web - Tổng quan
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Giám sát
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Triển khai
2015-06-01
Xây dựng cho sản xuất: Ứng dụng web - Ghi log tập trung
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Lập kế hoạch khôi phục
2015-06-01
Cách cài đặt control panel lưu trữ web Sentora trên Ubuntu 14.04
2015-04-27
Cách cài đặt web server OpenLiteSpeed trên CentOS 7
2015-04-16
Cách cài đặt web server OpenLiteSpeed trên Ubuntu 14.04
2015-04-15
Cách cài đặt Bacula-Web trên Ubuntu 14.04
2015-04-03
Khái niệm cơ bản về bộ nhớ đệm trên web: Thuật ngữ, Tiêu đề HTTP và Chiến lược lưu vào bộ đệm
2015-04-01