Back to blog

MySQL High Availability: Galera, Percona & ProxySQL Roadmap

mysqlgaleraperconaproxysqldatabasehigh-availability
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 + xbcloud cho remote backup storage
  • Point-in-time recovery (PITR) với XtraBackup + binlog position
  • Encryption at rest — option --encrypt và --encrypt-key
  • Xác minh backup — innobackupex --apply-log và 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 TABLE trong 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: sysbench workload cho Galera, đọc wsrep_* 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-client agent
  • 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ầnFocusBài
1Replication conceptBài 2
2Galera architectureBài 3
3ProxySQL từ góc nhìn applicationBài 5 (connection pooling, query routing)
4Monitoring — đọc dashboardBà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ầnFocusBài
1Replication fundamentalBài 2
2Galera architectureBài 3
3PXC setup (thực hành)Bài 4
4ProxySQL setupBài 5
5Backup setupBài 6
6Schema change strategyBài 7
7Monitoring setupBài 9
8Performance reviewBà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.

ĐọcBài
Bắt đầu ở đâyBài 3 (Galera architecture)
So sánh alternativeBài 10
Hiểu operational costBài 7 (schema change là phần khó nhất)
Hiểu monitoring investmentBà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:


Galera vs Alternative — Quick Reference

FeatureAsync ReplicationSemi-SyncGalera / PXCInnoDB ClusterVitess
Write destinations1 primary1 primaryMọi node1 primaryTuỳ (sharding)
Data loss khi failoverCó thể xảy raTối thiểuKhôngKhông (sync)Không
Failover automationExternal toolExternal toolBuilt-inMySQL RouterBuilt-in
Write throughputGiới hạn 1 nodeGiới hạn 1 nodeBị giới hạn bởi wsrep overheadGiới hạn 1 nodeScale ngang
Read scaleReplica (async)ReplicaMọi nodeReplicaMọi node
Replication lagCóTối thiểuKhôngKhôngKhông
Operational complexityThấpTrung bìnhTrung bình-CaoTrung bìnhRất cao
Tốt nhất choRead-heavy, DRMission-critical single-primaryMulti-master HAOracle ecosystemWeb-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

ToolMục đíchChạy ở đâu
Galera ClusterSynchronous replication libraryBundle trong PXC / MariaDB
Percona XtraDB ClusterProduction MySQL + Galera distributionDatabase node
ProxySQLMySQL proxy, query routing, poolingProxy layer riêng
Percona XtraBackupNon-blocking InnoDB backupDatabase node / backup server
PMM ServerMonitoring, query analytics, dashboardServer monitoring riêng
PMM ClientAgent trên mỗi database nodeDatabase node
Percona Toolkitpt-osc, pt-table-checksum, pt-archiverOps workstation / cron
gh-ostTriggerless online DDLOps workstation
OrchestratorTopology management (cho async setup)Server riêng
MySQL ShellInnoDB 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:


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ị.

Tiếp theo: Bài 2 → MySQL Replication Fundamentals

📬 Đă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.