MySQL核心月報2014.11-MySQL· 5.7特性·高可用支援

db匠發表於2016-05-23

背景

MySQL的Master-Slave結構提供了實現High Availability的基礎,在實現上面通常使用client-proxy-db的三層架構,proxy不單單完成錯誤檢測、例項切換等高可用功能,還可以實現sharding,即scale out。

MySQL Fabric就是Oracle想大力發展的proxy,這裡主要介紹為了完成高可用的功能,MySQL 5.7做了哪些事情,我們是否可以使用,實現自己的proxy?


高可用元件

proxy完成高可用的功能,除了需要MySQL提供的master-slave的基礎結構外,還需要:

1. 在錯誤檢測、進行例項切換時候,需要DB的只讀功能,防止m/s雙寫。
2. 在切換完成後,如何實現client重連,或者實現session維持,對client透明。


那麼問題來了

1. 如何保證切換?

當前MySQL版本提供了一個read_only的功能,通過新增global read lock和commit鎖來實現,可以滿足實現單點寫入。

2. client重連或者session維持?

client重連主要依賴client的API,檢測connection的錯誤。而保持connection不斷開,session維持怎麼做?


MySQL 5.7增加的功能

1. offline mode

offline mode不光實現了read only的功能,並且會斷掉所有的非super使用者的connection,並禁止重連。雖然官方文件中介紹是為了支援upgrade,但完全可以使用在切換的過程中。

2.session回放功能支援

client-server protocol對於response packet增加了對session state狀態改變的支援,對於以下的session state變化:
1. User-defined variables
2. session-specific values for server variables
3. Temporary tables that are created
4. Prepared statements
5. Current database

response packet中會新增一個tracker標示其變化。 有了這個功能就可以容易實現session的回放功能,特別在load balance或者cluster環境中,把一個使用者的connection遷移到另外一臺例項上,來保持connection不斷開,實現切換對client透明。


使用MySQL 5.7新增的這兩個功能,可以幫助proxy實現DB高可用。


相關文章