當前位置:
首頁 > 最新 > Mycat 讀寫分離 資料庫分庫分表 中間件 安裝部署,及簡單使用

Mycat 讀寫分離 資料庫分庫分表 中間件 安裝部署,及簡單使用

MyCat是一個開源的分散式資料庫系統,是一個實現了MySQL協議的伺服器,前端用戶可以把它看作是一個資料庫代理,用MySQL客戶端工具和命令行訪問,而其後端可以用MySQL原生協議與多個MySQL伺服器通信,也可以用JDBC協議與大多數主流資料庫伺服器通信,其核心功能是分表分庫,即將一個大表水平分割為N個小表,存儲在後端MySQL伺服器里或者其他資料庫里。

MyCat發展到目前的版本,已經不是一個單純的MySQL代理了,它的後端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流資料庫,也支持MongoDB這種新型NoSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在MyCat里,都是一個傳統的資料庫表,支持標準的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度

網上很有多相關資源,也可以直接訪問Mycat官網。

環境

MySql 主從複製

參考我的另一篇文章-搭建 MySQL 5.7.19 主從複製

在 MySql-Master:192.168.252.121 建庫,測試主從複製是否可用

Mycat 安裝部署

更好看目錄結構,下tree(可選)

安裝 JDK

下載Linux環境下的jdk1.8,請去(官網)中下載jdk的安裝文件

我在百度雲盤分下的鏈接:http://pan.baidu.com/s/1jIFZF9s 密碼:u4n4

上傳在 目錄

解壓

配置環境變數

使環境變數生效

驗證

環境變數

設置 MYCAT_HOME 的變數

使環境變數生效

配置 JDK 路徑

告訴 Mycat 需要使用哪個 JDK

wrapper.conf jvm調優參數,不合理,需改進

jvm參數調優,以16G內存伺服器為例

配置 Mycat

配置文件非常多.如果只是簡單配置在不同的伺服器上進行讀寫分離只需要配置兩個文件 和

中定義邏輯庫,表、分片節點等內容

中定義分片規則

中定義用戶以及系統相關變數,如埠等

server.xml

server.xml 幾乎保存了所有 mycat 需要的系統配置信息。其在代碼內直接的映射類為 System Config 類。

server.xml 中的標籤本就不多,這個標籤主要用於定義登錄 mycat 的用戶和許可權。

例如上面的例子中,我定義了一個用戶,用戶名為 root 、密碼也為 123456,可訪問的 schema 也只有 test_schema 一個 邏輯庫。

官方完整的默認配置 server.xml

Mycat 系統配置

schema.xml

schema 標籤用於定義 My Cat 實例中的邏輯庫,My Cat 可以有多個邏輯庫,每個邏輯庫都有自己的相關配 置。可以使用 schema 標籤來劃分這些不同的邏輯庫。

如上所示的配置就配置了1個邏輯庫,邏輯庫的概念和 MYSQL 資料庫中 Database 的概念相同,我們在查詢這個邏輯庫中表的時候需要切換到該邏輯庫下才可以查詢到所需要的表。

schema 標籤

用於定義 My Cat 實例中的邏輯庫,My Cat 可以有多個邏輯庫,每個邏輯庫都有自己的相關配 置。可以使用 schema 標籤來劃分這些不同的邏輯庫。

data Node 屬性

該屬性用於綁定邏輯庫到某個具體的 database 上,1.3 版本如果配置了 data Node,則不可以配置分片表, 1.4 可以配置默認分片,只需要配置需要分片的表即可

data Host 標籤

作為 Schema.xml 中最後的一個標籤,該標籤在 mycat 邏輯庫中也是作為最底層的標籤存在,直接定義了具體的資料庫實例、讀寫分離配置和心跳語句。現在我們就解析下這個標籤。

name 屬性

唯一標識 data Host 標籤,供上層的標籤使用。

max Con 屬性

指定每個讀寫實例連接池的最大連接。也就是說,標籤內嵌套的 write Host、read Host 標籤都會使用這個屬性的值來實例化出連接池的最大連接數。

min Con 屬性

指定每個讀寫實例連接池的最小連接,初始化連接池的大小。

balance 屬性

負載均衡類型,目前的取值有 3 種:

1.balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的 write Host 上。

2.balance="1",全部的 read Host 與 stand by write Host 參與 select 語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語句的負載 均衡。

3.balance="2",所有讀操作都隨機的在 write Host、readhost 上分發。 4.balance="3",所有讀請求隨機的分發到 wiriter Host 對應的 readhost 執行,writer Host 不負擔讀壓 力,注意 balance=3 只在 1.4 及其以後版本有,1.3 沒有。

write Type 屬性

負載均衡類型,目前的取值有 3 種:

**switch Type 屬性

-1 表示不自動切換

1 默認值,自動切換

2 基於 My SQL 主從同步的狀態決定是否切換

db Type 屬性

指定後端連接的資料庫類型,目前支持二進位的 mysql 協議,還有其他使用 JDBC 連接的資料庫。例如:mongodb、oracle、spark 等。

db Driver 屬性

指定連接後端資料庫使用的 Driver,目前可選的值有 native 和 JDBC。使用 native 的話,因為這個值執行的是二進位的 mysql 協議,所以可以使用 mysql 和 maridb。其他類型的資料庫則需要使用 JDBC 驅動來支持。

從 1.6 版本開始支持 postgresql 的 native 原始協議。

switch Type 屬性

-1 表示不自動切換

1 默認值,自動切換

2 基於 My SQL 主從同步的狀態決定是否切換 心跳語句為 show slave status

3 基於 My SQL galary cluster 的切換機制(適合集群)(1.4.1) 心跳語句為 show status like 『wsrep%』.

temp Read Host Available 屬性

如果配置了這個屬性 write Host 下面的 read Host 仍舊可用,默認 0 可配置(0、1)

rule.xml

rule.xml 裡面就定義了我們對錶進行拆分所涉及到的規則定義。我們可以靈活的對錶使用不同的分片演算法,或者對錶使用相同的演算法但具體的參數不同。這個文件裡面主要有 table Rule 和 function 這兩個標籤。在具體使用過程中可以按照需求添加 table Rule 和 function。

這個標籤定義表規則。 定義的表規則,在 schema.xml:

tableRule name="sharding-by-date"

啟動 Mycat

查看日誌

啟動 mycat 的日誌

訪問 mycat 的日誌

使用 Mycat

登錄 Mycat 切換到 test_schema 邏輯庫

創建庫/表

只需要在 Mycat 伺服器執行以下腳本,就會自動同步到 MySql-Master:192.168.252.121 MySql-Slave:192.168.252.122

登錄 Mycat 管理端

RS_CODE 為 1 表示心跳正常,--查看讀寫分離的機器配置情況

測試分片按日期(天)分片

登錄 Mycat 管理端

RS_CODE 為 1 表示心跳正常,--查看讀寫分離的機器配置情況

配置按日期(天)分片,2017-11-15,2017-11-16,2017-11-17 ,一天一個分片,執行完一下的 sql 可以發現數據 ,會按照分片規則進入不同的,分片,資料庫

rule.xml

name 屬性指定唯一的名字,用於標識不同的表規則。

內嵌的 rule 標籤則指定對物理表中的哪一列進行拆分和使用什麼路由演算法。

columns 內指定要拆分的列名字。

algorithm 使用 function 標籤中的 name 屬性。連接表規則和具體路由演算法。當然,多個表規則可以連接到同一個路由演算法上。table 標籤內使用。讓邏輯表使用這個規則進行分片。

配置說明:

schema.xml

登錄 Mycat 服務端

在 MySql-Master 執行 ,查看分片是否均勻

自然月分片

在 MySql-Master:192.168.252.121 建庫,測試主從複製是否可用

登錄 Mycat 管理端

查看分片情況

rule.xml

按月份列分區 ,每個自然月一個分片

配置說明:

schema.xml

登錄 Mycat 服務端

只需要在 Mycat 伺服器執行以下腳本,就會自動同步到 MySql-Master:192.168.252.121 MySql-Slave:192.168.252.122

在 MySql-Master 執行 ,查看分片是否均勻

注意

啟動MyCAT之前,需要先檢查一些配置:

Mysql的主從複製是否正常,這個檢查我在文章開頭,搭建 MySQL 5.7.19 主從複製,文章鏈接裡面有介紹

java的版本需要是1.7或以上;

Mysql的配置文件需要加一行lowercasetable_names = 1在[mysqld]欄目中,這個設置為Mysql大小寫不敏感,否則可能會發生表找不到的問題;

在示例的2個數據 MySql-Master 和 MySql-Slave 上,新建3個資料庫 testone,testtwo,test_three, 如不新建,可能提示找不到資料庫ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0(這個提示不夠友好,是在運行很長一段時間後才提示);

添加 MYCAT_HOME 環境變數指向解壓的mycat目錄,主要是為了一些bin目錄下的腳本的使用。

Contact


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 鵬磊科技 的精彩文章:

TAG:鵬磊科技 |