Thứ năm, 11/06/2015 | 00:00 GMT+7

Cách backup server LAMP bằng Bacula trên Ubuntu 14.04

Sau khi cài đặt và chạy server ứng dụng của bạn, bước quan trọng tiếp theo là cài đặt hệ thống backup . Hệ thống backup sẽ cho phép bạn tạo các bản backup dữ liệu định kỳ và khôi phục dữ liệu từ các bản backup đó. Vì dữ liệu có thể bị mất do lỗi user hoặc sự cố phần cứng cuối cùng mà bất kỳ hệ thống máy tính nào cũng dễ mắc phải, bạn cần cài đặt các bản backup như một mạng lưới an toàn.

Hướng dẫn này sẽ chỉ cho bạn cách tạo bản backup thích hợp của một ứng dụng PHP, chạy LAMP trên một server Ubuntu 14.04 duy nhất, bằng cách sử dụng một server backup riêng đang chạy Bacula. Một trong những lợi ích của việc sử dụng hệ thống backup như Bacula là nó cung cấp cho bạn toàn quyền kiểm soát những gì cần được backup và khôi phục, ở cấp độ file riêng lẻ và lịch trình khi nào các bản backup sẽ được tạo. Việc có tính chi tiết ở cấp độ file khi tạo bản backup cho phép ta giới hạn lựa chọn backup của bạn ở chỉ những file cần thiết, điều này sẽ tiết kiệm dung lượng ổ đĩa so với backup toàn bộ hệ thống file .

Sơ đồ  backup

Nếu điều này có vẻ quá mức đối với bạn, bạn có thể cần xem xét DigitalOcean Server Backup ( backup ảnh chụp nhanh của toàn bộ Server), phải được bật khi bạn tạo Server của bạn . Những bản backup này 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 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 — điều này là cần thiết đảm bảo rằng bản backup database của bạn sẽ nhất quán (có thể sử dụng được).

Yêu cầu

Hướng dẫn này giả định bạn đang chạy một ứng dụng PHP, chẳng hạn như WordPress, đang chạy trên LAMP (Linux, Apache, MySQL / MariaDB và PHP) trên một server Ubuntu 14.04 duy nhất, có bật mạng riêng. Ta sẽ gọi đây là server LAMP . Đối với ví dụ của ta , ta sẽ tạo bản backup của một server WordPress được tạo theo các hướng dẫn sau:

Nếu bạn đang chạy một ứng dụng PHP khác hoặc sử dụng Nginx thay vì Apache, thì hướng dẫn này sẽ vẫn hoạt động tốt nếu bạn thực hiện bất kỳ điều chỉnh cần thiết nào đối với lựa chọn backup của bạn .

Tất nhiên, bạn cần quyền truy cập sudo vào một server mà phần mềm server Bacula sẽ được cài đặt trên đó, ta sẽ gọi đó là server backup . Lý tưởng nhất là nó sẽ nằm trong cùng một trung tâm dữ liệu với server LAMP của bạn và đã bật mạng riêng. Các bản backup được tạo sẽ nằm trên server này, vì vậy nó cần đủ dung lượng đĩa để lưu trữ nhiều bản sao của lựa chọn backup của bạn.

Lựa chọn backup

Như đã đề cập trong phần giới thiệu, lựa chọn backup của ta — các file sẽ được sao chép mỗi khi tạo bản backup — sẽ chỉ bao gồm các file cần thiết để khôi phục ứng dụng của bạn về trạng thái trước đó. Tóm lại, điều này nghĩa là ta sẽ backup các dữ liệu sau:

  • Tệp ứng dụng PHP: Đây sẽ là DocumentRoot của web server của bạn.Trên Ubuntu, nó sẽ là /var/www/html theo mặc định
  • Database MySQL: Trong khi các file dữ liệu MySQL thường được lưu trữ trong /var/lib/mysql , ta phải tạo một bản backup nóng của database ở một vị trí khác. Các bản backup nóng sẽ là một phần trong lựa chọn backup của ta

Để thuận tiện, ta cũng sẽ bao gồm các file cấu hình Apache và MySQL trong lựa chọn backup của ta . Nếu bạn có file quan trọng nào khác, chẳng hạn như khóa SSL và file certificate , hãy nhớ bao gồm cả những file đó.

Phần còn lại của các file trên server có thể được thay thế bằng cách thực hiện theo các bước cài đặt phần mềm của cài đặt ban đầu. Trong trường hợp server bị lỗi, ta có thể tạo server LAMP thay thế theo các hướng dẫn yêu cầu , sau đó khôi phục các bản backup và khởi động lại các dịch vụ thích hợp.

Nếu bạn không chắc tại sao ta đưa các file nói trên vào lựa chọn backup , hãy xem phân đoạn Lập kế hoạch khôi phục của loạt bài hướng dẫn Xây dựng cho Sản xuất: Ứng dụng Web gồm nhiều phần. Nó mô tả cách một kế hoạch khôi phục có thể được phát triển cho một ứng dụng web, sử dụng cài đặt nhiều server làm ví dụ.

Hãy cài đặt các bản backup nóng của database của ta .

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

Để đả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 bản backup nóng với MySQL là sử dụng Percona XtraBackup.

Cài đặt Percona XtraBackup

Trên server LAMP của bạn, hãy 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. Tóm lại, tập lệnh này sẽ duy trì một bản backup nóng của database . 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 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ì công việc backup mặc định của Bacula được lên lịch chạy 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 cài đặt Bacula trên server backup của ta .

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

Trên server backup của bạn, hãy cài đặt server Bacula theo hướng dẫn này: Cách cài đặt server Bacula 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 Bacula Client trên LAMP Server

Trên server LAMP của bạn, cài đặt ứng dụng Bacula theo phần Cài đặt và cấu hình ứng dụng 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 ứng dụng Bacula) từ bacula-fd.conf trên LAMP người phục vụ.

Thêm client backup vào server backup

Trên server backup của bạn, server Bacula, thêm tài nguyên Máy khách cho server LAMP vào file /etc/bacula/conf.d/clients.conf .

Mở file khách clients.conf :

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

Định nghĩa tài nguyên client cho server LAMP sẽ trông giống như khối mã sau. 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 Director , trên server LAMP — bạn có thể tìm thấy các giá trị này trong /etc/bacula/bacula-fd.conf trên Server LAMP:

client.conf - Ví dụ về định nghĩa tài nguyên client
Client {   Name = lamp-fd   Address = lamp_private_IP_or_hostname   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 } 

Lưu và thoát. Đ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 ..

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 .

Bây giờ hãy cấu hình 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 file mà ta đã xác định là một phần của lựa chọn backup của ta , trước đó. 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

Các bản backup cần thiết cho server LAMP của ta , theo lựa chọn backup của ta , bao gồm:

  • Tệp ứng dụng PHP: /var/www/html
  • Database MySQL: /data/backups/full - full hot backup được tạo hàng ngày lúc 10:30 tối bằng script XtraBackup của ta

Ta cũng sẽ bao gồm các file sau, để thuận tiện:

  • Cấu hình MySQL: /etc/mysql
  • Cấu hình Apache: /etc/apache2
  • Tập lệnh XtraBackup: /usr/local/bin/run_xtrabackup.sh
  • Tệp cron XtraBackup: /etc/cron.d/xtrabackup

Với lựa chọn backup của ta , ta sẽ thêm FileSet sau vào cấu hình Bacula của ta :

filesets.conf - Database MySQL
FileSet {   Name = "LAMP Files"   Include {     Options {       signature = MD5       compression = GZIP     }     File = /var/www/html     File = /data/backups     File = /etc/mysql     File = /etc/apache2         File = /usr/local/bin/run_xtrabackup.sh     File = /etc/cron.d/xtrabackup   }   Exclude {     File = /data/backups/exclude   } } 

Lưu và thoát. Lưu ý tất cả các chỉ thị Tệp được đánh dấu đều nằm trong khối Bao gồm . Đó là tất cả các file mà ta muốn backup . Nếu bạn muốn loại trừ các file nào khỏi công việc backup , những file tồn tại trong các folder được bao gồm, hãy thêm chúng vào khối Loại trừ .

Bây giờ FileSet của ta đã được cấu hình. Hãy chuyển sang tạo công việc backup Bacula sẽ sử dụng FileSet này.

Tạo công việc backup Bacula

Ta sẽ tạo công việc backup Bacula sẽ chạy và tạo các bản backup của server LAMP 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 LAMP

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

job.conf - Backup db1
Job {   Name = "Backup LAMP"   JobDefs = "DefaultJob"   Client = lamp-fd   Pool = RemoteFile   FileSet="LAMP Files" } 

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 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 ). Công việc backup mà ta đã tạo sử dụng JobDef “DefaultJob”, sử dụng lịch trình “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 lamp 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. Nếu bạn muốn các bản backup của bạn linh hoạt hơn một chút, cần thận trọng khi tách các bản backup database khỏi mọi thứ khác. Bằng cách này, bạn có thể sửa đổi lịch trình của công việc backup file ứng dụng để xảy ra cùng lúc với tập lệnh Percona XtraBackup được thực thi (10:30 tối) và backup bản backup nóng của database (do XtraBackup tạo ra) khi nó hoàn tất. đang được chuẩn bị. Điều này sẽ làm giảm khả năng các bản backup của ứng dụng và database không nhất quán với nhau.

Cài đặt backup từ xa (Tùy chọn)

Nếu muốn, bạn có thể tạo một server từ xa để lưu trữ các bản backup Bacula của bạn. 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. Ví dụ, nếu server LAMP và backup của bạn đang ở New York, bạn có thể sử dụng khu vực San Francisco (SFO1) DigitalOcean cho server remotebackups của bạn.

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.

Xem lại các yêu cầu về đĩa backup

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.

Trong ví dụ của ta , trừ khi ứng dụng PHP của bạn có dung lượng nội dung và phương tiện khá lớn, các bản backup có thể sẽ tiêu tốn một lượng không gian đĩa tương đối thấp. Điều này là do lựa chọn backup của ta rất thận trọng và công việc backup mặc định tạo ra các bản backup gia tăng khi có thể.

Kết luận

Đến đây bạn sẽ có các bản backup hàng ngày và (nếu bạn đã cài đặt ) một bản sao từ xa của các bản backup đó, của server LAMP của bạn. Đảm bảo xác minh bạn có thể khôi phục các file đã backup bằng cách chạy nhanh quá trình khôi phục.


Tags:

Các tin liên quan

Cách cấu hình sao chép DNS trên server Slave PowerDNS trên Ubuntu 14.04
2015-06-04
Cách thay đổi mật khẩu tài khoản trên server OpenLDAP
2015-05-29
Cách thay đổi mật khẩu tài khoản trên server OpenLDAP
2015-05-29
Cách chạy mail server và lưu trữ tệp của riêng bạn với PEPS trên Ubuntu 14.04
2015-05-22
Cách chạy mail server của riêng bạn với Mail-in-a-Box trên Ubuntu 14.04
2015-05-15
Thiết lập server ban đầu với Debian 8
2015-05-11
Cách thiết lập server Hexxit (Minecraft Mod Pack) trên Ubuntu 14.04
2015-05-07
Cách cấu hình BIND làm server DNS Mạng riêng trên CentOS 7
2015-04-29
Cách cấu hình BIND làm server DNS Mạng riêng trên CentOS 7
2015-04-29
Cách cài đặt server Bacula trên CentOS 7
2015-04-15