Scale out, HA, backup (for mysql)

前一篇經 DK 說明, 發覺我沒有細分需求和方法。混在一起寫變得很亂。

Scale out

目的:
  • 加機器就能應付成長的流量 (ref.)。
作法:
  • Replication 可以應付大量讀取、少量寫入的情況。
  • Sharding (partition) 可以應付大量寫入的情況 (各 server 應付不同段的資料)。

High availability

目的:
  • 網站能持續提供服務。
作法:
  • Master-Slave Replication: 寫入密集的情況下, Master 和 Slave 的資料有時間差,  掛掉 Master 後需要處理資料不同步的情況。
  • MMM 或 DRBD 可以確保資料同步。MMM 不需暖機, 服務中斷時間最短。 DRBD 較易設定, 但需要暖機時間。

Backup

目的: 
  • 可以找回舊資料。
作法:
  • Replication 可以做到「差不多即時」備份, 但若誤砍資料, slave 上的資料也「差不多即時」飛了。
  • 使用 replication 後, 可以在 slave 上固定間隔時間備份資料, 降低對網站效能的影響, 且不用停止服務。
  • 備份方式分為 logical 和 raw backup 兩種類型, 各有優缺點。搭配支援 snapshot 的 file system 用 raw backup, 時間和空間成本都很划算。
  • DB 本身要搭配 crash-safe 的方案 (如 MySQL + InnoDB), 確保 server 掛掉時, 資料有保持一致。
  • 針對 InnoDB 做 logical backup 的話, 用 XtraBackup 較快。
  • 一定要測 restore, 我半信半疑的測了一下, 馬上發現少備份使用者帳號的 DB ......

結論

Scale out、HA、backup 是三種不同的需求, 各自有不同的實踐手段。接下來會先:
  • 做 logical backup: 易於實作, 資料量小時沒什麼缺點。
  • 做 replication: 協助 backup 和為 scale out 讀取做準備。
  • 將 DB 操作包在自己寫的 lib 裡: 之後需要 scale out 時比較好套。
剩下的東西, 待之後有更深的需求再來細讀吧。

參考資料

留言

這個網誌中的熱門文章

(C/C++ ) 如何在 Linux 上使用自行編譯的第三方函式庫

熟悉系統工具好處多多

virtualbox 使用 USB 裝置