Ai cũng có bản sao lưu cho đến khi thử khôi phục một bản. Thư mục hóa ra trống rỗng, cron job đã chết từ tháng Ba, hoặc file lưu trữ nằm ngay trên ổ đĩa vừa hỏng. restic giải quyết phần lớn những chuyện đó: mã hóa ở phía bạn, lưu mỗi mẩu dữ liệu một lần, và khiến việc khôi phục một file dễ như sao lưu cả máy chủ.
Đây là một cấu hình mà chúng tôi thực sự tin tưởng, trên Ubuntu hoặc Debian.
1. Cài restic
apt update && apt install -y restic
restic self-update
Gói của bản phân phối thường cũ; self-update kéo về phiên bản hiện tại.
2. Chọn nơi đặt kho lưu
Kho lưu không được nằm trên máy chủ bạn đang bảo vệ. Hai lựa chọn phổ biến:
- Một máy chủ khác qua SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - Bộ nhớ đối tượng tương thích S3:
s3:https://s3.example.com/my-bucket/web1
3. Lưu thông tin đăng nhập
Giữ mọi thứ trong một file chỉ root đọc được, để timer và shell của bạn dùng cùng một cấu hình:
cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
Giờ hãy sao chép nội dung /root/.restic-pass vào trình quản lý mật khẩu. Không có nó, bản sao lưu không thể giải mã — cả bạn lẫn bất kỳ ai khác.
4. Khởi tạo và chạy bản sao lưu đầu tiên
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
Điều chỉnh đường dẫn theo nơi dữ liệu của bạn thực sự nằm. Volume Docker ở /var/lib/docker/volumes; dữ liệu ứng dụng thường ở /srv hoặc /opt.
5. Cơ sở dữ liệu: dump trước, sao lưu sau
Đừng sao lưu file thô của một cơ sở dữ liệu đang chạy. Hãy dump ngay trước khi sao lưu:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
Thêm /var/backups/db vào danh sách đường dẫn sao lưu. Hướng dẫn PostgreSQL của chúng tôi có thêm về dump.
6. Lên lịch bằng systemd
Ở đây timer tốt hơn cron: nó ghi log vào journal và chạy bù nếu máy chủ tắt đúng lúc đến lịch.
# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
forget --prune giữ 7 snapshot hằng ngày, 4 hằng tuần và 6 hằng tháng, rồi xóa phần còn lại. Nếu có bước dump cơ sở dữ liệu, hãy đặt nó vào một dòng ExecStartPre=.
7. Thực sự khôi phục một thứ gì đó
Đây là bước biến câu "chúng tôi có sao lưu" thành sự thật. Kéo một thư mục về một thư mục tạm và xem thử:
source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check
Làm một lần ngay bây giờ và lặp lại vài tháng một lần. restic check xác minh cấu trúc kho lưu; việc khôi phục chứng minh dữ liệu thực sự nằm ở đó.
restic và Managed Backups
Chúng không cạnh tranh nhau. Managed Backups tạo mỗi ngày một điểm khôi phục cho toàn bộ máy chủ, khôi phục từ bảng điều khiển — cách sửa nhanh sau một lần nâng cấp hỏng. Dịch vụ này giá $2 mỗi tháng và được tặng kèm miễn phí trong mọi gói theo năm. restic cho bạn các bản sao cấp file nằm ngoài máy chủ, trên bộ nhớ do bạn kiểm soát — điều này quan trọng khi vấn đề là một file bị xóa hôm thứ Ba tuần trước, hoặc khi bạn muốn có một bản sao hoàn toàn nằm ngoài hạ tầng của chúng tôi.
Nếu lưu dữ liệu nhạy cảm, hãy kết hợp với mã hóa toàn bộ ổ đĩa, hoặc xem tình huống sử dụng lưu trữ mã hóa để tự vận hành điểm đến sao lưu. Gói Micro là đủ cho hầu hết máy chủ nhỏ cùng các tác vụ sao lưu của chúng.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.