MySQL HA

MySQL 有幾種不同的方法實做 High Availability 架構:

  • Master-Slave Replication,當 master 當掉時,將 slave 提昇為 master。
  • DRBD + Heartbeat,透過網路對 Disk 層 RAID1,平常只有一台會 mount 並跑 mysql,當掉時會跳到另外一台。
  • Master-Master Replication,當其中一台當掉時直接到另外一台使用。

這三種方法各有不同的缺點,舉例來說:

  • Master-Slave Replication:master 當掉時可能有 transaction 已經寫入,但尚未被送到 slave 而造成不同步。
  • DRBD + Heartbeat:當備援機跳起來時,記憶體內都還沒有 cache,會造成剛跑起來時 MySQL I/O bound,有時候叫做 "warm up problem"。
  • Master-Master Replication:query 會有 race condition (同時在 db1 下 DELETE FROM table1;,以及在 db2 下 INSERT INTO table1 SET col1=1;,有可能最後在 db1 上有資料,但在 db2 上沒有資料),這點可以用把寫入固定到某一台而避免,但由於也是 replication 類的架構,也會遇到 Master-Slave Replication 所敘述的問題。

由於資料的正確性會比其他的因素重要,現在我還是偏好用 DRBD + Heartbeat。因 query 的特性而不會有 query dependency 問題的系統才會用 Master-Master。

One thought on “MySQL HA”

Leave a Reply

Your email address will not be published. Required fields are marked *