Yêu cầu phần cứng và kiến trúc nền tảng
Để đảm bảo CockroachDB hoạt động ổn định trong môi trường production, mỗi node cần đáp ứng các thông số tối thiểu sau trên Ubuntu 24.04.
- CPU: Tối thiểu 4 cores (khuyến nghị 8 cores trở lên để xử lý đồng thời nhiều request).
- RAM: Tối thiểu 8GB (CockroachDB sử dụng RAM để cache dữ liệu nóng, 1GB RAM nên dành riêng cho hệ điều hành).
- Storage: SSD NVMe bắt buộc. HDD sẽ gây nghẽn cổ chai (I/O bottleneck) làm giảm hiệu năng nghiêm trọng.
- Mạng: Băng thông nội bộ tối thiểu 1Gbps, độ trễ (latency) giữa các node dưới 5ms.
Kiến thức về Mô hình phân tán và CAP Theorem
CockroachDB là một database phân tán (distributed database) được thiết kế để chạy trên nhiều node. Nó tuân thủ định lý CAP (Consistency, Availability, Partition tolerance).
Trong môi trường thực tế, CockroachDB ưu tiên sự nhất quán (Consistency) và chịu lỗi phân vùng (Partition tolerance), tức là CP. Khi mạng bị chia cắt, database vẫn đảm bảo dữ liệu không bị xung đột, nhưng có thể tạm thời không khả dụng (unavailable) cho đến khi mạng được khôi phục.
Việc hiểu rõ điều này giúp bạn thiết kế kiến trúc mạng sao cho độ trễ thấp và băng thông cao giữa các node, giảm thiểu khả năng xảy ra partition.
Verify yêu cầu
Chạy lệnh kiểm tra tài nguyên trên mỗi node:
lscpu | grep "Core(s)" && free -h && lsblk
Kết quả mong đợi: CPU có ít nhất 4 cores, RAM hiển thị available > 6GB, và ổ đĩa là loại NVMe (thường có tên chứa nvme0n1 hoặc tương đương).
Cài đặt và cấu hình Ubuntu Server 24.04 cho 3 Node
Khởi tạo 3 Node với Ubuntu 24.04
Giả sử bạn đã tạo 3 VM hoặc máy vật lý. Cần đảm bảo cả 3 máy đã cài đặt Ubuntu Server 24.04 LTS, cập nhật lên phiên bản mới nhất và cài đặt các công cụ cần thiết.
Thực hiện trên cả 3 node (node1, node2, node3):
sudo apt update && sudo apt upgrade -y
Update xong, cài đặt các gói hệ thống cơ bản:
sudo apt install -y vim curl wget git net-tools
Đảm bảo kernel đã được cấu hình để hỗ trợ nhiều file descriptor (quan trọng cho CockroachDB):
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/99-cockroach.conf && sudo sysctl -p
Cấu hình này cho phép hệ điều hành cấp phát bộ nhớ ảo vượt quá RAM vật lý, tránh lỗi OOM (Out of Memory) khi CockroachDB yêu cầu nhiều bộ nhớ.
Verify cài đặt Ubuntu
cat /etc/os-release | grep VERSION && sysctl vm.overcommit_memory
Kết quả mong đợi: VERSION hiển thị "24.04" và giá trị vm.overcommit_memory là "1".
Cấu hình DNS và Hostname cố định
Tiến trình cấu hình Hostname
CockroachDB yêu cầu hostname cố định cho mỗi node để nhận diện trong cụm (cluster). Chúng ta sẽ đặt tên là cockroach-node1, cockroach-node2, cockroach-node3.
Thực hiện trên từng node tương ứng. Ví dụ trên Node 1:
sudo hostnamectl set-hostname cockroach-node1
Lặp lại cho Node 2 và Node 3 với tên tương ứng.
Cấu hình file /etc/hosts
Để các node giao tiếp với nhau mà không cần server DNS bên ngoài, chúng ta sẽ mapping IP address trong file /etc/hosts trên cả 3 node.
Giả sử IP của các node như sau:
- cockroach-node1: 192.168.1.10
- cockroach-node2: 192.168.1.11
- cockroach-node3: 192.168.1.12
Chỉnh sửa file /etc/hosts trên tất cả các node với nội dung chính xác sau:
sudo nano /etc/hosts
Thay thế toàn bộ nội dung hoặc thêm các dòng sau vào cuối file:
127.0.0.1 localhost
127.0.1.1 cockroach-node1
192.168.1.10 cockroach-node1
192.168.1.11 cockroach-node2
192.168.1.12 cockroach-node3
Lưu ý: Dòng 127.0.1.1 là để systemd-resolved hoặc hostnamectl hoạt động đúng, các dòng IP thực tế dùng để các node ping nhau.
Verify cấu hình mạng
Trên Node 1, kiểm tra khả năng kết nối đến Node 2 và Node 3:
ping -c 3 cockroach-node2 && ping -c 3 cockroach-node3
Kết quả mong đợi: Có phản hồi "3 packets transmitted, 3 packets received, 0% packet loss" cho cả hai lệnh.
Tạo người dùng hệ thống chuyên dụng cho CockroachDB
Tạo user và group
Không bao giờ chạy CockroachDB dưới quyền root. Chúng ta sẽ tạo một user hệ thống không đăng nhập được (non-login) để đảm bảo bảo mật.
Thực hiện trên cả 3 node:
sudo useradd --system --no-create-home --shell /bin/false cockroach
Lệnh này tạo user "cockroach", đặt nó là system user, không tạo home directory và không cho phép đăng nhập shell.
Cấu hình giới hạn tài nguyên (ulimit)
CockroachDB cần mở nhiều file descriptor (fd) để xử lý kết nối mạng và file. Mặc định Linux giới hạn 1024 fd, chưa đủ. Cần cấu hình trong systemd hoặc PAM.
Chỉnh sửa file /etc/systemd/system/cockroach.service (sẽ tạo trong phần sau, nhưng cần cấu hình ulimit ngay từ đầu trong file config của user hoặc systemd override). Cách chuẩn nhất là tạo file override systemd:
sudo mkdir -p /etc/systemd/system/cockroach.service.d
sudo nano /etc/systemd/system/cockroach.service.d/override.conf
Dán nội dung sau vào file override.conf:
[Service]
LimitNOFILE=1000000
LimitNPROC=1000000
Khởi động lại systemd daemon để áp dụng:
sudo systemctl daemon-reexec
Đảm bảo user cockroach có quyền truy cập vào thư mục dữ liệu sau này (thường là /var/lib/cockroach):
sudo mkdir -p /var/lib/cockroach && sudo chown cockroach:cockroach /var/lib/cockroach
Verify người dùng và giới hạn
Kiểm tra thông tin user:
id cockroach
Kết quả mong đợi: uid=999(cockroach) gid=999(cockroach) groups=999(cockroach).
Kiểm tra thư mục dữ liệu:
ls -ld /var/lib/cockroach
Kết quả mong đợi: Thuộc quyền sở hữu của user cockroach (drwxr-xr-x ... cockroach cockroach).
Điều hướng series:
Mục lục: Series: Triển khai Database phân tán an toàn với CockroachDB và Ubuntu 24.04
Phần 2: Cài đặt CockroachDB và cấu hình bảo mật cơ bản »