1. Cấu hình Topology Server riêng biệt cho từng Region
Mục tiêu: Thiết lập hai topology server độc lập để quản lý metadata của hai region US-East và EU-West, ngăn cách dữ liệu cấu hình giữa các vùng địa lý.
Việc tách biệt topology server giúp giảm độ trễ truy cập metadata trong từng region và đảm bảo tính sẵn sàng cao (High Availability) cục bộ. Mỗi region sẽ có một instance Vitess riêng biệt kết nối với topology server của nó.
Bước đầu tiên là khởi tạo kho lưu trữ metadata cho region US-East trên máy chủ master của region này.
mkdir -p /home/vt/data/topo/US-EAST
chmod 755 /home/vt/data/topo/US-EAST
Kết quả mong đợi: Thư mục được tạo thành công với quyền truy cập đúng chuẩn, sẵn sàng lưu trữ file metadata JSON.
Tiếp theo, khởi tạo kho lưu trữ metadata cho region EU-West trên máy chủ master của region đó.
mkdir -p /home/vt/data/topo/EU-WEST
chmod 755 /home/vt/data/topo/EU-WEST
Kết quả mong đợi: Thư mục metadata cho EU-West được tạo ra độc lập, không ảnh hưởng đến US-East.
Bây giờ, khởi động topology server cho region US-East sử dụng backend file với đường dẫn đã tạo.
vttopo server --topo_implementation=file --topo_global_server_name=US-EAST-global --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_server_name=US-EAST-local --topo_local_root=/home/vt/data/topo/US-EAST --web_port 15000 --port 15001 --log_dir /var/log/vitess/US-EAST --alsologtostderr
Kết quả mong đợi: Dịch vụ topology server chạy trên cổng 15000 (web) và 15001 (gRPC) cho region US-East, log ghi vào thư mục /var/log/vitess/US-EAST.
Khởi động topology server cho region EU-West tương tự, đảm bảo các tham số global và local root trỏ vào đúng thư mục của EU-West.
vttopo server --topo_implementation=file --topo_global_server_name=EU-WEST-global --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_server_name=EU-WEST-local --topo_local_root=/home/vt/data/topo/EU-WEST --web_port 25000 --port 25001 --log_dir /var/log/vitess/EU-WEST --alsologtostderr
Kết quả mong đợi: Topology server thứ hai chạy độc lập trên cổng 25000/25001, phục vụ region EU-West.
Verify kết quả bằng cách truy cập giao diện web của cả hai topology server từ trình duyệt hoặc sử dụng lệnh curl.
curl http://localhost:15000/status
curl http://localhost:25000/status
Kết quả mong đợi: Nhận được JSON chứa thông tin trạng thái "OK" từ cả hai địa chỉ IP tương ứng, xác nhận cả hai topology server đang hoạt động.
2. Triển khai vttablet và vtgate cho từng Cell với cấu hình Cross-Cell
Mục tiêu: Khởi động các node vttablet (chứa dữ liệu) và vtgate (gateway query) trong mỗi cell, cấu hình để chúng nhận diện cell name và kết nối đúng topology server.
Cấu hình cross-cell yêu cầu mỗi tablet và gate phải biết cell name của mình để đăng ký vào đúng namespace trong topology server, đồng thời biết địa chỉ topology server của cell đó.
Tạo file cấu hình cho vttablet đầu tiên thuộc Cell US-East (shard -80).
cat > /home/vt/config/vttablet_US-EAST_0000000100.yaml
Kết quả mong đợi: File cấu hình YAML được tạo với đầy đủ thông số định danh cell US-East và shard -80.
Khởi động vttablet US-East dựa trên file cấu hình vừa tạo.
vttablet --tablet_path=/home/vt/data/tablets/US-EAST-0000000100 --config-file=/home/vt/config/vttablet_US-EAST_0000000100.yaml --tablet_alias=US-EAST-0000000100 --keyspace=commerce --shard=-80 --tablet_type=PRIMARY --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST --port=15001 --grpc_port=15002 --mysql_port=3306 --log_dir=/var/log/vitess/US-EAST/vttablet --alsologtostderr
Kết quả mong đợi: vttablet chạy và đăng ký thông tin vào topology server US-East, trạng thái là PRIMARY.
Tạo file cấu hình cho vttablet thứ hai thuộc Cell EU-West (shard -80) để song song với US-East.
cat > /home/vt/config/vttablet_EU-WEST_0000000100.yaml
Kết quả mong đợi: File cấu hình cho EU-West được tạo, định danh là REPLICA để mô phỏng kiến trúc replication cross-region.
Khởi động vttablet EU-West.
vttablet --tablet_path=/home/vt/data/tablets/EU-WEST-0000000100 --config-file=/home/vt/config/vttablet_EU-WEST_0000000100.yaml --tablet_alias=EU-WEST-0000000100 --keyspace=commerce --shard=-80 --tablet_type=REPLICA --topo_implementation=file --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_root=/home/vt/data/topo/EU-WEST --port=25001 --grpc_port=25002 --mysql_port=3306 --log_dir=/var/log/vitess/EU-WEST/vttablet --alsologtostderr
Kết quả mong đợi: vttablet EU-West chạy và đăng ký vào topology server EU-West với vai trò REPLICA.
Bây giờ triển khai vtgate cho Cell US-East để đóng vai trò gateway chính.
vtgate --cell=US-EAST --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST --port=15999 --grpc_port=15999 --log_dir=/var/log/vitess/US-EAST/vtgate --alsologtostderr --keyspace=commerce
Kết quả mong đợi: vtgate US-East khởi động thành công, lắng nghe trên cổng 15999 và tự động discovery các tablet trong cell US-East.
Triển khai vtgate cho Cell EU-West.
vtgate --cell=EU-WEST --topo_implementation=file --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_root=/home/vt/data/topo/EU-WEST --port=25999 --grpc_port=25999 --log_dir=/var/log/vitess/EU-WEST/vtgate --alsologtostderr --keyspace=commerce
Kết quả mong đợi: vtgate EU-West khởi động trên cổng 25999, chỉ thấy các tablet trong cell EU-West.
Verify kết quả bằng cách kiểm tra trạng thái của các tablet và gate thông qua vtctlclient của từng region.
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST ListTablets commerce
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_root=/home/vt/data/topo/EU-WEST ListTablets commerce
Kết quả mong đợi: Lệnh đầu tiên trả về danh sách tablet US-EAST-0000000100, lệnh thứ hai trả về EU-WEST-0000000100, xác nhận sự tách biệt rõ ràng.
3. Cấu hình Tablet Keyspace và Shard Mapping cho các vùng địa lý
Mục tiêu: Định nghĩa lược đồ keyspace và shard mapping trong topology server để Vitess hiểu cách phân phối dữ liệu giữa các cell.
Trong kiến trúc Geo-distributed, chúng ta cần cấu hình keyspace để chỉ định shard nào nằm ở cell nào. Điều này được thực hiện thông qua file "Keyspace" và "Shard" trong topology server.
Sử dụng vtctlclient để tạo keyspace "commerce" trong topology server của US-East (đóng vai trò global coordinator ban đầu).
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST CreateKeyspace commerce --shards="-80,80-"
Kết quả mong đợi: Keyspace "commerce" được tạo với hai shard mặc định: "-80" và "80-".
Định nghĩa shard mapping cụ thể cho cell US-East. Chúng ta sẽ chỉ định shard "-80" nằm tại cell US-East.
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST SetShardCell commerce -80 US-EAST
Kết quả mong đợi: Shard "-80" của keyspace commerce được gắn nhãn thuộc về cell US-East trong metadata.
Định nghĩa shard mapping cho cell EU-West. Shard "80-" sẽ được đặt tại cell EU-West để phân tán dữ liệu.
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST SetShardCell commerce 80- EU-WEST
Kết quả mong đợi: Shard "80-" được gắn nhãn thuộc về cell EU-West. Lưu ý: Lệnh này được thực thi trên topology server US-East để đồng bộ global view, hoặc thực thi trên EU-West nếu cấu hình replication metadata.
Tạo file cấu hình keyspace cho EU-West nếu cần đồng bộ manual, đảm bảo cấu trúc JSON trong topology server EU-West phản ánh đúng shard mapping.
cat > /home/vt/data/topo/EU-WEST/keyspaces/commerce.json
Kết quả mong đợi: File JSON mô tả mapping shard-cell được ghi vào topology server EU-West, giúp các node EU-West hiểu được vị trí của shard.
Cấu hình tablet US-East để phục vụ shard "-80" và tablet EU-West phục vụ shard "80-" bằng cách cập nhật thông tin trong topology.
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST RebuildKeyspaceGraph commerce
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_root=/home/vt/data/topo/EU-WEST RebuildKeyspaceGraph commerce
Kết quả mong đợi: Lệnh RebuildKeyspaceGraph cập nhật graph phân tán, đảm bảo vtgate ở cả hai region nhận diện được shard mapping mới.
Verify kết quả bằng cách kiểm tra thông tin keyspace và shard trong topology server.
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST ShowKeyspace commerce
vtctlclient --topo_implementation=file --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_root=/home/vt/data/topo/EU-WEST ShowKeyspace commerce
Kết quả mong đợi: Output hiển thị cấu trúc keyspace với thông tin Cell được gắn vào từng Shard tương ứng (US-EAST cho -80, EU-WEST cho 80-).
4. Thiết lập kết nối giữa các Cell thông qua vtgate và Tablet Discovery
Mục tiêu: Cấu hình vtgate để có thể phát hiện và định tuyến query đến các tablet nằm ở cell khác (Cross-cell routing).
Trong kiến trúc Geo-distributed, vtgate cần cấu hình "CellAlias" và "Cell" để biết cách kết nối đến topology server của các cell khác, hoặc sử dụng chế độ "Global" để quản lý traffic toàn cầu.
Cấu hình vtgate US-East để nhận diện cell EU-West. Chúng ta cần chỉ định thông số --cell để vtgate biết nó đang ở đâu và --cells để nó biết về các cell khác.
vtgate --cell=US-EAST --topo_implementation=file --topo_global_root=/home/vt/data/topo/US-EAST --topo_local_root=/home/vt/data/topo/US-EAST --cells=US-EAST,EU-WEST --port=15999 --grpc_port=15999 --log_dir=/var/log/vitess/US-EAST/vtgate --alsologtostderr --keyspace=commerce
Kết quả mong đợi: vtgate US-East khởi động lại với khả năng nhìn thấy metadata của cả US-EAST và EU-WEST (nếu topology server US-East có dữ liệu này).
Cấu hình vtgate EU-West tương tự để nó có thể nhìn thấy cell US-East.
vtgate --cell=EU-WEST --topo_implementation=file --topo_global_root=/home/vt/data/topo/EU-WEST --topo_local_root=/home/vt/data/topo/EU-WEST --cells=EU-WEST,US-EAST --port=25999 --grpc_port=25999 --log_dir=/var/log/vitess/EU-WEST/vtgate --alsologtostderr --keyspace=commerce
Kết quả mong đợi: vtgate EU-West khởi động lại, sẵn sàng định tuyến query đến cả hai cell.
Để đảm bảo tablet discovery hoạt động xuyên cell, cần cấu hình tablet để chúng biết về các cell khác nếu cần replication hoặc read cross-region. Tuy nhiên, với mô hình shard mapping đã cấu hình ở phần 3, vtgate sẽ tự động định tuyến.
Kiểm tra khả năng định tuyến cross-cell bằng cách thực hiện một truy vấn SELECT trên vtgate US-East để đọc dữ liệu từ shard nằm ở EU-West.
mysql -h localhost -P 15999 -u vttest -p -D commerce -e "SELECT * FROM user WHERE user_id > 1000;"
Kết quả mong đợi: Query được thực thi thành công. Nếu dữ liệu > 1000 nằm ở shard "80-" (EU-WEST), vtgate US-East sẽ tự động chuyển tiếp query qua mạng đến vttablet EU-WEST và trả về kết quả.
Thực hiện kiểm tra ngược lại từ vtgate EU-West để đọc dữ liệu từ shard nằm ở US-East.
mysql -h localhost -P 25999 -u vttest -p -D commerce -e "SELECT * FROM user WHERE user_id
Kết quả mong đợi: Query thành công, vtgate EU-West định tuyến query đến shard "-80" (US-EAST) và lấy dữ liệu về.
Verify kết quả cuối cùng bằng cách kiểm tra log của vtgate để xem các query cross-cell có được ghi nhận không.
grep "cross-cell" /var/log/vitess/US-EAST/vtgate/*.log
grep "cross-cell" /var/log/vitess/EU-WEST/vtgate/*.log
Kết quả mong đợi: Các dòng log ghi nhận việc định tuyến query đến các tablet ở cell khác (US-EAST -> EU-WEST và ngược lại), xác nhận kiến trúc Geo-distributed đã hoạt độ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 3: Khởi động cụm Vitess đơn Cell với mode local để kiểm thử
Phần 5: Cấu hình cân bằng tải và chiến lược phân phối dữ liệu toàn cầu »