Khởi tạo các node bổ sung và cấu hình giao tiếp
Trên các máy chủ mới (ví dụ: node2 và node3), bạn cần cài đặt CockroachDB tương tự như node chính, nhưng cấu hình khởi động khác để chúng tham gia vào cluster hiện có.
Cấu hình file systemd cho node mới
Bạn cần chỉnh sửa file cấu hình dịch vụ để chỉ định IP quảng bá (advertise address) của chính node đó và IP join của node chính (node1). Điều này giúp CockroachDB biết cách định tuyến lưu lượng mạng nội bộ.
Đường dẫn file: /etc/systemd/system/cockroach.service
Thay thế toàn bộ nội dung bằng cấu hình dưới đây. Lưu ý thay đổi advertise-addr thành IP riêng của node đang cấu hình (ví dụ 192.168.1.102 cho node2).
[Unit]
Description=CockroachDB Node
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
User=cockroach
Group=cockroach
ExecStart=/usr/local/bin/cockroach start --certs-dir=/var/lib/cockroach/certs --listen-addr=0.0.0.0:26257 --advertise-addr=192.168.1.102 --http-addr=0.0.0.0:8080 --join=192.168.1.101:26257
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536
LimitNPROC=65536
[Install]
WantedBy=multi-user.target
Kết quả mong đợi: File cấu hình đã ghi đúng IP quảng bá của node mới và IP join của node1. Dịch vụ chưa chạy.
Khởi động và kích hoạt dịch vụ trên node mới
Áp dụng cấu hình systemd mới và khởi động dịch vụ CockroachDB trên các node bổ sung.
sudo systemctl daemon-reload
sudo systemctl enable cockroach
sudo systemctl start cockroach
Kiểm tra trạng thái dịch vụ ngay lập tức để đảm bảo nó không bị lỗi cấu hình.
sudo systemctl status cockroach
Kết quả mong đợi: Trạng thái dịch vụ là active (running). Nếu thấy failed, hãy kiểm tra journalctl -u cockroach để tìm lỗi kết nối hoặc chứng chỉ.
Join các node vào cluster và kiểm tra trạng thái Health
Sau khi các node mới khởi động, chúng sẽ tự động tìm kiếm và gia nhập cluster thông qua tham số --join. Bạn cần xác minh từ node chính rằng các node mới đã tham gia thành công.
Kiểm tra danh sách node trong cluster
Chạy lệnh từ node chính (node1) để liệt kê tất cả các node đang tham gia vào cluster. Lệnh này truy vấn bảng hệ thống crdb_internal.cluster_nodes.
cockroach sql --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101 -e "SELECT node_id, address, liveness FROM crdb_internal.cluster_nodes ORDER BY node_id;"
Kết quả mong đợi: Một bảng hiển thị 3 dòng (cho 3 nodes). Cột liveness phải là ALIVE cho tất cả các node. Cột address phải khớp với IP bạn đã cấu hình.
Chạy lệnh kiểm tra sức khỏe cluster
Sử dụng lệnh tiện ích node status để có cái nhìn tổng quan về tình trạng của cluster, bao gồm số lượng replica và trạng thái lưu trữ.
cockroach node status --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101
Kết quả mong đợi: Xuất hiện bảng STATUS với STATUS: HEALTHY. Nếu có node mới join, bạn có thể thấy thông báo unavailable ranges hoặc under-replicated tạm thời trong quá trình phân phối lại dữ liệu (rebalancing).
Cấu hình số lượng Replica cho dữ liệu Row-Oriented
Trong mô hình Row-Oriented, dữ liệu được lưu trữ theo từng dòng. Để đảm bảo tính sẵn sàng cao (High Availability), bạn cần thiết lập hệ số nhân bản (Replication Factor) sao cho dữ liệu được sao chép lên nhiều node khác nhau.
Đặt mức Replica toàn cục (Zone Configuration)
Thay vì cấu hình cho từng bảng riêng lẻ, bạn có thể đặt mức replica mặc định cho toàn bộ cluster hoặc cho một namespace cụ thể. Điều này áp dụng cho mọi bảng Row-Oriented mới được tạo.
cockroach sql --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101 -e "ALTER RANGE default CONFIGURE ZONE USING constraints = '{+node1, +node2, +node3}', num_replicas = 3;"
Giải thích: Tham số constraints buộc CockroachDB phải lưu replica trên các node cụ thể (node1, node2, node3). num_replicas = 3 yêu cầu 3 bản sao cho mỗi vùng dữ liệu.
Kết quả mong đợi: Lệnh trả về ALTER RANGE. Dữ liệu hiện có sẽ bắt đầu được di chuyển (rebalance) để tuân thủ cấu hình mới.
Cấu hình Replica cho bảng quan trọng cụ thể
Nếu bạn có một bảng quan trọng (ví dụ: transactions) cần mức độ bảo mật cao hơn hoặc phân phối khác biệt, hãy áp dụng Zone riêng cho bảng đó.
cockroach sql --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101 -e "ALTER TABLE transactions CONFIGURE ZONE USING constraints = '{+node1, +node2, +node3}', num_replicas = 3;"
Kết quả mong đợi: Lệnh trả về ALTER TABLE. Bảng transactions sẽ ưu tiên áp dụng cấu hình này thay vì cấu hình mặc định của cluster.
Verify cấu hình Zone
Kiểm tra xem cấu hình Zone đã được áp dụng đúng cho các range dữ liệu chưa.
cockroach sql --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101 -e "SHOW ZONE CONFIGURATION FOR TABLE transactions;"
Kết quả mong đợi: Xuất hiện bảng cấu hình hiển thị num_replicas: 3 và danh sách constraints chứa các node bạn đã định nghĩa.
Giám sát sự phân phối dữ liệu (Data Locality)
Sau khi cấu hình replication, CockroachDB sẽ tự động cân bằng tải và phân phối dữ liệu giữa các node. Bạn cần giám sát để đảm bảo dữ liệu không bị tập trung quá mức vào một node duy nhất.
Kiểm tra số lượng Range trên mỗi Node
Lệnh này cho biết mỗi node đang giữ bao nhiêu "Range" (đơn vị phân vùng dữ liệu). Trong một cluster cân bằng, số lượng range trên các node phải xấp xỉ nhau.
cockroach sql --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101 -e "SELECT node_id, COUNT(*) as range_count FROM crdb_internal.ranges GROUP BY node_id ORDER BY node_id;"
Kết quả mong đợi: Các giá trị range_count của node1, node2, node3 phải gần bằng nhau (chênh lệch không đáng kể). Nếu một node có số range gấp đôi các node khác, quá trình rebalancing chưa hoàn tất hoặc có vấn đề về lưu lượng.
Kiểm tra trạng thái Replica và phân phối vật lý
Truy vấn chi tiết để xem mỗi Range đang nằm trên những node nào, đảm bảo rằng dữ liệu Row-Oriented đã được nhân bản đúng theo cấu hình Zone.
cockroach sql --certs-dir=/var/lib/cockroach/certs --host=192.168.1.101 -e "SELECT range_id, start_key, end_key, lease_holder, replicas FROM crdb_internal.ranges LIMIT 10;"
Kết quả mong đợi: Cột replicas hiển thị danh sách các node (ví dụ: [1, 2, 3]) cho mỗi range. Điều này xác nhận dữ liệu đã được sao chép lên 3 node như cấu hình.
Giám sát qua Dashboard CockroachDB
Mở trình duyệt web trên máy client và truy cập giao diện quản trị CockroachDB (DB Console) tại cổng 8080 của bất kỳ node nào.
curl -s http://192.168.1.101:8080 | grep -o "href=\"[^\"]*dashboard[^\"]*\""
Lưu ý: Bạn cần truy cập trực tiếp qua trình duyệt tại địa chỉ https://192.168.1.101:8080 (dùng chứng chỉ đã cấu hình) để xem tab Overview và Nodes. Tại đây, biểu đồ Replicas sẽ hiển thị trực quan sự phân bố dữ liệu.
Kết quả mong đợi: Biểu đồ hiển thị 3 node với các thanh dữ liệu (Storage, Range Count) cân bằng nhau. Không có cảnh báo Unbalanced hoặc Under-replicated.
Điều hướng series:
Mục lục: Series: Triển khai Database Row-Oriented với CockroachDB trên Ubuntu 24.04
« Phần 4: Tối ưu hóa hiệu năng cho mô hình Row-Oriented trong CockroachDB
Phần 6: Giám sát, bảo mật và xử lý sự cố (Troubleshooting) nâng cao »