Cấu hình Object Storage cho YBackup
Trước khi thực hiện backup, bạn cần chuẩn bị bucket S3 (hoặc tương thích S3 như MinIO, AWS S3) để lưu trữ snapshot dữ liệu.
Tạo bucket mới với tên yb-backup-storage trên dịch vụ S3 của bạn. Đảm bảo bucket này có quyền đọc/ghi (Read/Write) cho user mà Kubernetes cluster sẽ sử dụng.
Kết quả mong đợi: Bucket yb-backup-storage được tạo thành công và sẵn sàng nhận dữ liệu.
Tạo file cấu hình kết nối S3
Tạo file cấu hình YAML để định nghĩa endpoint, access key và secret key của S3. YugabyteDB cần file này để xác thực khi upload dữ liệu.
Đường dẫn: /tmp/yb-s3-config.yaml
apiVersion: v1
kind: Secret
metadata:
name: yb-s3-secret
namespace: yugabyte
type: Opaque
stringData:
s3-endpoint: "https://s3.amazonaws.com"
s3-access-key: "YOUR_ACCESS_KEY_HERE"
s3-secret-key: "YOUR_SECRET_KEY_HERE"
s3-bucket: "yb-backup-storage"
s3-region: "us-east-1"
Thay thế YOUR_ACCESS_KEY_HERE và YOUR_SECRET_KEY_HERE bằng thông tin thật của bạn. Nếu dùng MinIO, đổi s3-endpoint thành địa chỉ IP của MinIO.
Chạy lệnh áp dụng secret vào Kubernetes:
kubectl apply -f /tmp/yb-s3-config.yaml
Kết quả mong đợi: Secret yb-s3-secret được tạo trong namespace yugabyte với trạng thái Created.
Thực hiện Backup toàn cụm và theo Keyspace
Bật tính năng Backup trong Cluster Config
Cần cấu hình yugabyte-operator hoặc helm để nhận diện secret S3 đã tạo ở bước trước. Điều này cho phép yb-master và yb-tserver biết nơi lưu snapshot.
Chỉnh sửa giá trị backupConfig trong file values.yaml của Helm chart:
backupConfig:
enabled: true
s3:
secretName: yb-s3-secret
bucket: yb-backup-storage
region: us-east-1
Chạy lệnh update lại cluster để áp dụng cấu hình mới:
helm upgrade yugabyte yugabyte/yugabyte-operator -f values.yaml --namespace yugabyte
Kết quả mong đợi: Cluster restart các pod yb-master và yb-tserver để tải cấu hình S3 mới. Không có lỗi trong log kubectl logs -f .
Thực hiện Backup toàn bộ Cluster
Sử dụng công cụ yb-admin để khởi tạo quá trình backup toàn bộ dữ liệu trong cluster hiện tại.
Chạy lệnh backup với tham số --dest chỉ định đường dẫn trong S3 bucket:
kubectl exec -it yb-master-0 -n yugabyte -- /opt/yugabyte/bin/yb-admin --master_addresses=yb-master-0.yb-master.yugabyte.svc:7100 backup --dest=s3://yb-backup-storage/yb-cluster-backup-2023-10-27 --wait
Tham số --wait giúp lệnh chỉ kết thúc khi quá trình backup hoàn tất, không cần theo dõi thủ công.
Kết quả mong đợi: Xuất hiện dòng Backup completed successfully kèm theo ID của backup (ví dụ: backup_id: 123456789).
Backup theo Keyspace cụ thể
Nếu chỉ cần sao lưu một database cụ thể (ví dụ: sales_db), bạn có thể chỉ định keyspace để giảm thời gian và dung lượng lưu trữ.
Chạy lệnh backup với tham số --keyspace:
kubectl exec -it yb-master-0 -n yugabyte -- /opt/yugabyte/bin/yb-admin --master_addresses=yb-master-0.yb-master.yugabyte.svc:7100 backup --dest=s3://yb-backup-storage/sales-backup --keyspace=sales_db --wait
Kết quả mong đợi: Lệnh hoàn thành chỉ với dữ liệu của keyspace sales_db, log hiển thị Backup completed successfully.
Kịch bản Khôi phục dữ liệu (Restore)
Khởi tạo Cluster mới để Restore
Để phục hồi dữ liệu, bạn cần một cluster mới (hoặc cluster cũ đã xóa dữ liệu). Cluster này phải có cấu hình tương thích với cluster nguồn (cùng phiên bản, cùng số lượng nodes).
Triển khai cluster mới với tên yb-restore-cluster sử dụng cùng values.yaml như cluster nguồn, nhưng thay đổi clusterName:
helm install yb-restore-cluster yugabyte/yugabyte-operator -f values-restore.yaml --namespace yugabyte
Đợi đến khi tất cả pods trong cluster mới chuyển sang trạng thái Running.
Kết quả mong đợi: Cluster mới hoạt động bình thường, không chứa dữ liệu cũ (rỗng).
Thực hiện Restore từ Backup
Sử dụng yb-admin trên cluster mới để kéo dữ liệu từ S3 bucket về.
Chạy lệnh restore, chỉ định --source là đường dẫn backup đã tạo và --dest là cluster hiện tại:
kubectl exec -it yb-restore-cluster-master-0 -n yugabyte -- /opt/yugabyte/bin/yb-admin --master_addresses=yb-restore-cluster-master-0.yb-restore-cluster.yugabyte.svc:7100 restore --source=s3://yb-backup-storage/yb-cluster-backup-2023-10-27 --wait
Quá trình này sẽ đồng bộ snapshot dữ liệu từ S3 về các node tserver của cluster mới.
Kết quả mong đợi: Log hiển thị Restore completed successfully. Dữ liệu đã được đưa về trạng thái tại thời điểm backup.
Verify kết quả Restore
Kiểm tra xem dữ liệu đã được khôi phục chưa bằng cách truy vấn trực tiếp vào cluster mới.
Chạy lệnh vào pod master của cluster mới và dùng yb-yql hoặc psql:
kubectl exec -it yb-restore-cluster-master-0 -n yugabyte -- /opt/yugabyte/bin/ycql --host=yb-restore-cluster-master-0.yb-restore-cluster.yugabyte.svc:9042 --port=9042 -e "DESCRIBE KEYSPACES;"
Kết quả mong đợi: Danh sách keyspace hiển thị trùng khớp với cluster nguồn trước khi backup.
Cấu hình Point-in-Time Recovery (PITR) cho YSQL
Thiết lập WAL Archiving
YugabyteDB sử dụng WAL (Write-Ahead Log) để ghi lại mọi thay đổi. Để làm PITR, bạn cần cấu hình yb-master tự động đẩy WAL vào S3 liên tục.
Chỉnh sửa file values.yaml của cluster (cần restart master để áp dụng):
masterConfig:
flags:
- "wal_archiver.enabled=true"
- "wal_archiver.s3_endpoint=https://s3.amazonaws.com"
- "wal_archiver.s3_access_key=YOUR_ACCESS_KEY"
- "wal_archiver.s3_secret_key=YOUR_SECRET_KEY"
- "wal_archiver.s3_bucket=yb-backup-storage"
- "wal_archiver.s3_region=us-east-1"
Chạy lệnh update cluster:
helm upgrade yugabyte yugabyte/yugabyte-operator -f values.yaml --namespace yugabyte
Kết quả mong đợi: Các file WAL bắt đầu xuất hiện trong S3 bucket dưới dạng 000000010000000000000001.
Thực hiện Restore tại thời điểm cụ thể (PITR)
Sau khi có WAL archiving, bạn có thể khôi phục dữ liệu về một thời điểm cụ thể sau lần backup cuối cùng (ví dụ: trước khi xảy ra lỗi xóa nhầm dữ liệu).
Sử dụng tham số --restore_timestamp trong lệnh restore. Thời gian định dạng YYYY-MM-DD HH:MM:SS:
kubectl exec -it yb-restore-cluster-master-0 -n yugabyte -- /opt/yugabyte/bin/yb-admin --master_addresses=yb-restore-cluster-master-0.yb-restore-cluster.yugabyte.svc:7100 restore --source=s3://yb-backup-storage/yb-cluster-backup-2023-10-27 --restore_timestamp="2023-10-27 14:30:00" --wait
Hệ thống sẽ áp dụng snapshot backup, sau đó replay các WAL log cho đến mốc thời gian 14:30:00.
Kết quả mong đợi: Dữ liệu được khôi phục chính xác đến thời điểm 14:30:00. Các giao dịch sau thời điểm này sẽ không có mặt.
Kiểm tra tính toàn vẹn dữ liệu sau Restore
Chạy lệnh kiểm tra consistency
Sau khi restore, cần đảm bảo không có dữ liệu bị hỏng hoặc mất mát trong quá trình đồng bộ.
Sử dụng lệnh yb-admin check để quét toàn bộ cluster:
kubectl exec -it yb-restore-cluster-master-0 -n yugabyte -- /opt/yugabyte/bin/yb-admin --master_addresses=yb-restore-cluster-master-0.yb-restore-cluster.yugabyte.svc:7100 check --keyspace=sales_db --wait
Lệnh này kiểm tra tính nhất quán của dữ liệu giữa các replica và các node.
Kết quả mong đợi: Xuất hiện dòng Check completed successfully hoặc No inconsistencies found.
So sánh checksum dữ liệu
Để chắc chắn 100%, bạn có thể so sánh số lượng hàng hoặc checksum của một bảng quan trọng giữa cluster nguồn (nếu còn) và cluster restore.
Chạy lệnh đếm số lượng hàng trong bảng users của keyspace sales_db:
kubectl exec -it yb-restore-cluster-master-0 -n yugabyte -- /opt/yugabyte/bin/ysql --host=yb-restore-cluster-master-0.yb-restore-cluster.yugabyte.svc:5433 -d sales_db -c "SELECT COUNT(*) FROM users;"
So sánh kết quả này với số liệu bạn ghi nhận trước khi backup.
Kết quả mong đợi: Số lượng hàng phải trùng khớp hoàn toàn (ví dụ: 15000).
Verify tổng thể hệ thống Backup
Để xác nhận toàn bộ quy trình đã hoạt động đúng, hãy kiểm tra S3 bucket và log của cluster.
Liệt kê các file trong bucket S3 để thấy snapshot và WAL:
aws s3 ls s3://yb-backup-storage/yb-cluster-backup-2023-10-27 --recursive
Kiểm tra log của yb-master để đảm bảo không có lỗi ERROR liên quan đến Backup hay Restore:
kubectl logs -f yb-master-0 -n yugabyte | grep -E "(Backup|Restore|WAL)"
Kết quả mong đợi: Bucket chứa đầy đủ file snapshot và WAL. Log master sạch sẽ, chỉ hiện các dòng INFO hoặc Completed.
Điều hướng series:
Mục lục: Series: Xây dựng hệ thống Database phân tán với YugabyteDB và Kubernetes
« Phần 5: Mở rộng và thu hẹp cụm Database (Scaling)
Phần 7: Giám sát hiệu năng và cảnh báo với Prometheus và Grafana »