Cấu hình Graph Service và Storage Service cho cụm phân tán
Trong phần này, chúng ta sẽ tiến hành cấu hình các file cấu hình chính để Graph Service và Storage Service có thể giao tiếp với Meta Service đã khởi tạo ở phần trước, đồng thời phân bổ tài nguyên cho cụm phân tán.
1. Cấu hình file graph.conf cho Graph Service
Graph Service đóng vai trò là điểm vào (entry point) để xử lý các truy vấn nGQL. Chúng ta cần chỉ định IP của Meta Service và cấu hình các tham số cân bằng tải.
Truy cập vào thư mục cấu hình của Nebula Graph (thường là /etc/nebula-graph/). Tạo hoặc chỉnh sửa file graph.conf với nội dung sau:
cat > /etc/nebula-graph/graph.conf
Kết quả mong đợi: File graph.conf được tạo thành công tại /etc/nebula-graph/graph.conf. Kiểm tra lại bằng lệnh cat /etc/nebula-graph/graph.conf để đảm bảo IP của Meta Server đã điền chính xác.
2. Cấu hình file storage.conf cho Storage Service
Storage Service lưu trữ dữ liệu đồ thị (Vertex và Edge) dưới dạng các partition. Cấu hình này cần chỉ định đường dẫn dữ liệu và số lượng shard.
Truy cập vào thư mục cấu hình của Storage Service (thường là /etc/nebula-storage/). Tạo file storage.conf với nội dung chi tiết:
cat > /etc/nebula-storage/storage.conf
Kết quả mong đợi: File storage.conf được tạo thành công tại /etc/nebula-storage/storage.conf. Đảm bảo thư mục /var/lib/nebula-storage/data tồn tại và có quyền truy cập.
Triển khai các instance Service trên cụm
Sau khi cấu hình xong, chúng ta sẽ khởi động các service trên các node khác nhau để tạo thành cụm phân tán. Giả sử ta có 3 node: Node 1 (192.168.1.101), Node 2 (192.168.1.102), Node 3 (192.168.1.103).
1. Triển khai Storage Service trên Node 1
Trên Node 1, chúng ta cần cập nhật advertise_addr trong storage.conf thành IP của Node 1 trước khi khởi động.
sed -i 's/advertise_addr = 192.168.1.101/advertise_addr = 192.168.1.101/' /etc/nebula-storage/storage.conf
Khởi động dịch vụ Storage Service trên Node 1:
systemctl start nebula-storage
Kiểm tra trạng thái khởi động:
systemctl status nebula-storage
Kết quả mong đợi: Trạng thái hiển thị "active (running)" và không có lỗi trong log.
2. Triển khai Storage Service trên Node 2 và Node 3
Trên Node 2 và Node 3, thực hiện tương tự nhưng thay đổi IP trong advertise_addr của file storage.conf.
Trên Node 2 (192.168.1.102):
sed -i 's/advertise_addr = 192.168.1.101/advertise_addr = 192.168.1.102/' /etc/nebula-storage/storage.conf
systemctl start nebula-storage
systemctl status nebula-storage
Trên Node 3 (192.168.1.103):
sed -i 's/advertise_addr = 192.168.1.101/advertise_addr = 192.168.1.103/' /etc/nebula-storage/storage.conf
systemctl start nebula-storage
systemctl status nebula-storage
Kết quả mong đợi: Cả 3 node Storage Service đều chạy ổn định và đăng ký vào Meta Service.
3. Triển khai Graph Service
Graph Service thường chạy trên một hoặc nhiều node riêng biệt hoặc cùng node với Storage/Meta. Ở đây ta triển khai Graph Service trên Node 1 để xử lý truy vấn.
Đảm bảo advertise_addr trong graph.conf của Node 1 đã đúng (192.168.1.101). Khởi động dịch vụ:
systemctl start nebula-graph
Kiểm tra trạng thái:
systemctl status nebula-graph
Kết quả mong đợi: Graph Service chạy và đã kết nối thành công với Meta Service để lấy thông tin về các Storage Service.
Cấu hình cân bằng tải và phân vùng dữ liệu
Nebula Graph tự động phân vùng dữ liệu (sharding) dựa trên số lượng shard đã cấu hình trong storage.conf. Tuy nhiên, để tối ưu hiệu năng, chúng ta cần cấu hình thêm các tham số cân bằng tải.
1. Cấu hình cân bằng tải tự động
Trong file storage.conf đã tạo ở phần 1, chúng ta đã đặt rebalance_strategy = auto. Điều này cho phép Meta Service tự động di chuyển các shard giữa các Storage Service khi có sự thay đổi về tải hoặc khi thêm node mới.
Để kích hoạt cân bằng tải chủ động (nếu cần), sử dụng lệnh nGQL thông qua Graph Service:
nebula-console -addr 192.168.1.101:9669 -u root -p nebula
SHOW CONFIGS OF STORAGE
SET CONFIGS OF STORAGE rebalance.enable true
Kết quả mong đợi: Lệnh SET CONFIGS chạy thành công, hệ thống bắt đầu cân bằng lại dữ liệu giữa các node storage.
2. Kiểm tra phân vùng dữ liệu (Sharding)
Để xác minh việc phân vùng dữ liệu đã diễn ra đúng như cấu hình (16 shard), sử dụng lệnh SHOW HOSTS:
SHOW HOSTS
Lệnh này hiển thị danh sách các host (Storage Service) đang tham gia cụm và trạng thái của chúng.
Kết quả mong đợi: Hiển thị 3 node storage (Node 1, Node 2, Node 3) với trạng thái "ALIVE".
Kiểm tra trạng thái sẵn sàng của toàn bộ cụm
Bước cuối cùng là xác nhận toàn bộ cụm Nebula Graph đã sẵn sàng hoạt động với Graph Service và Storage Service phân tán.
1. Kiểm tra kết nối giữa các Service
Sử dụng lệnh SHOW CLUSTER trong Nebula Console để xem tổng quan trạng thái của toàn bộ cụm (Meta, Graph, Storage):
SHOW CLUSTER
Kết quả mong đợi: Hiển thị danh sách các node Meta, Graph và Storage với trạng thái "ALIVE". Số lượng storage node phải bằng 3.
2. Kiểm tra khả năng xử lý truy vấn
Tạo một space (database) đơn giản để kiểm tra Graph Service có thể giao tiếp với Storage Service và ghi dữ liệu hay không:
CREATE SPACE IF NOT EXISTS test_space (partition_num=16, replica_factor=3)
USE test_space
CREATE TAG IF NOT EXISTS person (name string, age int)
INSERT VERTEX person (name, age) VALUES "person1":("Alice", 25)
Kết quả mong đợi: Lệnh INSERT chạy thành công (Return 1 row affected). Dữ liệu đã được phân vùng tự động vào 16 shard và nhân bản 3 bản sao lên 3 node storage.
3. Kiểm tra log lỗi
Kiểm tra log của các service để đảm bảo không có lỗi nghiêm trọng (ERROR, FATAL):
tail -n 50 /var/log/nebula-graph/nebula-graph.log
tail -n 50 /var/log/nebula-storage/nebula-storage.log
Kết quả mong đợi: Log chỉ hiển thị các dòng INFO hoặc WARN liên quan đến startup hoặc query, không có lỗi kết nối giữa các service.
Điều hướng series:
Mục lục: Series: Triển khai Database Graph phân tán với Nebula Graph trên Ubuntu 24.04
« Phần 2: Khởi tạo và cấu hình Meta Service của Nebula Graph
Phần 4: Cấu hình quản trị và kết nối qua Nebula Console và nGQL »