Cài đặt và cấu hình Scylla Monitor
Chúng ta sẽ triển khai Scylla Monitor trên một node riêng biệt hoặc cùng node với ScyllaDB để giám sát trạng thái sức khỏe (health) và hiệu năng (metrics) của cluster.
Mục đích: Thu thập dữ liệu từ Prometheus (nằm trên các node Scylla) và hiển thị dashboard trực quan. Kết quả mong đợi: Dashboard hiển thị trạng thái cluster là "Healthy" và biểu đồ thông số thời gian thực.
Bước 1: Cài đặt Scylla Monitor từ repository chính thức.
curl -s https://raw.githubusercontent.com/scylladb/scylla-monitor/master/install.sh | sudo bash
System sẽ tự động thêm repository, import key GPG và cài đặt gói scylla-monitor. Kết quả mong đợi: Package scylla-monitor được cài đặt thành công, service scylla-monitor sẽ được tạo nhưng chưa chạy.
Bước 2: Cấu hình kết nối của Scylla Monitor.
Chỉnh sửa file cấu hình chính để chỉ định nơi chứa config của Prometheus (scylla-monitor.yaml) và target cluster.
sudo nano /etc/scylla-monitor/scylla-monitor.yaml
Sửa nội dung file như sau (giả sử cluster có 3 node với IP 192.168.1.10, 192.168.1.11, 192.168.1.12):
cluster_name: "production-cluster"
cluster_ip:
- "192.168.1.10"
- "192.168.1.11"
- "192.168.1.12"
scylla_agent:
- "192.168.1.10"
- "192.168.1.11"
- "192.168.1.12"
Đảm bảo IP trong file khớp với IP của các node Scylla đã cài đặt ở Phần 2 và Phần 3. Kết quả mong đợi: File cấu hình lưu thành công, sẵn sàng để khởi động service.
Bước 3: Khởi động service Scylla Monitor.
sudo systemctl daemon-reload
sudo systemctl enable scylla-monitor
sudo systemctl start scylla-monitor
Service sẽ bắt đầu chạy và tải file config vừa sửa. Kết quả mong đợi: Không có lỗi (error) trong log, service ở trạng thái "active (running)".
Verify kết quả: Kiểm tra trạng thái service và truy cập giao diện web.
sudo systemctl status scylla-monitor
Mở trình duyệt trên máy quản trị, truy cập địa chỉ: http://IP_CỦA_MONITOR:5000. Bạn sẽ thấy dashboard "Cluster Status" với trạng thái màu xanh lá (Healthy) và danh sách các node đang hoạt động.
Cấu hình Alerting (Email và Slack)
Chúng ta sẽ cấu hình Scylla Alerting để tự động gửi cảnh báo khi có sự cố như node down hoặc độ trễ (latency) cao bất thường.
Mục đích: Chủ động phát hiện sự cố thay vì đợi người dùng báo. Kết quả mong đợi: Hệ thống gửi email/slack khi kích hoạt điều kiện cảnh báo.
Bước 1: Cấu hình file alerting.yaml.
Tạo hoặc chỉnh sửa file cấu hình cảnh báo tại đường dẫn mặc định của Scylla Monitor.
sudo nano /etc/scylla-monitor/alerting.yaml
Nội dung hoàn chỉnh file cấu hình (bao gồm cả email và slack):
groups:
- name: scylla_alerts
rules:
- alert: NodeDown
expr: scylla_up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Node {{ $labels.instance }} đã bị Down"
description: "Node {{ $labels.instance }} trong cluster {{ $labels.cluster }} đã mất kết nối trong 1 phút."
- alert: HighLatency
expr: histogram_quantile(0.99, rate(scylla_sstable_write_latency_seconds_bucket[5m])) > 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "Độ trễ ghi (Write Latency) cao trên node {{ $labels.instance }}"
description: "99% các request ghi mất hơn 100ms trong 5 phút qua."
receivers:
- name: email-alerts
email_configs:
- to: admin@domain.com
send_resolved: true
smarthost: smtp.domain.com:587
from: scylla-alerts@domain.com
auth_username: admin@domain.com
auth_password: "password_smtp_cua_ban"
require_tls: true
- name: slack-alerts
slack_configs:
- api_url: https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
channel: '#scylla-ops'
send_resolved: true
title: "Scylla Alert: {{ $labels.severity }}"
text: "{{ $labels.alertname }} on {{ $labels.instance }}: {{ $labels.cluster }}"
route:
receiver: email-alerts
group_by: ['cluster', 'alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
routes:
- match:
severity: critical
receiver: slack-alerts
Thay thế admin@domain.com, smtp.domain.com, password_smtp_cua_ban và YOUR/SLACK/WEBHOOK bằng thông tin thực tế của bạn. Kết quả mong đợi: File lưu thành công, cấu hình hợp lệ.
Bước 2: Khởi động lại service để áp dụng cấu hình alerting.
sudo systemctl restart scylla-monitor
Monitor sẽ đọc lại file alerting.yaml. Kết quả mong đợi: Log không có lỗi parse config, service chạy ổn định.
Bước 3: Kiểm tra cấu hình alerting.
sudo scylla-monitor-alerting check-config /etc/scylla-monitor/alerting.yaml
Các lệnh này sẽ validate cú pháp YAML và cấu trúc alert. Kết quả mong đợi: Thông báo "Configuration is valid".
Verify kết quả: Tạo một tình huống giả lập (ví dụ: tắt service scylla-server trên một node) và quan sát email hoặc tin nhắn Slack đến trong vòng 1-2 phút.
Thực hiện Backup dữ liệu với Scylla Backup
Chúng ta sẽ sử dụng công cụ Scylla Backup để tạo snapshot dữ liệu dưới dạng SSTable và lưu trữ lên hệ thống file (local hoặc object storage).
Mục đích: Sao lưu dữ liệu toàn bộ keyspace để phục hồi khi cần. Kết quả mong đợi: Một thư mục backup chứa file metadata và các file SSTable được tạo thành công.
Bước 1: Cài đặt gói Scylla Backup.
curl -s https://raw.githubusercontent.com/scylladb/scylla-backup/master/install.sh | sudo bash
Gói scylla-backup sẽ được cài đặt vào hệ thống. Kết quả mong đợi: Các command như scylla-backup trở nên khả dụng.
Bước 2: Tạo thư mục đích cho backup.
Chúng ta sẽ lưu backup vào thư mục /mnt/backup/scylla. Đảm bảo thư mục này có đủ dung lượng và quyền truy cập.
sudo mkdir -p /mnt/backup/scylla
sudo chown scylla:scylla /mnt/backup/scylla
Đổi chủ sở hữu thư mục sang user scylla vì công cụ backup chạy dưới quyền này. Kết quả mong đợi: Thư mục được tạo và gán quyền đúng.
Bước 3: Thực hiện lệnh backup toàn bộ cluster.
Chạy lệnh backup trên bất kỳ node nào trong cluster (lệnh sẽ tự động liên kết với tất cả các node khác).
sudo scylla-backup backup --keyspace=system_schema --target=/mnt/backup/scylla --staging=/mnt/backup/scylla/staging
Lệnh này sẽ backup keyspace system_schema (bạn có thể thay bằng keyspace dữ liệu thực tế của mình, ví dụ: myapp). Tham số --staging chỉ nơi lưu tạm thời trước khi chuyển vào backup cuối cùng. Kết quả mong đợi: Quá trình chạy, hiển thị tiến độ (progress bar) và kết thúc với thông báo "Backup completed successfully".
Bước 4: Kiểm tra kết quả backup.
ls -R /mnt/backup/scylla
Bạn sẽ thấy các thư mục con chứa file metadata.json và các file SSTable (có đuôi .db). Kết quả mong đợi: File metadata.json tồn tại, chứa thông tin về các snapshot đã tạo.
Tự động hóa Backup định kỳ với Cron Job
Chúng ta sẽ cấu hình cron job để chạy backup tự động vào mỗi đêm lúc 2 giờ sáng.
Mục đích: Đảm bảo dữ liệu được sao lưu đều đặn mà không cần can thiệp thủ công. Kết quả mong đợi: Backup chạy tự động theo lịch, log được ghi lại vào file log riêng.
Bước 1: Tạo script wrapper cho backup.
Tạo một script bash để gọi lệnh backup và ghi log.
sudo nano /usr/local/bin/scylla-backup-daily.sh
Nội dung script:
#!/bin/bash
BACKUP_DIR="/mnt/backup/scylla"
LOG_FILE="/var/log/scylla-backup.log"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
echo "[$(date)] Starting backup..." >> $LOG_FILE
# Chạy backup toàn bộ keyspace 'myapp'
sudo scylla-backup backup --keyspace=myapp --target=$BACKUP_DIR --staging=$BACKUP_DIR/staging 2>&1 | tee -a $LOG_FILE
if [ $? -eq 0 ]; then
echo "[$(date)] Backup completed successfully: $TIMESTAMP" >> $LOG_FILE
else
echo "[$(date)] Backup FAILED: $TIMESTAMP" >> $LOG_FILE
fi
# Xóa các backup cũ hơn 7 ngày (chỉ giữ metadata)
find $BACKUP_DIR -name "metadata.json" -mtime +7 -exec rm -rf {} \; 2>/dev/null
echo "[$(date)] Cleanup old backups finished." >> $LOG_FILE
Thay myapp bằng tên keyspace thực tế của bạn. Kết quả mong đợi: Script được tạo và sẵn sàng chạy.
Bước 2: Cấp quyền thực thi cho script.
sudo chmod +x /usr/local/bin/scylla-backup-daily.sh
Script giờ đã có thể chạy như một command. Kết quả mong đợi: Không có lỗi.
Bước 3: Thêm task vào crontab của user root.
sudo crontab -e
Thêm dòng sau vào cuối file crontab:
0 2 * * * /usr/local/bin/scylla-backup-daily.sh
Cấu hình này chạy script vào lúc 2:00 sáng mỗi ngày. Kết quả mong đợi: Crontab được lưu, service cron sẽ thực thi task vào thời gian đã định.
Verify kết quả: Chạy script thủ công một lần để test.
sudo /usr/local/bin/scylla-backup-daily.sh
Kiểm tra file log /var/log/scylla-backup.log để xem kết quả "Backup completed successfully".
Hướng dẫn Restore dữ liệu từ Snapshot
Chúng ta sẽ hướng dẫn cách khôi phục dữ liệu từ snapshot backup về một node mới hoặc node cũ bị mất dữ liệu.
Mục đích: Phục hồi dữ liệu sau sự cố. Kết quả mong đợi: Dữ liệu trong keyspace được khôi phục hoàn toàn và ScyllaDB có thể truy cập bình thường.
Bước 1: Chuẩn bị node đích.
Đảm bảo node mới đã cài đặt ScyllaDB, đã tham gia cluster (hoặc đang ở trạng thái standalone để restore), và service đang chạy.
sudo systemctl status scylla-server
Kết quả mong đợi: Service đang chạy. Nếu node mới chưa tham gia cluster, cần cấu hình seed trong /etc/scylla/scylla.yaml trước.
Bước 2: Chạy lệnh restore.
Chạy lệnh restore trên node đích, chỉ định đường dẫn đến thư mục backup đã tạo ở phần trên.
sudo scylla-backup restore --target=/mnt/backup/scylla --keyspace=myapp --staging=/mnt/backup/scylla/staging --rebuild-mode=incremental
Tham số --rebuild-mode=incremental giúp khôi phục chỉ những dữ liệu mới hoặc thay đổi, tăng tốc độ restore. Nếu là restore toàn bộ lần đầu, bỏ tham số này hoặc dùng full. Kết quả mong đợi: Công cụ bắt đầu tải dữ liệu từ thư mục backup và ghi vào disk của node đích, hiển thị tiến độ.
Bước 3: Kích hoạt lại node sau khi restore.
Sau khi restore xong, node có thể ở trạng thái "Leaving" hoặc "Decommissioned". Cần kích hoạt lại nó để tham gia cluster.
nodetool enablestreaming
nodetool enablecompaction
nodetool enablegossip
nodetool enablethrift
nodetool enablecql
nodetool enablejmx
nodetool enabletransport
Lưu ý: Các lệnh trên có thể thay đổi tùy phiên bản, lệnh quan trọng nhất là nodetool enablestreaming để node đồng bộ dữ liệu với các node khác. Kết quả mong đợi: Node chuyển trạng thái sang "Normal" hoặc "Normal, streaming".
Bước 4: Kiểm tra tính toàn vẹn dữ liệu.
Chạy lệnh nodetool status để xem node đã tham gia cluster chưa.
nodetool status
Truy cập vào CQL shell và đếm số lượng dữ liệu.
cqlsh
SELECT count(*) FROM myapp.your_table;
Kết quả mong đợi: Node hiện trong danh sách cluster, trạng thái UP và dữ liệu trong bảng khớp với thời điểm backup.
Điều hướng series:
Mục lục: Series: Triển khai Database phân tán với ScyllaDB trên Ubuntu 24.04
« Phần 5: Tối ưu hóa hiệu năng: Cấu hình Tuning và Disk I/O
Phần 7: Troubleshooting và các mẹo nâng cao cho ScyllaDB »