真實案例:用MyCat實現數據庫讀寫分離與分庫分表

  • 2019 年 10 月 6 日
  • 筆記

1.0版,普通企業應用基本都是單實例或單庫的模式,採用單機實現數據庫的訪問。再向上,2.0版,隨着業務的規模擴展,企業會採用雙機數據庫,如熱備、讀寫分離的方式來提高性能或可靠性。最後,3.0版,單機實現所有數據的寫會遇到最終的瓶頸,因此分庫、分表是最終的數據庫的高可用的解決方案。今天我們來講講用MyCat中間件實現MySql數據庫的分庫分表的實現。

MyCat實際是基於阿里巴巴的CoBar進行開源化的中間件。以下是系統架構。

應用程序(PHP、JAVA等)在需要連接MySql數據庫時,實際連接的是MyCat中間件,由MyCat的連接資源池再次向真實的物理服務器Mysql1、Mysql2、Mysql3發起連接訪問請求。通過MyCat能實現讀寫分離、分庫分表的配置。接下來我們來看一下如何配置MyCat。

一、下載MyCat中間件。

二、解壓縮MyCat中間件。

三、進入MyCat的配置文件。

MyCat的配置文件均位於mycat/conf目錄下。其中最重要的是以下三個配置文件。server.xml文件是MyCat自身的配置文件;而schema.xml則對應真實的物理數據庫服務器的規則;rule.xml是分庫分表的規則配置。

四、查看server.xml中的配置。

以下配置,代表應用程序可以通過root、password訪問TESTDB這個數據庫。

五、查看schema.xml中的配置。

schema.xml中的數據庫名與剛才server.xml中的數據庫名相對應。

schema.xml中的dataNode代表通過三台服務器實現分片。

schema.xml中的dataHost代表真實的物理服務器的配置。在這裡可以配置物理服務器的IP、數據庫的帳號、密碼。

六、MyCat只是一個數據庫的集群調度工具,對於讀寫分離中的數據複製必須通過數據庫自身實現;而對於分表後的聯表查詢目前只支持兩個表的聯表查詢;MyCat支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流數據庫。

總體來看,MyCat已經是一個不錯的數據庫中間件,推薦使用。