VTOrc: Vitess-native Orchestrator
Bài tóm tắt Vitess (PlanetScale/CNCF) 2022 3. Quy mô lớn Độ khó: Trung bình
Vitess (PlanetScale/CNCF) · 2022 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bài của dự án mã nguồn mở Vitess; mọi nhận định là theo các maintainer.
Bối cảnh
- Orchestrator là công cụ phát hiện và sửa lỗi cho MySQL với gần như mọi topology (kể cả replication nhiều tầng). Vitess từng tích hợp với nó từ bên ngoài, nhưng phần tích hợp cồng kềnh và từng gây bug.
- VTOrc bắt đầu là một fork của Orchestrator, chỉnh lại thành thành phần gốc của Vitess. Vì chỉ phục vụ một trường hợp (mỗi shard một primary, replica đọc thẳng từ primary, không có replication tầng), nó có thể có chính kiến và đơn giản hơn nhiều.
Khác biệt chính
- Phát hiện: Orchestrator tự bò qua topology để vẽ bản đồ. VTOrc hỏi topology server của Vitess, nơi mọi VTTablet (sidecar cạnh mỗi MySQL) đã tự đăng ký. Topology server cũng lưu primary của mỗi shard, nên VTOrc biết hệ phải trông thế nào (khai báo), còn Orchestrator phải suy ra từ hiện trạng (mệnh lệnh).
- Đồng bộ giữa nhiều instance: hai orchestrator cùng promote hai primary khác nhau là split-brain. Muốn HA thì phải chạy nhiều instance (pod bị evict, hết CPU...). Orchestrator dùng Raft hoặc một kho chung; VTOrc dùng shard lock sẵn có của Vitess trên topology server (kho KV có đồng thuận), nên nhiều VTOrc cùng giám sát một cụm mà không cần biết nhau.
- Chỉ giữ dữ liệu tạm: dữ liệu bền (cấu trúc topology, chính sách độ bền) nằm ở topology server; VTOrc restart lúc nào cũng được, tự nạp lại.
- Dọn bớt phối hợp: với tích hợp cũ, VTTablet phải báo Orchestrator vào chế độ bảo trì trước khi backup (backup dừng replication, không muốn bị "sửa"). VTOrc thấy được metadata của VTTablet nên tự biết tablet đang backup và không can thiệp.
- UI sẽ gộp vào VTAdmin; hướng tới xử lý cả lỗi của VTTablet chứ không chỉ MySQL.
Bài học cho SWE
- Công cụ failover đặt bên trong hệ, đọc trạng thái mong muốn từ một nguồn sự thật, đơn giản và ít bug hơn công cụ tổng quát gắn từ ngoài (Failover, replica và dự phòng dữ liệu).
- Nhiều instance tự động hoá cùng một cụm cần một khoá chung để chỉ một bên hành động, cùng ý với khoá etcd của Yelp (Yelp 2020, Tự động hoá vận hành và auto-remediation).
- Automation không nên "sửa" một node đang cố ý ở trạng thái lạ (backup); nó cần thấy ngữ cảnh đó.
Liên quan
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (3)