Xác định yêu cầu phần cứng cho cụm TiDB phân tán
Tính toán tài nguyên CPU và RAM tối thiểu
TiDB là hệ thống phân tán, do đó mỗi thành phần (PD, TiKV, TiDB Server) tiêu thụ tài nguyên khác nhau. Đối với môi trường Multi-Cloud, bạn cần chuẩn bị tài nguyên dư dự phòng (over-provisioning) ít nhất 20% để xử lý các biến động lưu lượng mạng giữa các vùng.
Yêu cầu tối thiểu cho một node đóng vai trò TiKV (lưu trữ dữ liệu):
- CPU: Tối thiểu 4 vCPU (trên thực tế nên dùng 8 vCPU để giảm latency khi đồng bộ dữ liệu).
- RAM: Tối thiểu 16GB. TiKV sử dụng khoảng 50% RAM cho block cache, nên cần RAM dư để OS hoạt động.
- Disk I/O: Đây là yếu tố sống còn. TiKV cần IOPS cao. Không sử dụng HDD thông thường.
Yêu cầu cho node PD (Placement Driver - điều phối):
- CPU: 2 vCPU.
- RAM: 4GB.
- Disk: SSD NVMe với dung lượng nhỏ (50GB đủ cho metadata).
Yêu cầu cho node TiDB Server (giao diện MySQL):
- CPU: 2 vCPU.
- RAM: 4GB (tùy thuộc vào query plan cache).
- Disk: Không yêu cầu cao, dùng cho log.
Kết quả mong đợi: Bạn có danh sách cấu hình phần cứng cụ thể để đặt mua hoặc khởi tạo VM trên các Cloud Provider (AWS, GCP, Azure, v.v.).
Đảm bảo hiệu năng Disk I/O và mạng
Trước khi cài đặt, bạn cần kiểm tra khả năng I/O của ổ đĩa. TiDB sẽ không hoạt động ổn định nếu I/O bị nghẽn cổ chai (bottleneck).
Thực hiện kiểm tra tốc độ ghi/đọc của ổ đĩa SSD NVMe (giả sử là /dev/nvme0n1) sử dụng công cụ fio:
sudo apt update && sudo apt install -y fio
Kết quả mong đợi: Cài đặt thành công công cụ kiểm tra hiệu năng fio.
Thực hiện test write tốc độ cao với block size 4K (đặc trưng cho workload transactional của TiDB):
fio --name=write_test --ioengine=libaio --iodepth=32 --rw=write --bs=4k --direct=1 --size=2G --numjobs=4 --runtime=60 --group_reporting --filename=/mnt/data/test_fio
Kết quả mong đợi: Trong output, dòng "write bw" phải đạt ít nhất 300MB/s cho mỗi node TiKV. Nếu thấp hơn, cần nâng cấp loại ổ đĩa (SSD NVMe) hoặc kiểm tra cấu hình Cloud Block Storage.
Đảm bảo độ trễ mạng (latency) giữa các vùng (Region) nơi đặt các node. TiDB hoạt động tốt nhất khi latency < 5ms nội vùng. Đối với Multi-Cloud Cross-Region, latency có thể lên đến 50-100ms, cần cấu hình topology-aware scheduling sau này.
Cài đặt và cấu hình cơ bản Ubuntu 24.04
Cập nhật hệ thống và cài đặt gói công cụ cần thiết
Trên tất cả các máy chủ (nodes) trong cụm, thực hiện lệnh cập nhật repository và cài đặt các gói hệ thống cơ bản. Ubuntu 24.04 sử dụng systemd và kernel mới, cần đảm bảo các công cụ mạng và build essential đã có.
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Hệ thống được cập nhật lên phiên bản kernel và package mới nhất.
Cài đặt các gói công cụ cần thiết cho việc quản lý server và chạy TiDB Operator sau này:
sudo apt install -y vim curl wget git htop net-tools sysstat nfs-common
Kết quả mong đợi: Các công cụ như vim, curl, wget, htop, net-tools, sysstat, nfs-common được cài đặt thành công.
Cấu hình swap file (bộ nhớ ảo). Mặc định TiDB khuyến nghị tắt swap để tránh latency không kiểm soát, nhưng trong quá trình setup ban đầu hoặc khi RAM thấp, cần có swap để OS không bị OOM Killer kill các tiến trình quan trọng. Sau khi cụm ổn định, bạn sẽ tắt swap.
Tạo file swap 4GB:
sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
Kết quả mong đợi: File /swapfile được tạo và kích hoạt. Kiểm tra bằng lệnh `free -h` sẽ thấy cột SWAP có giá trị 4.0G.
Thêm vào fstab để mount swap tự động khi khởi động lại:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Kết quả mong đợi: Swap được cấu hình vĩnh viễn trong file /etc/fstab.
Điều chỉnh tham số Kernel (sysctl) cho hiệu năng mạng
Ubuntu 24.04 mặc định có các tham số mạng chưa tối ưu cho các cụm dữ liệu phân tán có lượng kết nối đồng thời lớn (high concurrency) như TiDB. Cần tăng giới hạn file descriptor và điều chỉnh TCP stack.
Sửa file cấu hình sysctl tại /etc/sysctl.conf hoặc tạo file mới tại /etc/sysctl.d/99-tidb.conf:
cat > /etc/sysctl.d/99-tidb.conf
Kết quả mong đợi: File /etc/sysctl.d/99-tidb.conf được tạo với nội dung tối ưu hóa mạng.
Áp dụng các thay đổi ngay lập tức:
sudo sysctl --system
Kết quả mong đợi: Lệnh chạy xong không báo lỗi, các tham số kernel đã được cập nhật vào runtime.
Thiết lập giới hạn tài nguyên (ulimit) cho user
Để TiDB có thể mở hàng triệu kết nối và file descriptors, cần cấu hình ulimit cho user chạy dịch vụ (thường là root hoặc user chuyên biệt như 'tidb').
Sửa file /etc/security/limits.conf để tăng giới hạn nofile (số file mở) và nproc (số tiến trình):
cat >> /etc/security/limits.conf
Kết quả mong đợi: Các dòng giới hạn mới được thêm vào cuối file /etc/security/limits.conf.
Để thay đổi này có hiệu lực ngay lập tức cho session hiện tại (nếu đang login bằng root), chạy lệnh:
ulimit -n 1000000 && ulimit -u 1000000
Kết quả mong đợi: Giới hạn file mở và số tiến trình trong session hiện tại được nâng lên 1000000. Kiểm tra bằng lệnh `ulimit -a`.
Cấu hình Firewall, SSH Key và quyền truy cập giữa các nút
Thiết lập SSH Keyless Authentication giữa các node
Trong môi trường Multi-Cloud, việc gõ mật khẩu khi kết nối giữa các node (từ TiDB Server sang TiKV, từ TiKV sang PD) là không khả thi. Cần cấu hình SSH Key-based authentication để các node tự động kết nối qua nhau.
Tạo cặp khóa SSH mới (nếu chưa có) với thuật toán ed25519 (an toàn và nhanh hơn RSA):
ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N ""
Kết quả mong đợi: Cặp khóa public và private được tạo tại /root/.ssh/. Không có passphrase (để tự động hóa).
Sao chép khóa public sang tất cả các node khác trong cụm. Giả sử bạn đang ở node master và cần copy sang node-slave1 (IP 192.168.1.101) và node-slave2 (IP 192.168.1.102). Lệnh ssh-copy-id sẽ tự động thêm public key vào file authorized_keys của remote.
Thực hiện cho từng node (thay thế IP và username tương ứng, ở đây dùng root):
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.101
ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.102
Kết quả mong đợi: Yêu cầu mật khẩu của remote node lần đầu, sau khi nhập đúng, thông báo "Number of key(s) added: 1".
Để đảm bảo kết nối không yêu cầu xác nhận "Are you sure you want to continue connecting (yes/no)?", thêm tất cả IP của cụm vào file known_hosts của node master:
for ip in 192.168.1.101 192.168.1.102; do ssh-keyscan -H $ip >> /root/.ssh/known_hosts 2>/dev/null; done
Kết quả mong đợi: File /root/.ssh/known_hosts được cập nhật, khi SSH đến các IP này sẽ không còn cảnh báo host key.
Test kết nối SSH không cần mật khẩu:
ssh root@192.168.1.101 "hostname && exit"
ssh root@192.168.1.102 "hostname && exit"
Kết quả mong đợi: Lệnh chạy thành công, hiển thị hostname của node đích và thoát ngay lập tức mà không hỏi mật khẩu.
Cấu hình UFW Firewall cho TiDB Cluster
Ubuntu 24.04 mặc định sử dụng UFW (Uncomplicated Firewall). Cần cấu hình UFW để cho phép lưu thông các port quan trọng của TiDB giữa các node trong cụm, đồng thời chặn truy cập từ bên ngoài không cần thiết.
Các port cần mở nội bộ cụm:
- 2379, 2380: PD Client và Peer ports.
- 20160, 20170, 20180: TiKV Client, Peer, và Status ports.
- 4000: TiDB Server port (chỉ mở nếu cần truy cập từ ngoài, hoặc mở nội bộ).
- 10080: Dashboard port (PD Dashboard).
Cho phép kết nối SSH (port 22) từ subnet quản trị (ví dụ: 10.0.0.0/8):
sudo ufw default deny incoming
sudo ufw allow from 10.0.0.0/8 to any port 22
Kết quả mong đợi: UFW được kích hoạt với chính sách mặc định từ chối tất cả, chỉ cho phép SSH từ subnet quản trị.
Cấu hình cho phép lưu thông nội bộ giữa các node TiDB (giả sử IP của các node là 192.168.1.101, 192.168.1.102, 192.168.1.103). Bạn cần mở các port trên cho subnet nội bộ:
sudo ufw allow from 192.168.1.0/24 to any port 2379,2380,20160,20170,20180,4000,10080 proto tcp
Kết quả mong đợi: Các port TiDB được mở cho lưu thông nội bộ subnet 192.168.1.0/24.
Kích hoạt UFW:
sudo ufw enable
Kiểm tra trạng thái firewall:
sudo ufw status verbose
Kết quả mong đợi: Output hiển thị "Status: active", "Default: deny (incoming), allow (outgoing)", và liệt kê các quy tắc đã thêm cho SSH và các port TiDB.
Verify kết quả toàn bộ môi trường
Sau khi hoàn thành các bước trên trên tất cả các node, thực hiện kiểm tra tổng thể để đảm bảo môi trường sẵn sàng cho việc cài đặt Kubernetes và TiDB Operator.
Kiểm tra lại các tham số kernel quan trọng:
sysctl fs.file-max net.ipv4.ip_local_port_range net.core.somaxconn
Kết quả mong đợi: fs.file-max >= 1000000, ip_local_port_range bắt đầu từ 1024, somaxconn >= 65535.
Kiểm tra lại giới hạn ulimit của user root:
ulimit -n && ulimit -u
Kết quả mong đợi: Cả hai giá trị đều >= 1000000.
Kiểm tra khả năng kết nối mạng giữa các node thông qua các port TiDB:
for port in 2379 2380 20160 20170; do nc -zv 192.168.1.101 $port; done
Kết quả mong đợi: Lệnh nc (netcat) trả về "succeeded" cho tất cả các port, chứng tỏ firewall đã cho phép và kết nối TCP đã thiết lập được. (Lưu ý: Nếu chưa chạy TiDB, port có thể đóng, nhưng firewall không chặn kết nối TCP handshake, bạn sẽ thấy "Connection refused" thay vì "timed out". "Timed out" nghĩa là bị firewall chặn).
Verify quyền SSH từ node master sang node worker:
ssh root@192.168.1.101 "sudo systemctl status | head -n 1"
Kết quả mong đợi: Lệnh chạy thành công và trả về trạng thái systemd của node đích mà không cần nhập mật khẩu.
Điều hướng series:
Mục lục: Series: Triển khai Database Multi-Cloud với TiDB và Ubuntu 24.04
Phần 2: Cài đặt TiDB Operator và Kubernetes trên Ubuntu 24.04 »