1. Kiểm tra và xác nhận yêu cầu phần cứng tối thiểu
1.1. Yêu cầu cấu hình cho mỗi Node
YugabyteDB là hệ thống phân tán, do đó mỗi node trong cụm cần tài nguyên đồng đều để đảm bảo hiệu năng và tính nhất quán ACID. Đối với môi trường development hoặc testing nhỏ, chúng ta cần ít nhất các thông số sau cho mỗi node.
- CPU: Tối thiểu 4 Cores (Khuyên dùng 8 Cores trở lên để xử lý tốt các transaction phức tạp).
- RAM: Tối thiểu 8GB (YugabyteDB cần bộ nhớ cho T-RocksDB và YSQL). Nếu chạy 3 node, tổng RAM tối thiểu là 24GB.
- Disk: Tối thiểu 100GB SSD (Bắt buộc dùng SSD/NVMe. HDD sẽ làm giảm nghiêm trọng hiệu năng I/O).
- OS: Ubuntu 24.04 LTS (Hỗ trợ tốt nhất cho các tính năng mới).
Thực hiện lệnh kiểm tra tài nguyên hiện có trên server Ubuntu 24.04 để đảm bảo đạt chuẩn trước khi cài đặt.
lscpu | grep "Core(s)" && free -h && df -h /
Kết quả mong đợi: Dòng CPU hiển thị số Core >= 4, dòng RAM hiển thị "Mem" >= 8Gi, và dung lượng disk trống >= 100G.
2. Cài đặt và cập nhật hệ điều hành Ubuntu 24.04 LTS
2.1. Cập nhật repository và nâng cấp hệ thống
Trước khi cài đặt bất kỳ thành phần nào, cần đảm bảo hệ thống Ubuntu 24.04 mới nhất với tất cả các bản vá bảo mật và gói thư viện chuẩn. Việc này giúp tránh xung đột phiên bản khi cài đặt YugabyteDB.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Quá trình chạy xong mà không có lỗi (Errors), tất cả gói phần mềm đều ở phiên bản mới nhất.
2.2. Cài đặt các gói phụ thuộc bắt buộc
YugabyteDB yêu cầu một số thư viện hệ thống cụ thể để biên dịch và chạy, bao gồm các công cụ mạng, bộ nén và thư viện C++.
sudo apt install -y wget curl gnupg lsb-release build-essential openjdk-17-jdk
Kết quả mong đợi: Các gói phần mềm được cài đặt thành công, kiểm tra bằng lệnh java -version phải trả về phiên bản OpenJDK 17.
3. Cấu hình SSH Key-based Authentication giữa các Node
3.1. Tạo cặp khóa SSH nếu chưa tồn tại
YugabyteDB sử dụng SSH để khởi động và quản lý các node từ một máy chủ điều khiển (Master/Controller). Cần tạo cặp khóa RSA 4096 bit để bảo mật kết nối nội bộ mà không cần nhập mật khẩu.
Thực hiện trên tất cả các node sẽ tham gia vào cụm (hoặc ít nhất là node master sẽ quản lý).
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_yugabyte -N ""
Kết quả mong đợi: Xuất hiện 2 file mới là ~/.ssh/id_rsa_yugabyte (private key) và ~/.ssh/id_rsa_yugabyte.pub (public key) trong thư mục home.
3.2. Phân phối Public Key sang các Node còn lại
Để node A có thể SSH vào node B mà không cần mật khẩu, ta cần copy public key của node A vào file authorized_keys của node B. Giả sử ta có 3 node với IP: 192.168.1.10 (Master), 192.168.1.11 (Node2), 192.168.1.12 (Node3).
Thực hiện lệnh này trên Node 1 (Master) để gửi key sang Node 2 và Node 3. Thay đổi username và IP cho phù hợp với môi trường thực tế của bạn.
ssh-copy-id -i ~/.ssh/id_rsa_yugabyte.pub username@192.168.1.11 && ssh-copy-id -i ~/.ssh/id_rsa_yugabyte.pub username@192.168.1.12
Kết quả mong đợi: Xuất hiện thông báo "Number of key(s) added: 1" cho từng node đích.
3.3. Cấu hình SSH Client để sử dụng đúng Private Key
Để đảm bảo các lệnh của YugabyteDB luôn dùng đúng key đã tạo, ta cần cấu hình file ~/.ssh/config để mapping hostname/IP với private key cụ thể.
Tạo file cấu hình tại đường dẫn ~/.ssh/config với nội dung hoàn chỉnh sau:
Host node1
HostName 192.168.1.10
User username
IdentityFile ~/.ssh/id_rsa_yugabyte
StrictHostKeyChecking no
Host node2
HostName 192.168.1.11
User username
IdentityFile ~/.ssh/id_rsa_yugabyte
StrictHostKeyChecking no
Host node3
HostName 192.168.1.12
User username
IdentityFile ~/.ssh/id_rsa_yugabyte
StrictHostKeyChecking no
Đổi quyền truy cập file config để đảm bảo SSH chấp nhận (phải là 600).
chmod 600 ~/.ssh/config
Kết quả mong đợi: Lệnh kiểm tra kết nối SSH không yêu cầu nhập key hoặc password.
ssh node2 echo "Connection to Node 2 successful" && ssh node3 echo "Connection to Node 3 successful"
Kết quả mong đợi: Xuất hiện thông báo "Connection to Node X successful" ngay lập tức mà không hỏi mật khẩu.
4. Cấu hình Firewall (UFW) để mở cổng cần thiết
4.1. Kiểm tra trạng thái UFW
Ubuntu 24.04 mặc định bật UFW (Uncomplicated Firewall). YugabyteDB cần mở nhiều cổng để giao tiếp giữa các node (t-raft, yb-tserver, yb-master). Nếu firewall chặn, cụm sẽ không thể hình thành (bootstrap failed).
sudo ufw status
Kết quả mong đợi: Nếu thấy "Status: active", ta cần cấu hình. Nếu "inactive", có thể bỏ qua bước mở cổng nhưng vẫn nên bật lại để bảo mật sau khi cấu hình xong.
4.2. Cấu hình UFW cho YugabyteDB
Để đơn giản cho môi trường triển khai nội bộ (LAN), ta sẽ cho phép tất cả traffic trong mạng nội bộ. Nếu là production trên public cloud, bạn chỉ nên mở các cổng cụ thể (7000, 7001, 7002, 7003, 9000, 9042, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399).
Tuy nhiên, để đảm bảo tính ổn định cao nhất cho các giao thức nội bộ của YugabyteDB (t-raft, gossip, heartbeats), ta sẽ cho phép tất cả traffic từ subnet nội bộ (ví dụ 192.168.1.0/24) đi vào.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.1.0/24 to any
sudo ufw allow 22/tcp
Thay 192.168.1.0/24 bằng subnet thực tế của bạn. Lệnh cuối cho phép SSH từ bên ngoài để quản trị.
Bật UFW để áp dụng cấu hình.
sudo ufw enable
Kết quả mong đợi: Xuất hiện "Firewall is active and enabled on system startup".
4.3. Verify kết quả Firewall
Kiểm tra lại xem các quy tắc đã được thêm vào chưa.
sudo ufw status verbose
Kết quả mong đợi: Thấy dòng "From 192.168.1.0/24" với trạng thái "ALLOW" và dòng "Anywhere" (cho SSH) cũng là "ALLOW".
5. Tổng hợp kiểm tra môi trường trước khi cài đặt
5.1. Chạy script kiểm tra nhanh (Health Check)
Trước khi tiến sang Phần 2 (Cài đặt), hãy chạy một script nhỏ để xác nhận tất cả các bước trên đã hoàn tất thành công trên tất cả các node.
Tạo file script /tmp/yb_env_check.sh với nội dung sau:
#!/bin/bash
echo "=== Checking Ubuntu Version ==="
cat /etc/os-release | grep VERSION_ID
echo "=== Checking RAM ==="
free -h | grep Mem
echo "=== Checking Disk (SSD check) ==="
df -h / | tail -1
echo "=== Checking SSH Connectivity ==="
for host in node1 node2 node3; do
if ssh -o ConnectTimeout=2 -o BatchMode=yes $host "echo 'OK'"; then
echo "$host: SSH Connection OK"
else
echo "$host: SSH Connection FAILED"
fi
done
echo "=== Checking UFW Status ==="
sudo ufw status | grep "192.168.1.0/24"
echo "=== Environment Check Complete ==="
Chạy script trên node Master.
chmod +x /tmp/yb_env_check.sh && bash /tmp/yb_env_check.sh
Kết quả mong đợi: Tất cả các dòng kiểm tra đều trả về thông tin hợp lệ, không có dòng nào báo "FAILED" hoặc "Error".
Đ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 2: Cài đặt và khởi động cụm YugabyteDB đơn node trên Ubuntu 24.04 »