1. 程式人生 > >java之MyCAT入門及應用總結

java之MyCAT入門及應用總結

MyCAT的主要作用

1分散式資料庫系統中間層(實現讀寫分離,更好的控制資料庫的多個連線池連線問題,遮蔽客戶端資料庫的變更)
2同時實現關係型和非關係型資料庫的連線
3支援讀負載均衡
4Mycat支援後端MySQL高可用(通過指定從節點,並不支援從其他從節點對新的主節點進行主從同步)
5實現資料庫的垂直拆分和水平拆分

MyCAT的主要應用場景

1、需要進行讀寫分離的場景( 當一臺資料庫進行讀寫混合操作時,資料庫效能大幅下降,並且讀負載明顯高於寫負載時,mycat支援多種客戶端的mysql叢集方案進行讀寫分離如一主一從,一主多從,主主複製,PXC叢集)
2、需要進行分庫分表的場景(最大支援1千億級的單表分片)
3、多租戶場景(多使用者環境使用不同的系統元件,同時保證資料之間的隔離性)
4、資料統計系統(基於MyCAT的分表能力,處理大規模報表和統計,可以併發的對後端資料庫中的資料進行彙總和合並)
5、HBASE的一種替代方案(實際是通過mycat連線MySQL的分散式模擬)
6、需要使用同樣的方式查詢多種資料庫的場景

MyCAT的優勢

1、基於阿里的 cobar系統開發
2、開發社群活躍
3、完全開源可以自定義開發
4、支援多種關係型資料庫和非關係型資料庫
5、使用java開發,可以部署在多種系統上
6、具有在多種行業和專案中的成功案例

MyCAT的概念

1、MyCAT中的資料庫是邏輯庫而非物理庫,實際資料儲存在物理庫中
2、MyCAT中的資料庫通過前端應用看到的表實際就是邏輯表,一個邏輯表可能對應物理庫中的多個表

MyCAT的關鍵特性

1、支援SQL92標準
2、支援多種MySQL叢集
3、支援JDBC連線資料庫
4、支援NoSQL資料庫
5、支援自動故障切換,高可用
6、支援讀寫分離
7、支援全域性表
8、支援獨有的基於ER關係的分片策略
9、支援一致性HASH分片
10、多平臺支援,部署簡單方便
11、支援全域性序列號

MyCAT安裝

注:對於在Linux系統下執行的軟體,最好為每個軟體建立獨立的系統賬號,這樣既安全有可以對賬號下資源進行相應的限制。
MyCAT安裝流程簡圖

MyCAT啟動

Linux下指令碼啟動:
$MYCAT_HOME/bin/startup_noswarp.sh
當記憶體不足時可以調整JAVA_OPTS=”-server -Xms1G -Xmx2G -XX:MaxPerSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=2G”

MyCAT的關鍵配置檔案

1、schema.xml用於配置檔案邏輯庫表及資料節點

<schema><table></table></schema>定義邏輯庫表

注:當前只進行讀寫分離操作而不需要分庫分表操作時可以只配置<schema></schema>
<dataNode></dataNode>定義資料節點
<dataHost></dataHost>定義資料節點的物理資料來源

2、rule.xml用於配置表的分片規則

<tableRule name="" ></tableRule>定義表使用的分片規則
<function name="" ></function>定義分片演算法

3、server.xml用於配置伺服器許可權

<system><property name=""></property></system>用於定義系統配置
<user></user>用於定義連線MyCAT的使用者

MyCAT實現讀寫分離實操

<mycat:shema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="node1" database="user_db"/>
<dataHost name="node1" maxCon="10000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="10.102.13.3" url="10.102.13.3:3306" user="im_user" password="123456">
<readHost host="10.102.13.4" url="10.102.13.4:3306" user="im_user" password="123456"/>
</writeHost>
<writeHost host="10.102.13.4" url="10.102.13.4:3306" user="im_user" password="123456">
</dataHost>
</mycat:shema>

注:①這裡沒進行分片分表操作因此只配置了②heartbeat配置心跳監測方式

server.xml

<system>
<property name="serverPort">3306</property>
<property name="managerPort">9066</property>
</system>
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">USERDB</property>
</user>
<user>
<property name="password">123456</property>
<property name="schemas">USERDB</property>
<property name="readOnly">true</property>
</user>

管理MyCAT

使用MySQL客戶端管理MyCAT

管理埠9066
連線埠命令:
mysql -uroot -p123456 -h127.0.0.1 -P9066
檢視管理埠支援的管理命令:
show @@help;
重新載入配置檔案命令:
reload @@config
檢視schema.xml中配置的資料節點命令:
show @@datanode;
檢視配置的物理資料來源命令:
show @@datasource;
檢視資料庫連線狀況命令:
show @@backend;

文章總結自慕課網MyCAT入門及應用