Khái niệm kiến trúc ArangoDB Cluster
Trước khi cấu hình, bạn cần hiểu rõ vai trò của ba thành phần chính trong cụm (Cluster) để phân bổ tài nguyên CPU và RAM hợp lý trên các máy Ubuntu 24.04.
Agents: Là thành phần quản lý phân tán, chịu trách nhiệm trao đổi thông tin về trạng thái cụm, phân bổ dữ liệu (sharding) và điều phối các nút DBServer. Cần ít nhất 3 Agents để đảm bảo tính sẵn sàng cao (High Availability) khi một nút bị lỗi.
DBServers: Là nơi lưu trữ thực tế dữ liệu (Document, Graph, Key-Value). Dữ liệu được chia nhỏ (shard) và nhân bản (replica) trên các DBServers này để tăng tốc độ đọc và khả năng chịu lỗi.
Coordinators: Là cổng vào (entry point) cho tất cả các yêu cầu từ ứng dụng. Chúng phân tích truy vấn, chia nhỏ truy vấn phức tạp và định tuyến đến các DBServers tương ứng. Ứng dụng của bạn chỉ giao tiếp với Coordinator.
Cấu hình file cluster.conf cho từng nút server
Thiết lập mạng và biến môi trường
Trên mỗi máy chủ Ubuntu 24.04 trong cụm (giả sử có 3 máy với IP: 192.168.1.10, 192.168.1.11, 192.168.1.12), bạn cần xác định rõ vai trò của máy đó.
ArangoDB Cluster yêu cầu các nút giao tiếp qua các cổng riêng biệt: Agent (8529), DBServer (8529), Coordinator (8529). Để tránh xung đột trên cùng một máy, chúng ta sẽ chạy các thành phần này trên các cổng khác nhau hoặc trên các máy vật lý khác nhau. Ở đây, ta giả định kiến trúc 3 máy, mỗi máy chạy đủ 3 vai trò (All-in-one per node) để đơn giản hóa mô hình.
Tạo file cấu hình chính cho cụm tại đường dẫn mặc định: /etc/arangodb3/cluster.conf.
Trên máy Node 1 (192.168.1.10), tạo file với nội dung sau:
cat > /etc/arangodb3/cluster.conf
Kết quả mong đợi: File /etc/arangodb3/cluster.conf được tạo thành công với quyền đọc ghi của root. Nội dung này định nghĩa Node 1 tham gia vào cụm với vai trò kép (Agent, DBServer, Coordinator) trên các cổng riêng biệt.
Lặp lại cấu hình cho Node 2 và Node 3
Thực hiện tương tự trên Node 2 (192.168.1.11) và Node 3 (192.168.1.12). Lưu ý thay đổi my-address và các địa chỉ endpoint tương ứng với IP của từng máy.
Trên Node 2 (192.168.1.11), file cấu hình sẽ như sau:
cat > /etc/arangodb3/cluster.conf
Kết quả mong đợi: Node 2 đã được cấu hình để nhận diện đúng địa chỉ IP của nó và biết được vị trí của các node còn lại trong cụm.
Cấu hình cho Node 3 (192.168.1.12)
Áp dụng logic tương tự cho node cuối cùng:
cat > /etc/arangodb3/cluster.conf
Kết quả mong đợi: Cả 3 node đều có file cấu hình đồng nhất về danh sách thành viên cụm, nhưng khác biệt về địa chỉ endpoint của chính nó.
Khởi động cụm và kiểm tra trạng thái qua ArangoAUI
Khởi động dịch vụ trên các node
Trước khi khởi động, đảm bảo thư mục dữ liệu cụm (/var/lib/arangodb3/cluster) tồn tại và có quyền truy cập. Nếu chưa, hãy tạo và cấp quyền.
mkdir -p /var/lib/arangodb3/cluster
chown arangodb3:arangodb3 /var/lib/arangodb3/cluster
Kết quả mong đợi: Thư mục được tạo, quyền sở hữu thuộc về user arangodb3.
Trên mỗi node (1, 2, và 3), khởi động dịch vụ ArangoDB. Trên Ubuntu 24.04, systemd sẽ tự động đọc file cluster.conf và khởi động các tiến trình Agent, DBServer, Coordinator tương ứng.
systemctl restart arangodb3
systemctl status arangodb3
Kết quả mong đợi: Trạng thái là active (running). Nếu thấy lỗi, hãy kiểm tra log tại /var/log/arangodb3/error.log để xem có xung đột cổng hay không.
Kiểm tra trạng thái cụm qua ArangoAUI
Sau khi khởi động, bạn cần xác minh các node đã kết nối với nhau thành cụm. ArangoDB Cluster yêu cầu một bước khởi tạo (bootstrap) nếu chưa có dữ liệu, hoặc tự động join nếu đã có cấu hình.
Mở trình duyệt trên máy quản trị và truy cập giao diện Admin (ArangoAUI) qua cổng Coordinator của Node 1 (8531).
http://192.168.1.10:8531/_admin
Kết quả mong đợi: Giao diện ArangoAUI hiện ra. Bạn cần đăng nhập (mặc định là root/root hoặc user bạn đã tạo). Trong tab Cluster, bạn sẽ thấy danh sách các node.
Để kiểm tra nhanh bằng dòng lệnh trên Node 1:
curl -XGET http://192.168.1.10:8531/_admin/cluster/nodes
Kết quả mong đợi: JSON trả về danh sách các node với role là agent, dbserver, hoặc coordinator và isUp là true.
Cấu hình Sharding và Replication Factor
Tạo Collection với Sharding tự động
Trong môi trường Cluster, khi bạn tạo Collection, bạn có thể chỉ định số lượng Shard (đoạn dữ liệu) và Replication Factor (số bản sao) để cân bằng tải.
Định nghĩa tham số:
- shardCount: Số lượng shard. Tăng lên giúp tăng khả năng mở rộng ngang (scale-out).
- replicationFactor: Số bản sao của mỗi shard. Phải lớn hơn hoặc bằng số lượng DBServers hiện có để đạt được độ dư thừa tối đa. Với 3 DBServers, đặt là 3.
Thực hiện tạo Collection users với sharding tự động qua API:
curl -XPOST "http://192.168.1.10:8531/_api/database/_createDatabase?dbName=myClusterDB" -H "Content-Type: application/json" -d '{"isCluster": true}'
Kết quả mong đợi: Database myClusterDB được tạo thành công.
Tiếp theo, tạo Collection users với cấu hình sharding và replication:
curl -XPOST "http://192.168.1.10:8531/_api/database/myClusterDB/_api/collection" -H "Content-Type: application/json" -d '{
"name": "users",
"type": "document",
"options": {
"shardCount": 4,
"replicationFactor": 3,
"writeConcernFactor": 2
}
}'
Kết quả mong đợi: Collection users được tạo với 4 shard, mỗi shard có 3 bản sao phân tán trên các DBServer. writeConcernFactor: 2 nghĩa là ghi thành công khi có ít nhất 2 bản sao nhận được dữ liệu.
Verify phân bổ Shard
Để kiểm tra xem dữ liệu đã được phân bổ đều chưa, sử dụng command sau để xem cấu trúc shard của collection vừa tạo:
curl -XGET "http://192.168.1.10:8531/_api/database/myClusterDB/_api/collection/users" | jq .shards
Kết quả mong đợi: Một mảng JSON chứa danh sách các shard. Mỗi shard sẽ có trường shards liệt kê các DBServer (ví dụ: db-192.168.1.10:8530) đang lưu trữ bản sao của shard đó. Bạn sẽ thấy mỗi shard xuất hiện trên 3 DBServer khác nhau.
Tổng kết kiểm tra
Để xác nhận cụm hoạt động ổn định, thực hiện chu trình đọc viết đơn giản:
curl -XPOST "http://192.168.1.10:8531/_api/database/myClusterDB/_api/document/users/_key/test-user-001" -H "Content-Type: application/json" -d '{"name": "Test User", "role": "admin"}'
Kết quả mong đợi: Trả về key của document mới tạo và revision.
Đảm bảo khi bạn xóa một DBServer (giả lập), dữ liệu vẫn truy cập được nhờ cơ chế replication đã cấu hình ở trên.
Đ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 4: Kết hợp dữ liệu Document và Key-Value trong cùng một Collection
Phần 6: Sao lưu, khôi phục và giám sát hiệu năng »