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。
沒有留言:
張貼留言