MySQL High Availability: Galera, Percona & ProxySQL Roadmap

Mỗi ứng dụng production rồi cũng sẽ đối mặt với câu hỏi khó: database của mày sẽ ra sao khi một server chết?
Nếu câu trả lời là "chờ có người phát hiện rồi restart" — mày có vấn đề. Nếu là "mình có async replication với script failover thủ công" — mày cũng có vấn đề, loại xuất hiện lúc 3 giờ sáng trong ca trực. Nếu là "cluster tự bầu lại leader, traffic tự re-route, user không biết có gì xảy ra" — thì mày đang có một MySQL high-availability setup đúng nghĩa.
Roadmap này dạy mày cách xây đúng cái thứ ba đó. Từ MySQL replication fundamentals cho đến chạy Galera / Percona XtraDB Cluster production với ProxySQL đứng phía trước routing traffic thông minh, Percona XtraBackup lo backup, và Percona Monitoring and Management (PMM) cho full observability.
Tại Sao Chọn Stack Này?
Hệ sinh thái MySQL HA open-source đã hội tụ quanh một số tool battle-tested. Đây là lý do từng piece quan trọng:
Galera Cluster là một synchronous multi-master replication library. Mọi write đều được commit đến quorum các node trước khi acknowledge. Không có lag, không "replication delay," không risk mất committed data khi failover. Nó đang chạy hàng nghìn production database tại các công ty mày từng nghe đến.
Percona XtraDB Cluster (PXC) là bản phân phối production-hardened của Galera. Percona ship MySQL fork của riêng họ (XtraDB storage engine với InnoDB enhancement) bundle với Galera, Docker image, operator chart — cộng với cả hệ sinh thái tool của Percona.
ProxySQL đứng trước cluster như một smart proxy. Nó đọc MySQL traffic của mày, route câu SELECT đến reader, route write đến primary, enforce connection pooling, xử lý failover health check, và rewrite query — tất cả ở wire speed mà không cần thay đổi application.
Percona XtraBackup backup physical non-blocking cho InnoDB table. Không lock table, không downtime, không replication lag do backup operation. Đây là industry standard cho MySQL backup trong production.
Percona Monitoring and Management (PMM) là full observability stack cho MySQL — query analytics, slow query profiling, InnoDB metric, replication lag graph, Galera flow control metric — tất cả trong một UI, backed bởi Grafana và VictoriaMetrics.
Vấn Đề Với "Chỉ Dùng Replication"
MySQL async replication standard đủ dùng cho đọc, nhưng có những failure mode rất rõ:
Vấn đề core: replication mặc định là async. Primary acknowledge COMMIT của mày trước khi replica apply xong change. Nếu primary chết, mày phải chọn:
- Promote một replica và chấp nhận potential data loss (replica có thể đang chậm vài giây so với primary)
- Chờ replica catch up — nhưng primary đã chết nên mày không thể
- Failover script (MHA, Orchestrator) tự động promote nhưng không recover lại transaction đã mất
Semi-synchronous replication (MySQL built-in) giải quyết được phần data loss, nhưng thêm latency và có thể downgrade xuống async dưới load cao. Và mày vẫn cần external tool để automate failover.
Galera tiếp cận khác hẳn: mọi node đều là writer, mọi write đều được certify trên toàn cluster trước khi commit, node bị tụt hậu được SST-recover tự động.
Kiến Trúc Tổng Quan
Đây là cách một Galera + ProxySQL stack production tối thiểu trông như thế nào:
Các property chính của kiến trúc này:
- Mọi node đều có thể nhận write — nhưng ProxySQL thường route write đến một node để giảm write conflict
- Cluster sống sót khi mất bất kỳ một node (3-node quorum = majority tại 2)
- ProxySQL phát hiện node failure qua health check và loại node lỗi ra khỏi rotation trong vài giây
- Node mới tự động join qua SST (State Snapshot Transfer) — không cần restore thủ công
Series Này Dạy Gì
Chi Tiết Từng Bài
Phase 1 — MySQL Replication Fundamentals
Bài 2: MySQL Replication Fundamentals (Async, Semi-Sync, GTID)
Trước khi Galera có nghĩa lý gì, mày cần hiểu thứ nó đang thay thế và tại sao. Bài này cover:
- Binary log (binlog) replication hoạt động thế nào — statement-based vs row-based vs mixed
- Async vs semi-sync replication — cái được và cái mất
- GTID (Global Transaction Identifiers) — bắt buộc phải hiểu GTID vì PXC cũng dùng transaction identifier cho certification
- Replication lag — đo thế nào, tại sao quan trọng, và Galera làm gì thay thế
- Các failure mode replication phổ biến và cách operator truyền thống xử lý
- Tại sao async replication vẫn hữu ích (analytics replica, cross-region disaster recovery)
Bài này thiết lập conceptual baseline. Nếu mày đã thoải mái với MySQL replication internals, có thể skim qua.
Phase 2 — Galera Cluster Architecture
Bài 3: Galera Cluster Architecture — Synchronous Multi-Master Replication
Core của series. Mày sẽ hiểu:
- wsrep API — Galera's replication hook vào MySQL/MariaDB
- Write-set replication — Galera đóng gói một transaction, broadcast đến tất cả node, và certify atomic thế nào
- Certification-based replication vs lock-based — tại sao certification nhanh hơn cho multi-master
- Galera states: Open, Primary, Joiner, Joined, Synced, Donor
- Flow control — cơ chế throttle write trên toàn cluster khi một node tụt hậu, và cách tune
- Split-brain và quorum — điều gì xảy ra khi node không thấy nhau, quorum ngăn data diverge thế nào
- SST vs IST — full copy vs catch up từ gcache
Phase 3 — Percona XtraDB Cluster
Bài 4: Percona XtraDB Cluster (PXC) — Galera Done Right
PXC là cách được khuyến nghị để chạy Galera trong production. Bài thực hành này cover:
- PXC vs vanilla Galera trên MariaDB — khác nhau ở đâu và tại sao Percona build được ưu tiên hơn
- Bootstrap một 3-node cluster từ đầu với Docker Compose
- SST methods —
xtrabackup-v2(khuyến nghị, non-blocking cho donor),rsync(block donor reads),mariabackup(alternative MariaDB) - PXC Strict Mode — những operation nào bị reject và tại sao (non-transactional table, LOCK TABLES, explicit table lock)
- Node operations: thêm node, remove node gracefully, recover node crashed
- PXC trên Kubernetes với Percona Operator
- Config tunables:
wsrep_cluster_size,wsrep_sst_method,wsrep_provider_options(gcache size, segment, EVS parameter)
Deep Dives
Bài 5: ProxySQL — Smart Load Balancing & Query Routing
ProxySQL là mảnh làm cho cluster invisible với application. Deep dive này cover:
- ProxySQL architecture: multi-layer thread pool, in-memory SQLite config, runtime vs disk config
- Hostgroup —
writer_hostgroup,reader_hostgroup,offline_hostgroup,backup_writer_hostgroup - Galera-aware ProxySQL scheduler (script ping wsrep state và update hostgroup tự động)
- Query rule — route read đến replica, block query nguy hiểm, query rewriting
- Connection pooling — transaction vs session vs multiplexed pooling mode
- Query analytics trong ProxySQL — slow query log, statistics table, digest
- Thay đổi config ProxySQL zero-downtime qua
LOAD ... TO RUNTIME; SAVE ... TO DISK
Bài 6: Backup & Recovery với Percona XtraBackup
Industry standard cho MySQL backup production:
- Physical backup (XtraBackup) khác logical backup (
mysqldump) thế nào - Full backup workflow — backup, prepare, restore
- Incremental backup — chiến lược incremental theo LSN, cách chain incremental
- Streaming backup lên S3 —
xbstream+xbcloudcho remote backup storage - Point-in-time recovery (PITR) với XtraBackup + binlog position
- Encryption at rest — option
--encryptvà--encrypt-key - Xác minh backup —
innobackupex --apply-logvà validate dữ liệu đã restore - Lên lịch backup với cron, monitoring backup freshness
Bài 7: Schema Change trong Galera: pt-osc, gh-ost & Percona Toolkit
Online DDL trong Galera là chủ đề khiến hầu hết team bị bất ngờ:
- Tại sao
ALTER TABLEtrong Galera nguy hiểm — TOI (Total Order Isolation) block toàn bộ cluster - RSU (Rolling Schema Upgrade) — chạy DDL từng node, desync khỏi cluster trước
- pt-online-schema-change (pt-osc) — trigger-based online DDL hoạt động với Galera
- gh-ost — triggerless online DDL qua binlog streaming (cần config Galera cẩn thận)
- Các Percona Toolkit utility khác:
pt-archiver,pt-table-checksum,pt-table-sync - Decision matrix: khi nào dùng TOI vs RSU vs pt-osc vs gh-ost
Bài 8: Tuning & Performance cho Galera Cluster
Galera thêm overhead — đây là cách quản lý nó:
- Galera-specific InnoDB tunables —
innodb_flush_log_at_trx_commit,sync_binlog, write-set buffer sizing - Flow control deep dive —
wsrep_flow_control_paused, đọc metric thế nào, giảm flow control thế nào - Các workload pattern gây hại Galera — large transaction, bulk insert, hot-row update, DDL storm
- Write scaling strategy — segment Galera (LAN vs WAN segment), sharding ở application layer
- gcache tuning — size Galera write-set cache để IST join nhanh hơn
- Benchmark methodology:
sysbenchworkload cho Galera, đọcwsrep_*status variable
Bài 9: Monitoring với PMM (Percona Monitoring and Management)
Visibility vào cluster là điều không thể thiếu:
- PMM architecture:
pmm-server(Grafana + VictoriaMetrics + Alertmanager) +pmm-clientagent - Query Analytics (QAN) — identify query chậm nhất, xem execution plan, track xu hướng query
- MySQL dashboard: InnoDB metric, buffer pool hit rate, thread state, table I/O
- Galera-specific dashboard:
wsrep_cluster_size, flow control, replication lag, certification conflict - Alerting rule — node down, replication lag, flow control %, ngưỡng disk I/O
- PMM với Docker Compose và Kubernetes Helm chart
- Custom Grafana panel cho application-level SLO
Bài 10: InnoDB Cluster, Group Replication & Vitess — So Sánh Alternative
Hệ sinh thái không dừng ở Galera:
- MySQL InnoDB Cluster (MySQL Shell + Group Replication + MySQL Router) — HA stack chính thức của Oracle so với PXC
- Group Replication vs Galera — cùng mục tiêu, khác protocol, khác trade-off
- Vitess — horizontal sharding proxy, cách YouTube chạy MySQL ở quy mô lớn
- Orchestrator — standalone MySQL topology manager cho async replication setup
- MaxScale — tương đương ProxySQL của MariaDB
- Decision matrix: stack nào phù hợp với use case nào
Learning Path
Path 1 — Developer cần hiểu HA
Mày viết application code và muốn hiểu database layer xử lý failure thế nào. Mày không phải DBA chính.
| Tuần | Focus | Bài |
|---|---|---|
| 1 | Replication concept | Bài 2 |
| 2 | Galera architecture | Bài 3 |
| 3 | ProxySQL từ góc nhìn application | Bài 5 (connection pooling, query routing) |
| 4 | Monitoring — đọc dashboard | Bài 9 |
Path 2 — DevOps / Platform engineer setup HA lần đầu
Mày cần dựng cluster, hiểu operations, và giữ nó healthy.
| Tuần | Focus | Bài |
|---|---|---|
| 1 | Replication fundamental | Bài 2 |
| 2 | Galera architecture | Bài 3 |
| 3 | PXC setup (thực hành) | Bài 4 |
| 4 | ProxySQL setup | Bài 5 |
| 5 | Backup setup | Bài 6 |
| 6 | Schema change strategy | Bài 7 |
| 7 | Monitoring setup | Bài 9 |
| 8 | Performance review | Bài 8 |
Path 3 — Đang evaluate option HA trước khi commit
Mày có write-heavy MySQL workload và cần quyết định Galera, InnoDB Cluster, hay thứ gì khác phù hợp.
| Đọc | Bài |
|---|---|
| Bắt đầu ở đây | Bài 3 (Galera architecture) |
| So sánh alternative | Bài 10 |
| Hiểu operational cost | Bài 7 (schema change là phần khó nhất) |
| Hiểu monitoring investment | Bài 9 |
Prerequisite
Trước khi bắt đầu series này, mày nên thoải mái với:
- MySQL cơ bản — CREATE TABLE, SELECT, INSERT, UPDATE, EXPLAIN, user management
- Docker / Docker Compose — tất cả ví dụ chạy trong container
- Linux operation cơ bản —
systemctl, tail log, sửa file - Networking fundamental — port, firewall rule, proxy là gì
Nếu mày chưa vững ở điểm nào:
- MySQL cơ bản → SQL & NoSQL Roadmap
- Docker → Docker & Kubernetes Roadmap
- Networking → Networking for Web Developers
Galera vs Alternative — Quick Reference
| Feature | Async Replication | Semi-Sync | Galera / PXC | InnoDB Cluster | Vitess |
|---|---|---|---|---|---|
| Write destinations | 1 primary | 1 primary | Mọi node | 1 primary | Tuỳ (sharding) |
| Data loss khi failover | Có thể xảy ra | Tối thiểu | Không | Không (sync) | Không |
| Failover automation | External tool | External tool | Built-in | MySQL Router | Built-in |
| Write throughput | Giới hạn 1 node | Giới hạn 1 node | Bị giới hạn bởi wsrep overhead | Giới hạn 1 node | Scale ngang |
| Read scale | Replica (async) | Replica | Mọi node | Replica | Mọi node |
| Replication lag | Có | Tối thiểu | Không | Không | Không |
| Operational complexity | Thấp | Trung bình | Trung bình-Cao | Trung bình | Rất cao |
| Tốt nhất cho | Read-heavy, DR | Mission-critical single-primary | Multi-master HA | Oracle ecosystem | Web-scale sharding |
Các Hiểu Lầm Thường Gặp
"Galera loại bỏ latency" — Không. Galera thêm certification round-trip latency vào mỗi commit. Cluster WAN cảm nhận rõ điều này. Trade-off là zero data loss, không phải zero latency.
"ProxySQL làm Galera thực sự multi-master" — Thực tế, ProxySQL route write đến một node để tránh write conflict retry. Galera hỗ trợ write đến mọi node, nhưng application của mày cần xử lý certification failure (tương tự deadlock) nếu thực sự write đến nhiều node đồng thời.
"Có thể dùng MyISAM table trong Galera cluster" — PXC Strict Mode sẽ reject điều này. Galera chỉ replicate InnoDB (transactional) write. MyISAM write là local-only.
"SST nhanh" — SST là full data copy từ donor node. Với dataset 500 GB, SST mất nhiều thời gian. Size gcache hợp lý để node rejoin dùng IST (incremental) thay vì SST.
"Galera giải quyết database scaling" — Galera giải quyết availability, không phải throughput. Mọi write đều chạm tất cả node. Với write-intensive workload vượt khả năng một node, mày cần sharding (Vitess) hoặc database khác.
Các Tool Thiết Yếu Trong Hệ Sinh Thái Này
| Tool | Mục đích | Chạy ở đâu |
|---|---|---|
| Galera Cluster | Synchronous replication library | Bundle trong PXC / MariaDB |
| Percona XtraDB Cluster | Production MySQL + Galera distribution | Database node |
| ProxySQL | MySQL proxy, query routing, pooling | Proxy layer riêng |
| Percona XtraBackup | Non-blocking InnoDB backup | Database node / backup server |
| PMM Server | Monitoring, query analytics, dashboard | Server monitoring riêng |
| PMM Client | Agent trên mỗi database node | Database node |
| Percona Toolkit | pt-osc, pt-table-checksum, pt-archiver | Ops workstation / cron |
| gh-ost | Triggerless online DDL | Ops workstation |
| Orchestrator | Topology management (cho async setup) | Server riêng |
| MySQL Shell | InnoDB Cluster management (alternative) | Ops workstation |
Series Liên Quan
Series này lấy MySQL làm database. Để có bức tranh rộng hơn:
- SQL & NoSQL Roadmap — SQL fundamental, schema design, indexing, MongoDB, Redis
- Patterns of Distributed Systems — Consensus, leader election, replication pattern mà Galera implement
- Docker & Kubernetes Roadmap — Tất cả ví dụ trong series này dùng Docker Compose; Kubernetes deployment cho PXC được cover
- Load Balancing Explained — ProxySQL là Layer 7 proxy chuyên dụng; bài này cho nền tảng tổng quát
- IoT Data Pipeline — High-write IoT workload là lý do phổ biến team tìm đến Galera
Bắt Đầu Thôi
Bài tiếp theo đào sâu vào MySQL replication fundamentals — binlog format, GTID, async vs semi-sync, và các failure mode thực tế mà Galera được thiết kế để giải quyết.
Nếu mày đã vững replication rồi, nhảy thẳng đến Bài 3: Galera Cluster Architecture — chỗ đó mới là phần thú vị.
📬 Đăng ký nhận bản tin
Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.
Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.
💬 Comments
Đăng nhập để bình luận
Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.