Chuẩn bị môi trường trên 2 Node mới
Cài đặt YugabyteDB trên Node 2 và Node 3
Trên 2 máy chủ mới (gọi là Node2 và Node3), thực hiện các bước cài đặt giống hệt như đã làm ở Phần 2, nhưng đảm bảo đường dẫn cài đặt và phiên bản khớp với Node1 hiện có.
Yêu cầu: Download gói YugabyteDB tương ứng với kiến trúc hệ thống (thường là amd64) và phiên bản đã cài trên Node1.
cd /opt
sudo curl -L https://packages.yugabyte.com/ycql/yugabyte-db_2.21.0.0-b1_amd64.deb -o yugabyte-db_2.21.0.0-b1_amd64.deb
sudo dpkg -i yugabyte-db_2.21.0.0-b1_amd64.deb
Kết quả mong đợi: Gói phần mềm được cài đặt thành công, thư mục /opt/yugabyte xuất hiện trên cả Node2 và Node3.
Kích hoạt dịch vụ trên Node mới
Khởi động các dịch vụ tserver và master trên Node2 và Node3. Lưu ý: Lúc này các node này chưa biết đến cụm hiện có (Node1), chúng đang chạy độc lập hoặc chờ được thêm vào.
Thực thi lệnh khởi động trên Node2 và Node3:
cd /opt/yugabyte/bin
sudo ./start-yb-master
sudo ./start-yb-tserver
Kết quả mong đợi: Các tiến trình master và tserver chạy trên Node2 và Node3. Bạn có thể kiểm tra bằng lệnh ps aux | grep yb-.
Cấu hình biến môi trường cho Node mới
Để các node mới có thể giao tiếp với Node1 (Master chính hiện tại), cần chỉ định --master_addresses khi khởi động. Tuy nhiên, trong quy trình mở rộng bằng yb-admin, ta thường khởi động trước rồi mới pull vào cụm.
Tuy nhiên, để đảm bảo Node2 và Node3 có thể liên lạc được với Node1 ngay lập tức cho bước kiểm tra, hãy set biến môi trường trong shell hiện tại của Node2 và Node3 (hoặc trong file config nếu muốn vĩnh viễn):
export YB_MASTER_ADDRESS="node1_ip:7100"
export YB_TSERVER_ADDRESS="node1_ip:7000"
Kết quả mong đợi: Shell hiện tại biết địa chỉ IP của Node1 để thực thi các lệnh quản lý sau này.
Thêm Node mới vào cụm bằng yb-admin
Thêm Node2 vào cụm
Trên Node1 (hoặc bất kỳ node nào đang chạy master), sử dụng công cụ quản lý yb-admin để thêm Node2 vào cụm. Lệnh này sẽ yêu cầu tserver của Node2 tham gia vào ring dữ liệu.
Thay thế IP_NODE2 bằng địa chỉ IP thực tế của Node2.
cd /opt/yugabyte/bin
sudo ./yb-admin add_node IP_NODE2:7000 --master_addresses IP_NODE1:7100
Kết quả mong đợi: Xuất hiện thông báo "Node added successfully" và trạng thái của Node2 chuyển sang "LIVE" hoặc "JOINING" trong console.
Thêm Node3 vào cụm
Thực hiện tương tự cho Node3. Đảm bảo Node2 đã được thêm thành công trước khi thêm Node3 để đảm bảo tính ổn định của cluster trong quá trình mở rộng.
Thay thế IP_NODE3 và IP_NODE1 bằng địa chỉ thực tế.
cd /opt/yugabyte/bin
sudo ./yb-admin add_node IP_NODE3:7000 --master_addresses IP_NODE1:7100
Kết quả mong đợi: Thông báo xác nhận Node3 đã được thêm vào. Cụm hiện có 3 nodes hoạt động.
Xác minh danh sách Nodes
Kiểm tra lại danh sách tất cả các nodes đang tham gia cụm để đảm bảo cả 3 node đều online và có trạng thái Healthy.
sudo ./yb-admin list_nodes --master_addresses IP_NODE1:7100
Kết quả mong đợi: Xuất hiện danh sách 3 địa chỉ IP tương ứng với Node1, Node2, Node3 với trạng thái HEALTHY.
Cấu hình Replication Factor cho dữ liệu
Đổi Replication Factor cho Table mới
YugabyteDB mặc định có Replication Factor (RF) là 3 nếu cluster có đủ 3 nodes. Để đảm bảo tính ACID và HA, khi tạo bảng mới, ta phải khai báo rõ ràng replication_factor = 3.
Truy cập vào shell của YugabyteDB (ySQL) trên Node1:
cd /opt/yugabyte/bin
sudo ./ysqlsh
Sau khi vào shell, thực thi lệnh tạo bảng với RF = 3:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100)
) WITH replication_factor = 3;
Kết quả mong đợi: Bảng users được tạo thành công. Dữ liệu ghi vào bảng này sẽ tự động được nhân bản lên 3 node khác nhau.
Đổi Replication Factor cho Table đã tồn tại
Nếu bạn đã có bảng từ Phần 2 hoặc Phần 3 với RF mặc định (có thể là 1 hoặc 3 tùy config ban đầu), bạn cần nâng cấp RF của nó lên 3 để đảm bảo HA khi mất 1 node.
Thực thi lệnh ALTER TABLE trong ysqlsh:
ALTER TABLE users SET replication_factor = 3;
Kết quả mong đợi: YugabyteDB sẽ bắt đầu quá trình "re-sharding" hoặc "re-replication" để đảm bảo dữ liệu tồn tại trên 3 bản sao. Trạng thái bảng sẽ chuyển sang REPLICATING rồi về ONLINE.
Verify cấu hình Replication
Kiểm tra xem dữ liệu đã được phân bổ trên 3 node chưa bằng cách truy vấn bảng yb_system.tables.
SELECT table_name, replication_factor FROM yb_system.tables WHERE table_name = 'users';
Kết quả mong đợi: Cột replication_factor hiển thị giá trị là 3.
Xác minh High Availability (HA) khi Node chính bị lỗi
Thử nghiệm Failure của Node1
Để kiểm chứng tính HA, ta sẽ tắt dịch vụ Master và Tserver trên Node1 (node chính hiện tại). YugabyteDB sẽ tự động thực hiện bầu chọn Master mới (Leader Election) từ Node2 hoặc Node3.
Trên Node1, thực hiện dừng dịch vụ:
cd /opt/yugabyte/bin
sudo ./stop-yb-master
sudo ./stop-yb-tserver
Kết quả mong đợi: Các tiến trình trên Node1 bị tắt. Nếu bạn mở console ysqlsh đang chạy, kết nối có thể bị ngắt tạm thời trong vài giây.
Chuyển đổi Master mới
Quan sát Node2 hoặc Node3. YugabyteDB sẽ tự động bầu chọn một trong hai node còn lại làm Master mới.
Kiểm tra trạng thái Master mới bằng lệnh list_nodes từ Node2 hoặc Node3:
cd /opt/yugabyte/bin
sudo ./yb-admin list_nodes --master_addresses IP_NODE2:7100
Kết quả mong đợi: Danh sách nodes hiển thị 2 node còn lại (Node2, Node3). Một trong hai sẽ có trạng thái MASTER hoặc LEADER (tùy phiên bản hiển thị), Node1 sẽ có trạng thái UNREACHABLE hoặc không xuất hiện.
Đảm bảo tính nhất quán dữ liệu (ACID)
Thử ghi dữ liệu vào bảng users ngay trong lúc Node1 đang tắt để đảm bảo hệ thống vẫn chấp nhận ghi và đảm bảo tính ACID (Atomicity, Consistency).
Trên Node2 (hoặc Node3), mở ysqlsh và chèn dữ liệu:
cd /opt/yugabyte/bin
sudo ./ysqlsh
INSERT INTO users (id, username, email) VALUES (101, 'test_ha', 'test@yugabyte.com');
SELECT * FROM users;
Kết quả mong đợi: Lệnh INSERT thực thi thành công, không báo lỗi. Dữ liệu mới xuất hiện trong kết quả SELECT. Điều này chứng tỏ Replication Factor = 3 đã hoạt động (dữ liệu được ghi vào 2 node còn lại, đảm bảo quorum).
Khôi phục Node1 về cụm
Khởi động lại dịch vụ trên Node1 để đưa nó quay lại cụm. Hệ thống sẽ tự động đồng bộ dữ liệu (catch-up) từ các node còn lại.
Trên Node1:
cd /opt/yugabyte/bin
sudo ./start-yb-master
sudo ./start-yb-tserver
Kiểm tra lại toàn bộ cụm từ Node2:
cd /opt/yugabyte/bin
sudo ./yb-admin list_nodes --master_addresses IP_NODE2:7100
Kết quả mong đợi: Node1 xuất hiện trở lại với trạng thái HEALTHY. Dữ liệu trên Node1 đã được đồng bộ với Node2 và Node3.
Điều hướng series:
Mục lục: Series: Triển khai Database ACID với YugabyteDB trên Ubuntu 24.04
« Phần 4: Tối ưu hóa hiệu năng ghi và đọc với cấu hình ACID
Phần 6: Backup, Restore và Recovery dữ liệu trong môi trường phân tán »