天天看點

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

<b>背景</b>

mysql的master-slave結構提供了實作high availability的基礎,在實作上面通常使用client-proxy-db的三層架構,proxy不單單完成錯誤檢測、執行個體切換等高可用功能,還可以實作sharding,即scale out。

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

<b>高可用元件</b>

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

<dl></dl>

<dd>1. 在錯誤檢測、進行執行個體切換時候,需要db的隻讀功能,防止m/s雙寫。</dd>

<dd>2. 在切換完成後,如何實作client重連,或者實作session維持,對client透明。</dd>

<b>那麼問題來了</b>

1. 如何保證切換?

<dl><dd>目前mysql版本提供了一個read_only的功能,通過添加global read lock和commit鎖來實作,可以滿足實作單點寫入。</dd></dl>

2. client重連或者session維持?

<dl><dd>client重連主要依賴client的api,檢測connection的錯誤。而保持connection不斷開,session維持怎麼做?</dd></dl>

<b>mysql 5.7增加的功能</b>

1. offline mode

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

2.session回放功能支援

<dd>client-server protocol對于response packet增加了對session state狀态改變的支援,對于以下的session state變化:</dd>

<dd>1. user-defined variables</dd>

<dd>2. session-specific values for server variables</dd>

<dd>3. temporary tables that are created</dd>

<dd>4. prepared statements</dd>

<dd>5. current database</dd>

response packet中會添加一個tracker标示其變化。 有了這個功能就可以容易實作session的回放功能,特别在load balance或者cluster環境中,把一個使用者的connection遷移到另外一台執行個體上,來保持connection不斷開,實作切換對client透明。

使用mysql 5.7新增的這兩個功能,可以幫助proxy實作db高可用。

繼續閱讀