Cấu hình Backup và Restore cho MinIO
Bước đầu tiên là chuẩn bị script tự động để sao lưu dữ liệu bucket sang một thư mục an toàn hoặc dịch vụ lưu trữ đám mây khác. Chúng ta sẽ sử dụng công cụ CLI `mc` (MinIO Client) đã cài đặt ở các phần trước.
Tạo thư mục đích để chứa file backup trên hệ thống host hoặc volume Docker.
sudo mkdir -p /var/backup/minio
sudo chown $USER:$USER /var/backup/minio
Thư mục `/var/backup/minio` được tạo và quyền sở hữu được chuyển cho người dùng hiện tại để tránh lỗi permission khi chạy script.
Tạo script Backup tự động
Viết script shell để thực hiện lệnh `mc mirror` sao chép toàn bộ bucket sang thư mục backup, đồng thời lưu timestamp vào tên thư mục con.
Chạy lệnh sau để tạo file script với nội dung hoàn chỉnh:
cat > ~/minio-backup.sh
File script `minio-backup.sh` được tạo tại home directory với logic backup và tự động xóa dữ liệu cũ.
Cấp quyền thực thi cho script.
chmod +x ~/minio-backup.sh
Script đã sẵn sàng để chạy.
Thực thi script để kiểm tra (chú ý thay thế `YOUR_ACCESS_KEY` và `YOUR_SECRET_KEY` trong script bằng key thật của bạn).
./minio-backup.sh
Kết quả mong đợi: Xuất hiện thông báo "Backup thành công vào: /var/backup/minio/my-data-bucket_..." và danh sách các object được copy.
Thực hiện Restore từ Backup
Khi cần khôi phục dữ liệu, ta dùng lệnh `mc mirror` theo chiều ngược lại từ thư mục backup về bucket trên MinIO.
Tạo script restore đơn giản hoặc chạy lệnh trực tiếp. Dưới đây là lệnh khôi phục từ backup mới nhất.
export MC_HOST_local="YOUR_ACCESS_KEY:YOUR_SECRET_KEY@http://localhost:9000"
LATEST_BACKUP=$(ls -td /var/backup/minio/my-data-bucket_* | head -n 1)
mc mirror "$LATEST_BACKUP" "local/my-data-bucket" --overwrite
Dữ liệu trong bucket `my-data-bucket` sẽ được khôi phục hoàn toàn từ bản backup mới nhất, ghi đè dữ liệu hiện tại nếu có.
Thiết lập Backup tự động qua Cron
Để backup diễn ra định kỳ (ví dụ: 2h sáng mỗi ngày), ta cấu hình cron job.
Mở file crontab của người dùng hiện tại.
crontab -e
Chèn dòng sau vào cuối file để chạy script lúc 2:00 sáng hàng ngày:
0 2 * * * /home/$USER/minio-backup.sh >> /var/log/minio-backup.log 2>&1
Cron job được lưu và sẽ tự động thực thi script backup vào thời gian đã định. Kiểm tra bằng lệnh `systemctl status cron` hoặc `crontab -l`.
Cấu hình Giám sát (Monitoring) với Prometheus và Grafana
MinIO cung cấp endpoint metrics dạng Prometheus. Chúng ta sẽ deploy Prometheus để scrape dữ liệu này và Grafana để trực quan hóa.
Triển khai Prometheus
Tạo file cấu hình `prometheus.yml` để chỉ định Prometheus scrape metrics từ MinIO.
Đường dẫn file cấu hình: `/etc/prometheus/prometheus.yml` (hoặc trong volume Docker nếu chạy container).
cat > /etc/prometheus/prometheus.yml
File cấu hình chỉ định Prometheus sẽ quét địa chỉ `localhost:9000` tại đường dẫn `/minio/v2/metrics/cluster`.
Chạy Prometheus trong Docker container để đơn giản hóa việc quản lý (hoặc cài đặt trực tiếp trên host).
docker run -d --name prometheus \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro \
prom/prometheus
Container Prometheus đang chạy và truy cập được qua `http://localhost:9090`.
Verify: Truy cập `http://localhost:9090/targets`. Mục "minio" phải hiển thị trạng thái UP.
Triển khai Grafana
Chạy container Grafana để hiển thị dashboard.
docker run -d --name grafana \
-p 3000:3000 \
-v ~/grafana-data:/var/lib/grafana \
grafana/grafana
Grafana đang chạy và truy cập qua `http://localhost:3000`. Đăng nhập với user/pass mặc định là `admin` / `admin`.
Trong Grafana, vào Configuration -> Data Sources, chọn Add data source, chọn Prometheus. Nhập URL: `http://prometheus:9090` (nếu chạy cùng docker network) hoặc `http://host.docker.internal:9090`.
Click Save & Test. Kết quả mong đợi: Thông báo Data source is working.
Import Dashboard MinIO
Sử dụng dashboard mẫu chính thức từ cộng đồng MinIO.
Trong Grafana, vào Dashboards -> Import. Nhập ID: 9968 (Dashboard MinIO Metrics).
Chọn Source Prometheus đã cấu hình ở bước trên.
Click Import. Kết quả mong đợi: Dashboard hiện ra với các biểu đồ về Request Rate, Bandwidth, Disk Usage, và Object Count.
Thiết lập Cảnh báo (Alerting)
Cấu hình Prometheus Alertmanager hoặc Alert Rules trong Prometheus để gửi cảnh báo khi dung lượng đầy hoặc service lỗi.
Cấu hình Alert Rules trong Prometheus
Chỉnh sửa file `prometheus.yml` hoặc tạo file riêng `alert_rules.yml` để định nghĩa các quy tắc cảnh báo.
Tạo file `/etc/prometheus/alert_rules.yml` với nội dung:
groups:
- name: minio-alerts
rules:
- alert: MinioDiskUsageHigh
expr: (1 - (minio_storage_usage_bytes / minio_storage_capacity_bytes)) < 0.1
for: 5m
labels:
severity: critical
annotations:
summary: "Dung lượng disk MinIO sắp đầy (trên 90%)"
description: "Bucket đang sử dụng {{ $value | humanizePercentage }} dung lượng."
- alert: MinioServiceDown
expr: up{job="minio"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Dịch vụ MinIO không khả dụng"
description: "MinIO endpoint không phản hồi."
EOF
File rules được tạo với 2 quy tắc: cảnh báo khi disk > 90% và cảnh báo khi service down.
Cập nhật `prometheus.yml` để load file rules mới:
cat > /etc/prometheus/prometheus.yml
File cấu hình Prometheus đã được cập nhật để load file rules và chỉ định Alertmanager (nếu có).
Khởi động lại container Prometheus để áp dụng thay đổi.
docker restart prometheus
Prometheus đã khởi động lại. Truy cập `http://localhost:9090/alerts` để xem danh sách cảnh báo. Nếu MinIO đang chạy tốt, danh sách sẽ trống. Nếu bạn xóa file backup hoặc mock tình trạng disk đầy, cảnh báo sẽ hiện trạng thái FIRING.
Triển khai Alertmanager (Tùy chọn để gửi Email/Slack)
Để nhận cảnh báo qua Email, cần chạy Alertmanager.
Tạo file cấu hình Alertmanager `/etc/alertmanager/alertmanager.yml`:
cat > /etc/alertmanager/alertmanager.yml
File cấu hình email được tạo. Lưu ý thay thế thông tin SMTP bằng thông tin thật của bạn.
Chạy Alertmanager:
docker run -d --name alertmanager \
-p 9093:9093 \
-v /etc/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro \
prom/alertmanager
Alertmanager đang chạy. Khi Prometheus phát hiện sự cố, nó sẽ gửi thông báo đến Alertmanager, và Alertmanager sẽ gửi email cho admin.
Verify: Vào `http://localhost:9090/alerts` -> Trigger một cảnh báo (ví dụ: tắt MinIO) -> Kiểm tra email nhận được cảnh báo.
Verify toàn bộ quy trình
Thực hiện các bước kiểm tra cuối cùng để đảm bảo Backup, Restore và Monitoring hoạt động đồng bộ.
- Test Backup: Chạy `./minio-backup.sh` và kiểm tra thư mục `/var/backup/minio` có xuất hiện folder mới không.
- Test Restore: Xóa 1 object trong bucket MinIO, chạy lệnh restore, kiểm tra object đó có quay lại không.
- Test Monitoring: Tạo một file lớn upload vào MinIO, quan sát Grafana Dashboard (biểu đồ Storage Usage tăng lên).
- Test Alerting: Nếu đã config Alertmanager, cố tình tạo cảnh báo (ví dụ: dừng service MinIO) và kiểm tra email nhận được thông báo.
Tất cả các thành phần Backup, Restore, Monitoring và Alerting đã được cấu hình và vận hành trên Ubuntu 24.04 với MinIO.
Điều hướng series:
Mục lục: Series: Triển khai Database Object Storage với MinIO và Ubuntu 24.04
« Phần 6: Triển khai MinIO Distributed Mode và tính năng Erasure Code
Phần 8: Xử lý sự cố thường gặp và mẹo nâng cao »