Khởi động Seed Node và xác nhận trạng thái UN
Chạy ScyllaDB trên Node 1 (Seed)
Node đầu tiên đóng vai trò là Seed Node, là điểm khởi đầu để các node khác phát hiện và gia nhập vào cluster. Chúng ta cần khởi động dịch vụ trên Node 1 và đợi nó sẵn sàng.
Thực hiện lệnh sau trên Node 1 (IP: 192.168.1.10):
sudo systemctl start scylla
Trạng thái mong đợi: Dịch vụ Scylla khởi động thành công, không có lỗi trong journal.
Để xác nhận node đã sẵn sàng và có trạng thái UN (Up/Normal), chúng ta cần đợi quá trình bootstrap hoàn tất. ScyllaDB cần một khoảng thời gian để giao thức Gossip trao đổi thông tin ban đầu.
Thực hiện lệnh kiểm tra trạng thái ngay trên Node 1:
nodetool status
Kết quả mong đợi: Bạn sẽ thấy một dòng duy nhất với IP của Node 1, trạng thái là UN (Up/Normal), và datacenter là dc1.
Verify kết quả: Dòng đầu tiên trong bảng phải hiển thị trạng thái "UN" và "UN" ở cột State và Status.
Cấu hình và khởi động Node 2 và Node 3
Cấu hình file scylla.yaml cho Node 2
Node 2 cần biết địa chỉ IP của Node 1 (Seed Node) để gia nhập cluster. Chúng ta sẽ chỉnh sửa file cấu hình để chỉ định seed-address.
Trên Node 2 (IP: 192.168.1.11), mở file cấu hình:
sudo nano /etc/scylla/scylla.yaml
Sửa phần seed-address như sau (thay thế IP của Node 1 vào dòng seed-address):
seed-address: 192.168.1.10
Đồng thời đảm bảo listen-address được cấu hình đúng IP của Node 2:
listen-address: 192.168.1.11
Kết quả mong đợi: File cấu hình đã lưu, Node 2 biết phải kết nối tới Node 1 để gia nhập.
Khởi động Node 2
Khởi động dịch vụ Scylla trên Node 2 sau khi đã cập nhật cấu hình.
sudo systemctl start scylla
Kết quả mong đợi: Dịch vụ chạy, Node 2 bắt đầu giao tiếp với Node 1 qua giao thức Gossip và thực hiện quá trình streaming dữ liệu (nếu có) hoặc chỉ đồng bộ metadata.
Verify kết quả: Chờ khoảng 10-20 giây, sau đó chạy lệnh trên Node 1:
nodetool status
Bạn sẽ thấy Node 2 xuất hiện trong danh sách với trạng thái UN.
Cấu hình file scylla.yaml cho Node 3
Áp dụng tương tự cho Node 3 (IP: 192.168.1.12). Node 3 cũng cần biết địa chỉ Seed Node (Node 1) để gia nhập.
Trên Node 3, mở file cấu hình:
sudo nano /etc/scylla/scylla.yaml
Cấu hình seed-address trỏ về Node 1:
seed-address: 192.168.1.10
Cấu hình listen-address là IP của Node 3:
listen-address: 192.168.1.12
Kết quả mong đợi: File cấu hình đã lưu chính xác.
Khởi động Node 3
Khởi động dịch vụ Scylla trên Node 3.
sudo systemctl start scylla
Kết quả mong đợi: Node 3 kết nối thành công vào cluster và bắt đầu đồng bộ trạng thái.
Verify kết quả: Chạy lệnh trên Node 1 sau khi Node 3 đã khởi động:
nodetool status
Bạn sẽ thấy 3 dòng, tương ứng với 3 node, tất cả đều có trạng thái UN.
Kiểm tra Topology và Status Cluster bằng Nodetool
Xác minh danh sách Node và Trạng thái
Lệnh nodetool status là công cụ quan trọng nhất để kiểm tra sức khỏe của cluster. Nó hiển thị trạng thái của từng node trong cluster.
Thực hiện lệnh trên bất kỳ node nào (ví dụ Node 1):
nodetool status
Kết quả mong đợi: Bảng hiển thị 3 node, tất cả đều có State là "UN" và Status là "UN". Datacenter đều là "dc1".
Verify kết quả: Không có node nào ở trạng thái "DN" (Down/Normal) hoặc "UN" (Up/Normal) nhưng bị thiếu token.
Kiểm tra Token Ring và phân vùng dữ liệu
Lệnh nodetool ring cho phép xem chi tiết về cách dữ liệu được phân phối qua các node dựa trên token.
Thực hiện lệnh trên Node 1:
nodetool ring
Kết quả mong đợi: Bạn sẽ thấy danh sách các token và node chịu trách nhiệm cho mỗi khoảng token. Mỗi node sẽ xuất hiện nhiều lần tương ứng với số replica (mặc định là 3 nếu keyspace hệ thống chưa có RF khác, nhưng ở đây cluster mới nên sẽ thấy phân bổ token đều đặn).
Verify kết quả: Đảm bảo cả 3 node đều xuất hiện trong bảng phân bổ token, chứng tỏ chúng đang tham gia vào ring.
Kiểm tra thông tin Gossip
Gossip protocol là cơ chế giao tiếp ngang hàng. Lệnh này giúp kiểm tra xem các node có "nhìn thấy" nhau không.
Thực hiện lệnh trên Node 1:
nodetool gossipinfo
Kết quả mong đợi: Đầu ra hiển thị thông tin chi tiết của Node 1, bao gồm danh sách các node lân cận (peers) mà Node 1 đang giao tiếp. Bạn phải thấy IP của Node 2 và Node 3 trong phần peers.
Verify kết quả: Kiểm tra xem Node 2 và Node 3 có mặt trong danh sách peers với trạng thái kết nối thành công (không bị lỗi timeout).
Kiểm tra sự đồng bộ dữ liệu và Giao thức Gossip
Theo dõi log đồng bộ hóa
Khi Node 2 và Node 3 gia nhập, ScyllaDB thực hiện quá trình streaming để đồng bộ metadata và dữ liệu (nếu có). Chúng ta cần quan sát log để đảm bảo quá trình này diễn ra mượt mà.
Thực hiện lệnh theo dõi log thời gian thực trên Node 2:
sudo journalctl -u scylla -f | grep -i "streaming\|gossip"
Kết quả mong đợi: Bạn sẽ thấy các dòng log báo cáo về việc kết nối với seed node, trao đổi thông tin gossip, và quá trình streaming bắt đầu.
Verify kết quả: Không xuất hiện các dòng lỗi (Error) liên quan đến "Connection refused" hay "Timeout" trong quá trình đồng bộ.
Đảm bảo tất cả node đều thấy nhau
Để chắc chắn giao thức Gossip đã ổn định, chúng ta sẽ kiểm tra từ Node 2 xem nó có thấy Node 1 và Node 3 không.
Thực hiện lệnh trên Node 2:
nodetool status
Kết quả mong đợi: Tương tự như Node 1, bạn thấy 3 node với trạng thái UN. Điều này chứng tỏ giao thức Gossip đã lan truyền thông tin topology đến tất cả các node.
Verify kết quả: Sự đồng nhất trong kết quả của lệnh nodetool status trên cả 3 node.
Xác minh kết nối qua giao thức CQL
Kết nối vào Cluster bằng cqlsh
Để xác minh cluster hoạt động ở mức ứng dụng, chúng ta cần sử dụng trình khách CQL (cqlsh) để kết nối và thực hiện lệnh đơn giản.
Trên Node 1, mở cqlsh kết nối đến localhost:
cqlsh
Kết quả mong đợi: Giao diện dòng lệnh CQL xuất hiện, prompt chuyển sang "cqlsh>".
Thực hiện lệnh DESCRIBE và kiểm tra topology
Trong môi trường CQL, chúng ta có thể kiểm tra xem driver có thấy đầy đủ các node trong cluster không.
Thực hiện lệnh sau trong cqlsh:
DESCRIBE CLUSTER;
Kết quả mong đợi: Đầu ra hiển thị thông tin về Cluster, Datacenter (dc1), và danh sách các Hosts (Node 1, Node 2, Node 3) với trạng thái "UP".
Verify kết quả: Số lượng Hosts trong kết quả phải bằng 3 và tất cả đều có trạng thái UP.
Test đọc ghi đơn giản trên Node khác
Để đảm bảo cân bằng tải và khả năng đọc từ các node khác, chúng ta sẽ kết nối từ Node 2 vào cluster.
Trên Node 2, mở cqlsh kết nối đến IP của Node 1 (hoặc localhost nếu driver tự phát hiện):
cqlsh 192.168.1.10
Thực hiện lệnh kiểm tra version để xác nhận kết nối thành công:
DESCRIBE VERSION;
Kết quả mong đợi: Trả về phiên bản ScyllaDB hiện hành. Điều này chứng tỏ kết nối CQL giữa Node 2 và Cluster đã hoạt động.
Verify kết quả: Lệnh thực thi thành công, không bị lỗi "Connection refused" hoặc "Authentication failed".
Đ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 2: Cài đặt ScyllaDB từ repository chính thức và cấu hình cơ bản
Phần 4: Quản lý Dữ liệu: Tạo Keyspace, Table và nhập liệu mẫu »