1. 程式人生 > >資料庫中介軟體---Mycat入門

資料庫中介軟體---Mycat入門

入門宣言:不怕從零開始,只怕從未開始。

2013 年阿里的 Cobar 在社群使用過程中發現存在一些比較嚴重的問題,及其使用限制,經過 Mycat 發
人第一次改良,第一代改良版——Mycat 誕生。 Mycat 開源以後,一些 Cobar 的使用者參與了 Mycat 的
開發,最終 Mycat 發展成為一個由眾多軟體公司的實力派架構師和資深開發人員維護的社群型開源軟體。
2014 年 Mycat 首次在上海的《中華架構師》大會上對外宣講,更多的人蔘與進來,隨後越來越多的專案採用了
Mycat。
2015 年 5 月,由核心參與者們一起編寫的第一本官方權威指南《Mycat 權威指南》電子版釋出,累計超過 500
本,成為開源專案中的首創。
2015 年 10 月為止, Mycat 專案總共有 16 個 Committer。
截至 2015 年 11 月,超過 300 個專案採用 Mycat,涵蓋銀行、電信、電子商務、物流、移動應用、 O2O 的眾多
領域和公司。
截至 2015 年 12 月,超過 4000 名使用者加群或研究討論或測試或使用 Mycat。
Mycat 是基於開源 cobar 演變而來,我們對 cobar 的程式碼進行了徹底的重構,使用 NIO 重構了網路模組,並且
優化了 Buffer 核心,增強了聚合, Join 等基本特性,同時相容絕大多數資料庫成為通用的資料庫中介軟體。 1.4 版
13
本以後 完全的脫離基本 cobar 核心,結合 Mycat 叢集管理、自動擴容、智慧優化,成為高效能的中介軟體。我們
致力於開發高效能資料庫中間而努力。永不收費,永不閉源,持續推動開源社群的發展。
Mycat 吸引和聚集了一大批業內大資料和雲端計算方面的資深工程師, Mycat 的發展壯大基於開源社群志願者的持
續努力,感謝社群志願者的努力讓 Mycat 更加強大,同時我們也歡迎社群更多的志願者,特別是公司能夠參與進
來,參與 Mycat 的開發,一起推動社群的發展,為社群提供更好的開源中介軟體。
Mycat 還不夠強大, Mycat 還有很多不足,歡迎社群志願者的持續優化改進。

2、Mycat 原理

原理比較簡單,程式碼實現比較複雜。Mycat的核心原理就是拆資料,將一個張表的資料通過某個欄位進行水平拆分後存到多張表中,如圖所示,通過路由欄位去不同的資料庫中查詢資料,同時也存在一定缺陷,那就是查詢語句中如果沒有路由欄位Mycat將不知道該資料在那個分片資料庫上,會查詢所有的分片,在返回結果給客戶端。

這裡寫圖片描述

3、Mycat 應用場景

Mycat 發展到現在,適用的場景已經很豐富,而且不斷有新使用者給出新的創新性的方案,以下是幾個典型的
應用場景:
1. 單純的讀寫分離,此時配置最為簡單,支援讀寫分離,主從切換
2. 分表分庫,對於超過 1000 萬的表進行分片,最大支援 1000 億的單表分片
3. 多租戶應用,每個應用一個庫,但應用程式只連線 Mycat,從而不改造程式本身,實現多租戶化
4. 報表系統,藉助於 Mycat 的分表能力,處理大規模報表的統計
5. 替代 Hbase,分析大資料
6. 作為海量資料實時查詢的一種簡單有效方案,比如 100 億條頻繁查詢的記錄需要在 3 秒內查詢出來結果,
除了基於主鍵的查詢,還可能存在範圍查詢或其他屬性查詢,此時 Mycat 可能是最簡單有效的選擇。

4、安裝Mycat

4.1 安裝資料庫和jdk1.7+

安裝Mycat前需要先裝一個數據庫,我這裡安裝的mysql,mysql和jdk安裝步驟就不說明了。
並建立兩個資料庫 db1、db2
建立表

CREATE TABLE `users` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `zname` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

版本說明:截止2018年1月31日 穩定版是1.6.5,下載自己適合使用系統使用的軟體版本。
其中:Mycat-server-1.6.5-release-20180122220033-testtool.tar.gz 是壓力測試相關程式碼,後面會介紹。Mycat-server-1.6.5-release-tests.jar 是壓力測試原始碼。這裡我用linux測試下載linux相關的軟體包,解壓到 /usr/local/mycat 目錄下。
這裡寫圖片描述


到這裡Mycat就安裝成功了

4.3 配置Mycat邏輯庫

mycat配置檔案都在 conf目錄下,邏輯庫配置檔名是 conf/schema.xml, 開啟配置檔案(我這裡將有些內容刪除了):
這裡寫圖片描述

  1. dbtype:
    指定後端連線的資料庫型別,目前支援二進位制的 mysql 協議,還有其他使用 JDBC 連線的資料庫。例如:mongodb、 oracle、 spark ,sqlserver 等
  2. dbDriver:
    目前可選的值有 native 和 JDBC
    從 1 .6 版本開始支援 postgresql 的 native 原始協議
    如果使用 JDBC 的話需要將符合 JDBC 4 標準的驅動 JAR 包放到 MYCAT\lib 目錄下,並檢查驅動 JAR 包中。
  3. switchType:
    -1 表示不自動切換
    1 表示自動切換
    2 表示MySQL 主從同步的狀態決定是否切換
    心跳語句需要為 show slave status
    3 基於 MySQL galary cluster 的切換機制(適合叢集)

4.4 基本配置完成後,啟動測試下。

mycat 啟動指令碼在bin目錄下。

# 後臺啟動
./mycat start
# 停止
./mycat stop

#控制檯啟動,可以觀看Mycat啟動日誌
./mycat console

控制檯啟動看到下圖說明mycat已經啟動成功了
這裡寫圖片描述

後臺啟動檢視是否啟動成功,看到下圖說明啟動成功了

 ps aux | grep mycat

這裡寫圖片描述