Cấu hình sao lưu tự động với ArangoBackup và lưu trữ trên S3/NFS
Sử dụng công cụ arangobackup tích hợp sẵn trong ArangoDB để tạo bản sao lưu toàn bộ hoặc từng collection cụ thể. Cấu hình lưu trữ bản sao lưu trên hệ thống lưu trữ đám mây S3 (MinIO/AWS) hoặc NFS để đảm bảo tính sẵn sàng cao.
1. Chuẩn bị tài khoản và quyền truy cập cho ArangoBackup
Tạo một user riêng biệt có quyền backup và read để thực hiện sao lưu. Việc tách biệt quyền hạn giúp tăng cường bảo mật, tránh trường hợp user admin bị xâm phạm làm ảnh hưởng đến cả quá trình sao lưu.
arangosh --server.database _system --server.endpoint http://localhost:8529 -e "db._createUser('backup_user', 'secure_backup_password_123'); db._grant({ _system: { read: true, backup: true } }, 'backup_user');"
Kết quả: Người dùng backup_user được tạo và cấp quyền cần thiết trong database _system.
2. Cấu hình lưu trữ trên S3 (MinIO/AWS)
Để lưu bản sao lưu lên S3, cần cấu hình file arangobackup.conf với thông tin endpoint, access key, secret key và bucket name. Dưới đây là ví dụ cấu hình cho MinIO (tương thích S3).
Tạo file cấu hình tại /etc/arangodb3/arangobackup.conf:
[arangobackup]
# Endpoint của dịch vụ S3 (MinIO hoặc AWS S3)
s3.endpoint = https://minio.example.com
# Tên bucket đã tạo sẵn
s3.bucket = arangodb-backups
# Access Key
s3.access-key-id = YOUR_ACCESS_KEY
# Secret Key
s3.secret-access-key = YOUR_SECRET_KEY
# Region (thường là us-east-1 hoặc để trống nếu dùng MinIO)
s3.region = us-east-1
# Prefix cho các backup để dễ quản lý
s3.prefix = production/
[backup]
# Bật chế độ tự động
auto-backup = true
# Thời gian thực hiện backup (cron format)
auto-backup-time = "0 2 * * *"
# Số lượng backup giữ lại
max-backups = 5
Kết quả: File cấu hình được lưu, ArangoBackup sẽ tự động đẩy dữ liệu lên bucket S3 vào lúc 2:00 AM mỗi ngày.
3. Cấu hình lưu trữ trên NFS (Mạng nội bộ)
Nếu sử dụng NFS, cần mount điểm chia sẻ (mount point) trước và chỉ định đường dẫn trong cấu hình. Đây là giải pháp kinh tế cho các cụm nội bộ không cần lưu trữ đám mây.
Mount NFS share (giả định IP server NFS là 192.168.1.100):
sudo mkdir -p /mnt/nfs-backups
sudo mount -t nfs 192.168.1.100:/backups /mnt/nfs-backups
Kết quả: Thư mục /mnt/nfs-backups được gắn vào hệ thống.
Cập nhật file /etc/arangodb3/arangobackup.conf (thay thế phần S3):
[backup]
# Đường dẫn lưu trữ cục bộ hoặc mạng
backup-dir = /mnt/nfs-backups/arangodb
# Tên định danh cho backup
backup-name = daily-full-backup
# Các collection cần backup (để trống là backup toàn bộ)
backup-collections = ""
# Định dạng compression
compression = gzip
Kết quả: Backup sẽ được ghi trực tiếp vào thư mục NFS đã mount.
4. Thực thi và kiểm tra bản sao lưu
Chạy lệnh arangobackup create để tạo bản sao lưu thủ công nhằm xác minh cấu hình trước khi kích hoạt tự động.
arangobackup create --server.endpoint http://localhost:8529 --server.username backup_user --server.password secure_backup_password_123 --backup-name test-verify-01
Kết quả: Terminal hiển thị thông báo Backup created successfully kèm theo ID của backup. Kiểm tra trong bucket S3 hoặc thư mục NFS để thấy file test-verify-01.
Thực hiện khôi phục dữ liệu từ bản sao lưu
Quá trình khôi phục (restore) yêu cầu dừng ArangoDB hoàn toàn để tránh xung đột dữ liệu, sau đó sử dụng arangorestore để nạp dữ liệu từ backup vào cluster.
1. Chuẩn bị môi trường trước khi khôi phục
Khôi phục dữ liệu là thao tác nguy hiểm. Cần dừng dịch vụ ArangoDB và xóa dữ liệu cũ (nếu muốn khôi phục lại trạng thái ban đầu) để tránh dữ liệu bị trùng lặp hoặc phân mảnh.
sudo systemctl stop arangodb3
sudo rm -rf /var/lib/arangodb3/data/*
Kết quả: Dịch vụ ArangoDB dừng hoạt động và thư mục dữ liệu rỗng, sẵn sàng nhận dữ liệu mới.
2. Khôi phục từ backup trên S3
Sử dụng arangorestore với tham số chỉ định đường dẫn S3 tương ứng với cấu hình backup đã tạo ở phần trước.
arangorestore --server.endpoint http://localhost:8529 --server.username backup_user --server.password secure_backup_password_123 --s3.endpoint https://minio.example.com --s3.bucket arangodb-backups --s3.access-key-id YOUR_ACCESS_KEY --s3.secret-access-key YOUR_SECRET_KEY --backup-dir s3://arangodb-backups/production/test-verify-01
Kết quả: Terminal hiển thị quá trình giải nén và nạp dữ liệu. Dòng cuối cùng ghi Restore completed successfully.
3. Khôi phục từ backup trên NFS/Cục bộ
Nếu backup lưu trên NFS, chỉ cần chỉ định đường dẫn thư mục trực tiếp.
arangorestore --server.endpoint http://localhost:8529 --server.username backup_user --server.password secure_backup_password_123 --backup-dir /mnt/nfs-backups/arangodb/daily-full-backup
Kết quả: Dữ liệu được khôi phục vào thư mục /var/lib/arangodb3/data.
4. Khởi động lại và xác minh dữ liệu
Khởi động lại dịch vụ và truy vấn để đảm bảo dữ liệu đã về đúng vị trí.
sudo systemctl start arangodb3
arangosh --server.endpoint http://localhost:8529 --server.username root --server.password -e "db._collections().length"
Kết quả: Dịch vụ khởi động thành công và số lượng collection trả về khớp với số lượng collection trong bản backup.
Giám sát tài nguyên hệ thống và hiệu năng Cluster bằng Prometheus/Grafana
ArangoDB có endpoint /metrics tương thích chuẩn Prometheus. Kết hợp với Grafana để trực quan hóa các chỉ số như QPS, latency, RAM usage và CPU load.
1. Bật endpoint Metrics trong ArangoDB
Đảm bảo ArangoDB đang lắng nghe các metric. Kiểm tra file /etc/arangodb3/arangod.conf.
Thêm hoặc chỉnh sửa phần [monitoring]:
[monitoring]
# Bật endpoint metrics
monitoring.enabled = true
# Port lắng nghe metrics (mặc định là 8529, nên tách ra port riêng cho an toàn, ví dụ 9090)
monitoring.port = 9090
# Chỉ định IP lắng nghe (0.0.0.0 để cho phép truy cập từ Prometheus)
monitoring.bind-address = 0.0.0.0
Kết quả: Sau khi systemctl restart arangodb3, port 9090 sẽ trả về dữ liệu metrics dạng text.
2. Cấu hình Prometheus để scrape ArangoDB
Cấu hình prometheus.yml để thêm target vào scrape_configs.
scrape_configs:
- job_name: 'arangodb'
static_configs:
- targets: ['localhost:9090']
# Nếu dùng Cluster, cần thêm targets cho từng node
# - targets: ['node1:9090', 'node2:9090']
Kết quả: Prometheus sẽ xuất hiện job arangodb trong tab Status -> Targets với trạng thái UP.
3. Triển khai Grafana và Dashboard
Cài đặt Grafana và import dashboard mẫu dành cho ArangoDB (Dashboard ID: 14760 trên Grafana.com là phổ biến nhất).
sudo apt update
sudo apt install -y grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
Kết quả: Grafana chạy trên port 3000. Truy cập http://localhost:3000 (mặc định user: admin, pass: admin).
Trong Grafana UI:
- Đi đến Connections -> Data Sources -> Thêm Prometheus.
- URL:
http://localhost:9090.
- Vào Dashboards -> Import -> Nhập ID
14760.
- Chọn Data Source vừa tạo là Prometheus.
Kết quả: Dashboard hiển thị các biểu đồ thực thời về Queries per second, Document Read/Write, Memory Usage và Cluster Status.
Phân tích log và xử lý cảnh báo lỗi phổ biến
Log của ArangoDB được ghi vào /var/log/arangodb3/arangod.log. Việc phân tích log giúp phát hiện sớm các vấn đề về hiệu năng, lỗi kết nối hoặc lỗi đồng bộ hóa trong Cluster.
1. Cấu hình mức độ Log (Log Level)
Để bắt lỗi chi tiết hơn, cần giảm mức log xuống debug hoặc verbose tạm thời. Lưu ý: điều này làm tăng I/O disk.
sudo systemctl stop arangodb3
# Chỉnh sửa file cấu hình
sudo nano /etc/arangodb3/arangod.conf
Thêm dòng sau vào phần [logging]:
[logging]
# Mặc định là info, đổi thành debug khi cần troubleshooting
log.level = debug
# Ghi log ra file
log.to-stderr = true
Kết quả: Sau khi restart, file log sẽ chứa thông tin chi tiết hơn về các giao dịch và lỗi.
2. Xử lý lỗi "Connection refused" hoặc "Cluster not ready"
Lỗi này thường xảy ra khi các node trong Cluster không thể liên lạc với nhau do firewall hoặc lỗi cấu hình endpoint.
Lệnh kiểm tra log:
sudo grep -i "connection refused" /var/log/arangodb3/arangod.log
sudo grep -i "cluster.*not.*ready" /var/log/arangodb3/arangod.log
Kết quả: Tìm thấy dòng lỗi chỉ rõ port nào bị chặn hoặc node nào mất kết nối.
Cách khắc phục:
- Đảm bảo các port
8529 (HTTP), 8528 (Cluster RPC) và 9090 (Metrics) được mở trên firewall.
- Khởi động lại các node theo thứ tự: Primary DB -> Agency -> Secondary DB.
sudo ufw allow 8529/tcp
sudo ufw allow 8528/tcp
sudo ufw allow 9090/tcp
Kết quả: Các node có thể giao tiếp, lỗi "connection refused" biến mất trong log.
3. Xử lý cảnh báo "Out of memory" hoặc "Disk full"
ArangoDB có cơ chế fail-stop khi hệ thống hết tài nguyên. Log sẽ báo OutOfMemory hoặc No space left on device.
Lệnh kiểm tra:
sudo grep -i "out of memory" /var/log/arangodb3/arangod.log
sudo grep -i "no space left" /var/log/arangodb3/arangod.log
Kết quả: Xác nhận nguyên nhân là do giới hạn RAM của container/hệ thống hoặc disk full.
Giải pháp:
- Tăng dung lượng RAM hoặc cấu hình
limit-memory trong arangod.conf.
- Xóa các backup cũ hoặc file log log đã luân chuyển (
rotate).
- Kiểm tra quota disk:
df -h.
sudo systemctl restart arangodb3
Kết quả: Dịch vụ khởi động lại thành công sau khi giải quyết vấn đề tài nguyên.
4. Thiết lập cảnh báo tự động (Alerting)
Cấu hình Alert trong Prometheus hoặc Grafana để nhận email khi xảy ra lỗi nghiêm trọng.
Ví dụ Alert Rule trong prometheus.yml (phần rule_files):
groups:
- name: arangodb_alerts
rules:
- alert: ArangoDBDown
expr: up{job="arangodb"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "ArangoDB instance {{ $labels.instance }} is down"
description: "ArangoDB has been down for more than 1 minute."
Kết quả: Khi ArangoDB down, Prometheus sẽ trigger alert và gửi thông báo qua Alertmanager (nếu được cấu hình).
Điều hướng series:
Mục lục: Series: Triển khai Database Multi-Model với ArangoDB trên Ubuntu 24.04
« Phần 5: Cấu hình cụm ArangoDB Cluster (Multi-Server) trên Ubuntu
Phần 7: Troubleshooting nâng cao và tối ưu hóa bảo mật »