Yêu cầu phần cứng và cấu hình Network cho kiến trúc Geo-distributed
Để triển khai kiến trúc phân tán địa lý (Geo-distributed) với Vitess, bạn cần chuẩn bị tối thiểu 3 node vật lý hoặc máy ảo (VM) riêng biệt, mỗi node đại diện cho một Region hoặc Cell khác nhau.
Mỗi node cần cấu hình tối thiểu: 4 vCPU, 8GB RAM, và 100GB SSD NVMe để đảm bảo hiệu năng ghi đọc cho MySQL backend.
Mạng lưới (Network) cần được cấu hình sao cho các node có thể ping thông nhau qua cả Private IP và Public IP (nếu cần route xuyên region).
Các cổng bắt buộc phải mở trên firewall của từng node: 15999 (Vitess Gateway), 15000-15999 (Vttablet ports), 3306 (MySQL), và 15999 (Vtgate).
Verify kết quả: Chạy lệnh ping từ node này sang node kia để đảm bảo connectivity.
ping -c 3 192.168.1.10
Kết quả mong đợi: 3 packets transmitted, 3 received, 0% packet loss.
Cài đặt các gói phụ thuộc trên Ubuntu 24.04
Bước đầu tiên là nâng cấp hệ thống và cài đặt các công cụ nền tảng như Docker, Go (golang), và client MySQL.
Cài đặt Docker Engine để chạy các container MySQL và các thành phần Vitess trong môi trường kiểm thử hoặc production containerized.
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
Kết quả mong đợi: Docker được cài đặt thành công và service docker chạy tự động.
Verify Docker:
docker --version
Kết quả mong đợi: Hiển thị phiên bản Docker Engine (ví dụ: Docker version 24.0.x).
Cài đặt Go (Golang) để biên dịch Vitess từ source code nếu cần tùy chỉnh hoặc để chạy các công cụ CLI.
sudo apt install -y golang-go golang-golang-lint
Kết quả mong đợi: Go được cài đặt vào thư mục /usr/lib/go.
Verify Go:
go version
Kết quả mong đợi: Hiển thị phiên bản Go (ví dụ: go version go1.22.x linux/amd64).
Cài đặt MySQL client để tương tác trực tiếp với database backend mà Vitess đang quản lý.
sudo apt install -y mysql-client
Kết quả mong đợi: Package mysql-client được cài đặt.
Verify MySQL client:
mysql --version
Kết quả mong đợi: Hiển thị phiên bản client MySQL (ví dụ: mysql Ver 8.0.35 for linux-gnu).
Cấu hình hostname và file /etc/hosts
Vitess dựa vào hostname để định danh các node (Cell, Tablet, Zone). Việc cấu hình đúng hostname và mapping IP là bắt buộc.
Đặt hostname cho từng node theo định dạng: cell-id-node-id (ví dụ: cell1-node1, cell2-node1).
Thực hiện trên từng node riêng biệt. Giả sử IP của node 1 là 192.168.1.10, node 2 là 192.168.1.11, node 3 là 192.168.1.12.
Trên Node 1 (Cell1-Node1):
sudo hostnamectl set-hostname cell1-node1
Kết quả mong đợi: Hostname của node 1 được đổi thành cell1-node1.
Sửa file /etc/hosts trên Node 1 để mapping tất cả các node trong cụm:
cat > /etc/hosts
Kết quả mong đợi: File /etc/hosts được ghi đè với nội dung mapping IP đúng.
Thực hiện tương tự cho Node 2 và Node 3, đảm bảo mỗi node đều có file /etc/hosts chứa mapping của tất cả các node còn lại.
Verify kết quả: Chạy lệnh ping với tên hostname thay vì IP.
ping -c 2 cell2-node1
Kết quả mong đợi: Ping thành công thông qua hostname, không báo lỗi "unknown host".
Tải và cài đặt Vitess từ Source Code
Để có phiên bản mới nhất và đầy đủ các tính năng, chúng ta sẽ tải và build Vitess từ source code chính thức.
Tạo thư mục làm việc và clone repository Vitess từ GitHub.
mkdir -p ~/vitess && cd ~/vitess && git clone https://github.com/vitessio/vitess.git .
Kết quả mong đợi: Repository Vitess được tải về thư mục ~/vitess.
Build binary Vitess. Lệnh này sẽ tạo ra các binary cần thiết như vttablet, vtgate, vtctl, vtorc, vtdiff, vtbackup, vtcombo, vtctld, vttablet, vtgate, vtadmin.
make build
Kết quả mong đợi: Quá trình build hoàn tất, không có lỗi, tạo ra thư mục ./vt/bin chứa các binary.
Copy các binary vào thư mục /usr/local/bin để có thể chạy từ bất kỳ đâu trên hệ thống.
sudo cp vt/bin/* /usr/local/bin/
Kết quả mong đợi: Các binary Vitess được sao chép vào /usr/local/bin.
Verify kết quả: Kiểm tra phiên bản của các công cụ chính.
vtctl --version
Kết quả mong đợi: Hiển thị phiên bản Vitess (ví dụ: vtctl version 20.0.0).
vttablet --version
Kết quả mong đợi: Hiển thị phiên bản Vitess tương ứng.
vtgate --version
Kết quả mong đợi: Hiển thị phiên bản Vitess tương ứng.
Điều hướng series:
Mục lục: Series: Triển khai Database Geo-distributed với Vitess trên Ubuntu 24.04
Phần 2: Thiết lập kiến trúc sơ đồ Shard và định nghĩa Schema ban đầu »