Khởi động Topology Server với Vitess Etcd Local Mode
1. Chuẩn bị thư mục dữ liệu và khởi động Etcd
Chúng ta cần khởi động một instance Etcd đơn giản chạy trên localhost để lưu trữ cấu hình topology (VSchema, Shard, Tablet) cho cụm Vitess.
Tạo thư mục data riêng để Etcd lưu trữ, sau đó chạy Etcd với chế độ local (không cần cluster mode) và chỉ định port mặc định.
sudo mkdir -p /var/lib/vitess/etcd
sudo chown $USER:$USER /var/lib/vitess/etcd
etcd --data-dir=/var/lib/vitess/etcd \
--listen-client-urls=http://127.0.0.1:2379 \
--advertise-client-urls=http://127.0.0.1:2379 \
--listen-peer-urls=http://127.0.0.1:2380 \
--initial-advertise-peer-urls=http://127.0.0.1:2380 \
--initial-cluster="default=http://127.0.0.1:2380" \
--name=default
Kết quả mong đợi: Etcd chạy ở background, không báo lỗi, và lắng nghe trên port 2379. Bạn có thể kiểm tra bằng lệnh curl http://127.0.0.1:2379/version để thấy thông tin version.
2. Cấu hình biến môi trường cho Vitess
Các công cụ của Vitess (vtctl, vtgate, vttablet) cần biết đường dẫn đến Topology Server. Chúng ta sẽ set biến môi trường này ngay lập tức.
export VITESS_TOPOLOGY_TYPE=etcd2
export VITESS_TOPOLOGY_GLOBAL_SERVER=127.0.0.1:2379
export VITESS_TOPOLOGY_ROOT=/vitess
Kết quả mong đợi: Các biến môi trường được set trong session hiện tại. Tất cả các lệnh sau đều sử dụng các biến này để kết nối đến Etcd.
Khởi động Cluster Vitess trên một Node duy nhất
3. Khởi động vttablet (Node dữ liệu MySQL)
Chúng ta sẽ khởi động một vttablet đóng vai trò là node lưu trữ dữ liệu MySQL và quản lý một tablet cụ thể (ví dụ: tablet-0). Tablet này sẽ nằm trong Cell "local" và Shard "0".
Chạy lệnh khởi động vttablet với các tham số cần thiết: Cell, TabletAlias, MySQL port, và Topology.
vttablet \
--port 15999 \
--tablet_alias local-0000000100 \
--tablet_hostname localhost \
--tablet_cell local \
--tablet_type primary \
--keyspace test_keyspace \
--shard 0 \
--mysql_port 3306 \
--mysql_unix_socket /var/run/mysqld/mysqld.sock \
--topo_implementation etcd2 \
--topo_global_server_address 127.0.0.1:2379 \
--topo_global_root /vitess \
--debug
Kết quả mong đợi: vttablet khởi động thành công, tạo tiến trình lắng nghe trên port 15999. Log sẽ hiển thị "Ready to accept connections". Nếu MySQL chưa chạy, hãy đảm bảo MySQL đã được khởi động trước.
4. Khởi động vtgate (Cổng giao tiếp)
Vtgate đóng vai trò là trình điều hướng (router) và gateway duy nhất để ứng dụng kết nối vào cụm Vitess. Nó sẽ nhận query và phân tán đến vttablet.
Chạy vtgate với tham số chỉ định Cell và Port. Không cần cấu hình phức tạp cho mode local.
vtgate \
--port 15999 \
--cell local \
--topo_implementation etcd2 \
--topo_global_server_address 127.0.0.1:2379 \
--topo_global_root /vitess \
--debug
Kết quả mong đợi: vtgate khởi động, log hiển thị "vtgate is ready". Nó sẽ tự động phát hiện vttablet đã khởi động ở bước trước thông qua topology.
5. Khởi động vtctld (Giao diện quản trị API)
Để thực hiện các lệnh quản trị (init-shard, re-parent) một cách tiện lợi, chúng ta cần khởi động vtctld (VTCTL daemon) để mở API HTTP/REST.
vtctld \
--port 15000 \
--topo_implementation etcd2 \
--topo_global_server_address 127.0.0.1:2379 \
--topo_global_root /vitess \
--debug
Kết quả mong đợi: vtctld chạy trên port 15000. Bạn có thể truy cập giao diện web tại http://127.0.0.1:15000 để xem dashboard.
Thiết lập Shard và Parenting
6. Thực hiện Init-Shard
Trước khi có thể sử dụng dữ liệu, chúng ta phải khai báo Keyspace và Shard trong Topology Server. Lệnh này tạo cấu trúc logic cho dữ liệu.
Sử dụng công cụ vtctlclient (CLI wrapper) để gọi lệnh InitShard.
vtctlclient InitShard test_keyspace 0 --cell local
Kết quả mong đợi: Lệnh trả về thông báo thành công. Trong Etcd, cấu trúc đường dẫn /vitess/keyspaces/test_keyspace/shards/0 đã được tạo.
7. Thực hiện Re-parenting (Tạo Primary)
Vitess cần biết tablet nào là Primary (Master) cho Shard "0". Chúng ta dùng lệnh ReparentShard để chỉ định tablet-0000000100 làm Primary.
Lệnh này sẽ tự động kích hoạt MySQL replication (nếu có) và cập nhật trạng thái topology.
vtctlclient ReparentShard test_keyspace/0 --cells local --new_primary local-0000000100
Kết quả mong đợi: Log hiển thị quá trình reparenting thành công, xác nhận tablet-0000000100 là Primary của Shard 0. Trạng thái trong vtctld dashboard sẽ chuyển sang "Primary".
Kiểm tra Trạng thái và Kết nối
8. Kiểm tra trạng thái Tablet
Để xác minh rằng mọi thứ đã đồng bộ chính xác, chúng ta liệt kê tất cả tablet trong Keyspace.
vtctlclient ListTablets test_keyspace
Kết quả mong đợi: Đầu ra hiển thị một dòng chứa thông tin tablet, bao gồm alias, cell, tablet_type (phải là "primary"), và trạng thái "Running".
9. Kết nối MySQL qua vtgate
Bước cuối cùng là kiểm tra khả năng đọc/ghi dữ liệu thông qua vtgate. Chúng ta dùng trình khách MySQL để kết nối vào port của vtgate (15999 trong cấu hình trên).
Lưu ý: Nếu bạn dùng vtgate cho mục đích test, hãy đảm bảo user MySQL root có quyền truy cập. Ở đây ta dùng socket hoặc localhost.
mysql -h 127.0.0.1 -P 15999 -u root -p test_keyspace
Kết quả mong đợi: Kết nối thành công, prompt chuyển sang mysql>. Bạn có thể chạy lệnh SHOW TABLES; (sẽ trả về rỗng nếu chưa tạo schema) hoặc CREATE TABLE test (id int); để kiểm tra ghi dữ liệu.
10. Verify VSchema
Kiểm tra VSchema đã được lưu trong topology chưa. Mặc định Vitess dùng VSchema rỗng (no sharding) nếu chưa định nghĩa.
vtctlclient GetVSchema test_keyspace
Kết quả mong đợi: Đầu ra hiển thị JSON chứa cấu trúc VSchema mặc định, xác nhận Keyspace đã được nhận diện và sẵn sàng cho việc định nghĩa Schema phức tạp hơn ở các phần sau.
Đ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
Phần 4: Triển khai kiến trúc Geo-distributed với nhiều Cell và Region »