~ 4 min read

Sao lưu dữ liệu máy chủ như nào cho hiệu quả?

Sao lưu dữ liệu máy chủ như nào cho hiệu quả?

Tại sao lại backup?

Ờ thì thấy mọi người thường xuyên làm vậy nên mình cũng học theo. Hy vọng là sẽ có ích 🤣

Tóm tắt công nghệ sử dụng

1. Rsync - thằng này là một công cụ mã nguồn mở giúp sao lưu dữ liệu.
2. Cronjob - thằng này sẽ tạo lịch trình để công việc lặp lại sau một khoảng thời gian.
3. SSH - thằng này để remote vào server.

Tóm tắt cách hoạt động

Nó truyền dữ liệu bằng cách mở một đường ống tạm thời bằng ssh, sau đó sử dụng rsync để truyền dữ liệu bằng kết nối tcp.

Điều kiện bắt buộc

- Máy chủ đã được cài đặt rsync.
- Khoá ssh được đặt tại /home/your_username/.ssh/id_rsa phải có quyền remote vào máy chủ mà không cần nhập mật khẩu.
- Đảm bảo người dùng của bạn có quyền thực thi rsync và có quyền đọc tại folder backup.

Dành cho người lười biếng - Sử dụng docker

Đây là image mình build để sử dụng trên raspberry pi 400, sửa cài đặt cho phù hợp với bạn sau đó chạy là được. Còn nếu bạn sử dụng kiến trúc khác, thì hãy clone repo này và build docker nhé.

docker run -d --name rsync \
  --volume "/backup_drive":"/backup" \ # replace by your backup folder
  --volume "/home/your_username/.ssh":"/root/.ssh" \
  --env REMOTE_HOSTNAME="10.10.10.10" \ # replace by your server ip
  --env SSH_IDENTITY_FILE="/root/.ssh/id_rsa" \ # private key ssh
  --env BACKUPDIR="your_username@10.10.10.10:/Volumes" \
  --env ARCHIVEROOT="/backup" \
  --env SSH_PORT=22 \
  --env CRON_TIME="0 */3 * * *" \ # every 3 hours
  --restart always \
  cullen2205/rsync:pi400
  • Trong đó đường dẫn your_username@10.10.10.10:/Volumes tương đương với đường dẫn /Volumes trên máy chủ cần backup.

  • Đường dẫn /backup_drive sẽ là thư mục trên máy chứa bản sao lưu.

Các biến môi trường

Các bản sao lưu có thể được định cấu hình bằng cách sử dụng các biến môi trường.

Ví dụ dưới đây là danh sách đầy đủ các biến, giá trị mặc định và cách sử dụng.

- REMOTE_HOSTNAME (""): Địa chỉ của máy chủ cần sao lưu. Khoá SSH sẽ được quét và thêm vào /home/your_username/.ssh/known_hosts.

- BACKUPDIR ("/home"): Là thư mục bên máy server cần sao lưu.

- SSH_PORT ("22"): Cổng SSH.

- SSH_IDENTITY_FILE ("/root/.ssh/id_rsa"): Key rsa để đăng nhập vào máy chủ.

- ARCHIVEROOT ("/backup"): Là đường dẫn tạm thời lưu bản sao lưu.
Cấu trúc folder tạm thời sẽ trông như:
/backup
    ├── 2017-11-06 # Đây là bản sao lưu theo từng ngày
    ├── 2017-11-07
    ├── 2017-11-08
    └── main # Đây là bản sao lưu tổng (mới nhất).

- EXCLUDES (""): Danh sách ngoại trừ, cách nhau bằng dấu ';' (chấm phẩy).

- CRON_TIME ("0 1 * * *"): Cron job thiết lập thời gian sao lưu.

Dành cho người tryhard, cài trên máy luôn

Trên máy server

Đầu tiên cứ phải cài đặt rsync và ssh-server đã. Nếu đã có cái gì rồi thì bỏ nó nhé.

sudo apt-get update
sudo apt-get install rsync openssh-server

Sau đó bạn sẽ cần phải cài đặt ssh server để có thể remote được bằng khoá rsa, tìm kiếm trên mạng cách cài đặt và thử nghiệm trước nhé.

Trên máy client

Cần cài đặt rsync, cronjob, ssh-client. Nếu đã có sẵn cái gì rồi thì không cần cài nữa nhé.

sudo apt-get update
sudo apt-get install cron rsync openssh-client

Clone repo git về và chạy…

cd ~
git clone https://github.com/khaivu-mta/rsync-pi400.git autoBackup

# Chạy backup nào
cd ~/autoBackup
sh docker-entrypoint.sh /backup.sh && crond -f

Lời kết

Repo trên github được fork từ đây và được chỉnh sửa lại để phù hợp với nhu cầu cá nhân, các vấn đề gặp phải, bạn có thể tìm kiếm tại repo gốc.

Hãy tìm hiểu các bước, có thể sẽ phát sinh một vài vấn đề xung quanh kịch bản mơ ước mà mình viết ở trên, nhưng các vấn đề đa số được giải quyết hết, vậy nên vẫn là chúc bạn may mắn.

Thank you 💖