MySQL 平行執行的 Replication...

MySQL Replication – Multi-Threaded Slaves (Parallel Event Execution)」這篇在講 MySQL 5.6 的 multi-threaded replication。

在文章裡提到,在 5.6.3 之前的版本,MySQL replication 都是 single-threaded,所以當 master 可以充分發揮多 CPU 能力時,slave 仍然要一個更新跑完才會跑下一個更新。

舉例來說,假設 master server 上有兩個 thread 在跑:

  • thread 1 正在執行 UPDATE table1 SET foo = 0 WHERE ...; (SQL 1,假定是 CPU bound,需要跑 100 秒)
  • thread 2 正在執行 UPDATE table2 SET bar = 1 WHERE ...; (SQL 2,也假定是 CPU bound,也需要跑 100 秒)

假設 thread 1 先執行完,這時候 slave 就會在跑完的時候收到 SQL 1,然後把資料同步進去。等到 100 秒過去後,再跑 SQL 2,再花 100 秒。這導致了最少 100 秒的 replication lag (master 與 slave 不同步的時間)。

在 master server 執行時會是這樣:

兩個 SQL query 可以同時跑。

到了 slave 時,在 MySQL 5.6.3 之前的 replication 會變成這樣:

可以看到還是得先執行 SQL 1 再執行 SQL 2,所以最長會有 200 秒的 replication lag。

而 5.6.3 之後支援 multi-threaded replication,可以用 slave_parallel_workers 指定平行執行 SQL query 的數量,這讓 master server 與 slave server 之間的 replication lag 降低不少:

在收到同步的 SQL 指令後就可以同時跑,這讓 replication lag 降到 100 秒。

不過還是要提,如果希望把資料同步問題降到最低,那麼 Galera Cluster 可以解的更徹底,不論是寫入的那台 master server,或是其他的 master server (在 Galera Cluster 架構裡都是為 master),一律都是同步執行:

不會有 master server 與 slave server 不同步的問題,可以減少很多 application 層的麻煩...

從 MySQL (單機) 轉到 Galera Cluster 的前置作業...

codership (Galera Cluster 背後的公司) 剛剛發了一篇文章,說明將 MySQL 轉換到 Galera Cluster 有哪些事情要先處理:「5 Tips for migrating your MySQL server to a Galera Cluster」。

純粹技術上的事情大致上是這樣:

  • 先轉到 InnoDB
  • 每個 Table 都加上 Primary Key。
  • 檢查 Event,確認在 Galera Cluster 裡面會怎麼跑,或是直接拆到 cron server 跑...

另外幾點不是技術上的問題,而是 policy 應該規劃的事情... 把事情列出來,多隻眼睛檢查後再一步一步照表操課。

PS:對於 Galera Cluster 不熟的人可以先去看官方網站以及 Percona 的說明,看不懂就不要用,這樣會比較安全...

Percona XtraDB Cluster (Galera Cluster) 的教學

Percona 將在台灣時間 9/20 清晨 (當地 9/19 10:00AM) 舉辦 Percona XtraDB Cluster (Galera Cluster) 的教學:「Upcoming Percona XtraDB Cluster – Installation and Setup webinar」。

這是偏向營運方面的 Web conference:除了安裝與設定以外,還準備試爆與修復,另外使用 HAProxy 達到 HA 目的... (我是偏好 Heartbeat + 自製的小 script 達到 HA)

有興趣的人可以報名,如果時間上不能配合的人,照慣例事後應該也有 video 與投影片可以看... (不是很確定)

又有一家大的 MySQL distribution 支援 Galera Cluster...

Galera ClusterCodership 所提供的 MySQL master-master 方案,與其他 master-master 方案比起來,最大的好處就在於比較不需要擔心資料同步的問題...

剛剛看到,除了 Percona 外,又有一家 MySQL distribution 支援 Galera Cluster:「MariaDB Galera cluster released」。這次是 MariaDB 宣布支援 Galera Cluster。

MariaDB 是由 MySQL 創辦人 Michael Widenius 發展的版本,算是一個蠻有名的分支... 這樣一來 Galera Cluster 應該會有更多人關注使用...

Percona 把 Galera Cluster 標為 General Availability 了...

前幾天讓人吃驚的新聞,Galera Cluster 離第一次 Percona alpha 測試 (Percona Server 5.1 with Galera replication) 才九個月就進入 GA 了 (相當於九個月內就過完 Beta + RC 階段):「Announcement of Percona XtraDB Cluster 5.5.20 GA release」。

大家最大的問題還是「這能用嗎」... 不過既然進入 GA 狀態,加上是 Percona,好像可以期待?