什么是MyCAT
- 一個徹底開源的,面向企業應用開發的大數據庫集群
- 支持事務、ACID、可以替代MySQL的加強版數據庫
- 一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的Oracle集群
- 一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
- 結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品
- 一個新穎的數據庫中間件產品
MyCAT關鍵特性
- 支持SQL92標準
- 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法
- 遵守MySQL原生協議,跨語言,跨平臺,跨數據庫的通用中間件代理。
- 基于心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集群。
- 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
- 基于Nio實現,有效管理線程,解決高并發問題。
- 支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數,支持跨庫分頁。
- 支持單庫內部任意join,支持跨庫2表join,甚至基于caltlet的多表join。
- 支持通過全局表,ER關系的分片策略,實現了高效的多表join查詢。
- 支持多租戶方案。
- 支持分布式事務(弱xa)。
- 支持XA分布式事務(1.6.5)。
- 支持全局序列號,解決分布式下的主鍵生成問題。
- 分片規則豐富,插件化開發,易于擴展。
- 強大的web,命令行監控。
- 支持前端作為MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
- 支持密碼加密
- 支持服務降級
- 支持IP白名單
- 支持SQL黑名單、SQL注入攻擊攔截
- 支持prepare預編譯指令
- 支持非堆內存(Direct Memory)聚合計算
- 支持PostgreSQL的native協議
- 支持MySQL和oracle存儲過程,out參數、多結果集返回
- 支持zookeeper協調主從切換、zk序列、配置zk化
- 支持庫內分表
- 集群基于ZooKeeper管理,在線升級,擴容,智能優化,大數據處理(2.0開發版)。
1、這里是在mysql主從復制實現的基礎上,利用mycat做讀寫分離,架構圖如下:

2、Demo
2.1 在mysql master上創建數據庫創建db1
2.2 在數據庫db1創建表student

同時,因為配置好了mysql主從復制,在mysql slave上也有一樣數據庫和表
2.3 編輯 mycat的配置文件server.xml
!--表示mycat的登錄用戶名-->
user name="test">
!--表示mycat的登錄密碼-->
property name="password">test/property>
!--表示mycat的邏輯數據庫名稱,可以自定義-->
property name="schemas">TESTDB/property>
/user>
user name="user">
property name="password">user/property>
property name="schemas">TESTDB/property>
property name="readOnly">true/property>
/user>
2.4編輯mycat的配置文件schema.xml
!--TESTDB表示mycat的邏輯數據庫名稱
當schema節點沒有子節點table的時候,一定要有dataNode屬性存在(指向mysql真實數據庫),
-->
schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
/schema>
!--指定master的數據庫db1-->
dataNode name="dn1" dataHost="192.168.0.4" database="db1" />
!--指定mastet的ip -->
dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
!--表示mysql的心跳狀態-->
heartbeat>select user()/heartbeat>
!-- master負責寫 -->
writeHost host="hostM1" url="192.168.0.4:3306" user="root"
password="admin">
!--slave負責讀-->
readHost host="hostS2" url="192.168.0.5:3306" user="root" password="admin" />
/writeHost>
/dataHost>
到這里,利用mycat做讀寫分離就已經配置完了
注意 dataHost節點的下面三個屬性
balance, switchType, writeType
balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
balance="2",所有讀操作都隨機的在writeHost、readhost上分發。
balance="3",所有讀請求隨機的分發到writeHost下的readhost執行,writeHost不負擔讀壓力
writeType表示寫模式
writeType="0",所有的操作發送到配置的第一個writehost
writeType="1",隨機發送到配置的所有writehost
writeType="2",不執行寫操作
switchType指的是切換的模式,目前的取值也有4種:
switchType=‘-1‘ 表示不自動切換
switchType=‘1‘ 默認值,表示自動切換
switchType=‘2‘ 基于MySQL主從同步的狀態決定是否切換,心跳語句為show slave status
switchType=‘3‘基于MySQL galary cluster的切換機制(適合集群)(1.4.1),心跳語句為show status like ‘wsrep%‘。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- Springboot + Mysql8實現讀寫分離功能
- springboot基于Mybatis mysql實現讀寫分離
- 基于mysql+mycat搭建穩定高可用集群負載均衡主備復制讀寫分離操作
- PHP實現的mysql讀寫分離操作示例
- mysql主從復制讀寫分離的配置方法詳解
- PHP+MYSQL實現讀寫分離簡單實戰
- Mysql讀寫分離過期常用解決方案