《Mycat官方文檔》_筆記



mycat官網

 

3,Mycat中的概念

數據庫中間件;介於應用與數據庫之間,進行數據處理與交互的中間服務。數據庫路由,結果封裝處理。
邏輯庫;數據庫中間件可被看作一個或多個數據庫集群構成的邏輯庫。
邏輯表;邏輯庫中的表,分片表、非分片表、ER表(表分組)、全局表(表冗余)。
分片節點;分片表所在數據庫。
節點主機;數據庫主機。
分片規則;表切分規則。
全局序列號;全局唯一性標識。
多租戶;多租戶技術,多重租賃技術。多用戶環境下共用相同的系統或程序組件,並保證用戶間數據隔離。方案:獨立數據庫、共享數據庫隔離數據架構(schema)、共享數據庫數據架構(tenantId)。

4,快速入門

下載地址:http://dl.mycat.io/
解壓后,運行./bin/startup_nowrap.bat;連接:mysql -uroot -p123456 -P8066 -h127.0.0.1

安裝與配置

源碼:https://github.com/MyCATApache/Mycat-Server.git
配置文件

  • ./conf/server.xml;用戶及系統變量
  • ./conf/schema.xml;節點主機、分片節點、邏輯庫、邏輯表
  • ./conf/rule.xml;分片規則、規則函數

源碼運行,配置vm參數:-DMYCAT_HOME=projectPath/src/main

6 Mycat防火牆配置

<firewall> <whitehost> 配置允許訪問的主機 <host user="mycat" host="127.0.0.1"></host> </whitehost> <blacklist check="true"> 配置攔截屬性,校驗sql操作 <property name="selelctAllow">false</property> </blacklist> </firewall> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

7 Mycat配置

schema.xml

管理邏輯庫、邏輯表、分片節點、節點主機配置。
配置詳解:https://blog.csdn.net/webnum/article/details/88821218
schema標簽
定義邏輯庫;屬性:

  • name;邏輯庫名
  • dataNode;綁定分片,未配置的邏輯表查詢綁定分片。綁定后可跨域查詢。
  • checkSQLschema;刪除邏輯庫名
  • sqlMaxLimit;默認最大記錄數;邏輯庫為非拆分庫時無效。

table標簽
定義邏輯表;屬性:

  • name;邏輯表名
  • dataNode;邏輯表所屬的dataNode。
  • rule;rule.xml中分片規則名
  • ruleRequired;true時必須綁定分片規則
  • primaryKey;主鍵
  • type;邏輯表類型。全局表(type=“global”)、普通表
  • autoIncrement;主鍵自增,默認false
  • subTables;分表規則。單庫多表?
  • needAddLimit;記錄數限制,默認true。

childTable標簽
定義ER分片表;屬性:

  • joinKey;子表關聯屬性名,確定父表所在dataNode
  • parentKey;父表關聯屬性名
  • name、primaryKey、needAddLimit;同上

dataNode標簽
定義分片節點、數據分片;屬性:

  • name;分片節點名
  • dataHost;dbms實例名
  • database;具體數據庫,schema

dataHost標簽
定義DBMS實例組、讀寫分離、心跳配置;屬性:

  • name;dbms實例名
  • maxCon、minCon;最大連接數、最小連接數
  • balance、writeType;讀操作負載均衡、寫操作負載均衡
  • dbType;數據庫類型
  • dbDriver;驅動類型,native(mysql)、JDBC。
  • switchType;自動切換
  • tempReadHostAvailable;

heartbeat標簽
定義心跳語句;屬性:

  • connectionInitSql;初始化sql
  • writeHost/readHost標簽,定義讀寫實例;屬性:
  • host;實例名
  • url、user、password;連接信息
  • weight;讀節點權重
  • usingDecrypt;密碼加密,默認0否。

server.xml

配置系統、用戶信息。
user標簽
定義用戶;標簽屬性:name;用戶名
常用property屬性:password、schemas、readOnly
system標簽
定義系統屬性;property子標簽。

rule.xml

tableRule標簽
定義表規則;

  • name屬性;規則名
  • columns子標簽;路由列列名,如不匹配則廣播
  • algorithm子標簽;路由算法

function標簽
定義路由算法;

  • name屬性;算法名
  • class屬性;算法類
  • property子標簽;算法類參數

8 Mycat的分片join

mycat跨分片join實現方式:全局表、ER分片、catletT(人工智能)

全局表

字典類表格,定義為全局表。table屬性:type=“global”

ER Join

Table Group,子表的存儲位置依賴於主表,並在物理上緊鄰存放。
table+childTable;joinKey、parentKey指定關聯屬性

Share Join

解析sql,拆分為單表執行;然后把各個節點的數據匯集起來。
直接進行join連接,按ER join執行。
格式:/!mycat:catlet=demo.catlets.ShareJoin/SQL

catlet(人工智能)

自定義處理邏輯。

9 全局序列號

全局唯一標記。system-sequenceHandlerType配置方式:
0本地文件、1數據庫、2本地時間戳、3分布式zkID、4遞增zk
server.xml

<system><property name="sequnceHandlerType">1</property></system> 
  • 1

總體兩種方式:遞增、時間戳。

本地文件方式

classpath:sequence_conf.properties,配置:

  • GLOBAL_SEQ.HISIDS;歷史分段
  • GLOBAL_SEQ.MINID;最小值
  • GLOBAL_SEQ.MAXID;最大值
  • GLOBAL_SEQ.CURID;當前值

使用:insert into user (id,name) values (next value for MYCATSEQ_GLOBAL,‘lkk’)

數據庫方式

讀取數據庫表,獲取序列號;表字段:name、current_value、increment

本地時間戳方式

ID=64位二進制;42(毫秒)+5(機器ID)+5(業務編碼)+12(重復累加)
每毫秒最多4096並發。
配置sequence_time_conf.properties:

  • WORKID;0-31
  • DATAACENTERID;0-31

分布式ZK ID生成器

規則類似本地時間戳

Zk遞增方式

規則類似本地文件

10 Mycat分片規則

數據切分原則

數據冗余、table group
全局表
所有分片都持有表實例。
join時優先選擇系統分片的全局表;數據更新時更新所有分片;select時隨機選擇分片。
ER分片表
表依賴,Table Group;子表與關聯的父表放在同一分片,避免跨庫。
多對多關聯
表A–中間表–表B;按關系偏向表分片。
采用非主鍵分片時,mycat會緩存id–node。

Mycat常用分片規則

val轉換:hash、取模
val–node映射:直接映射、范圍映射
分片枚舉
sharding-by-intfile
枚舉值直接映射到節點;適用於分片字段值固定的情況,如地域。
固定分片hash算法
rule1
划分1024個槽位,分配給各分片,sum(partitionCount[i]partitionLength[i])=1024;取id二進制低10位,映射到對應分片。
算法類似redis集群尋址。
范圍約定
auto-sharding-long
提前規划好分片字段范圍–node映射。類似分片枚舉。
取模
mod-long
批量插入時,增大事務一致性難度。
按日期分片
sharding-by-date
取模范圍約束
sharding-by-pattern
取模運算和范圍約束的結合;主要為后續數據遷移做准備。
一致性hash
sharding-by-murmur
解決分布式擴容問題。類似取模范圍約束,對232取模;232個槽位,分配到節點數
虛擬倍數個節點上。增刪節點時,只有部分區間受影響。
https://blog.csdn.net/NewxCJY/article/details/82667097

權限控制

user標簽,readOnly、schemas

進階

1 讀寫分離

MySQL主從復制方案
主從、主從從、雙主/多主(環)
原理
1,主庫事務提交前記錄日志
2,從庫拉取主庫日志,並按日志更新本地數據。
復制方式:基於sql語句SBR、基於行RBR、混合模式MBR
Mycat支持的讀寫分離
mycat不負責數據同步;
、;寫節點、讀節點,寫節點宕機后對應讀節點不可用。第一個writeHost為主節點,其余均為從節點。
事務內部的一切操作,都走寫節點。故讀操作不要加事務。

2 高可用與集群化

MySQL高可用方案
主從復制+讀寫分離;heartbeat+雙主復制;集群;MariaDBM Galera
Mycat高可用方案
mycat將第一個writeHost當做主節點,所有DML發往此節點。
寫節點宕機后,升級下一個writeHost為主節點。
建議使用mysql主從復制+心跳檢測+讀寫分離方式,由mycat負責主從切換。
mycat+HAProxy,保證mycat高可用

3 事務支持

單庫可保證事務完整性;跨庫弱XA(異常時全部回滾,commit時不保證全部成功)。
XA事務原理
分布式事務處理(DTP)模型:

  • AP;應用程序
  • TM;事務管理器
  • RM;資源管理器,一般為數據庫
  • CRM;通信資源管理器,消息中間件

XA,兩段式提交;處理–提交。TM必須記錄事務信息(XID、RM情況),在完全提交或回滾后才能丟棄。
XA事務問題和MySQL的局限
timeout問題,兩段提交增加事務時間。慢。
使用最終一致性、冪等邏輯,避免使用XA事務。
XA提交前沖突,可能導致主從不一致。

4 Mycat SQL攔截機制

執行前攔截sql;默認攔截器實現了mysql轉義字符替換。
自定義:
實現 SQLInterceptor,編譯后放到catlet文件夾。
修改server.xml;sqlInterceptor、sqlInterceptorType、sqlInterceptorFIle等參數。

5 Mycat注解

mycat執行流程:攔截、解析路由。注解指定dataNode、dataHost、schema。
格式:

  • /!mycat:注解表達式/SQL;前綴可為/!、/#、/**
  • /balance/;強制從寫節點查詢數據。主節點?

使用:

  1. 為sql語句指定分片
    /*mycat:sql=select 1 from test/CREATE PROCEDURE test_proc() BEGIN END ;
    /*mycat:sql=select 1 from test/insert into user2 select * from user1
  2. 指定節點(讀節點、寫節點)
    /balance/select * from user;強制從寫節點查詢
    /#mycat:db_type=master/ select * from travelrecord;主節點查詢
    /#mycat:db_type=slave/ select * from travelrecord;從節點查詢
  3. shareJoin,指定本分片join
    /*!mycat:catlet=demo.catlets.ShareJoin / select a.,b.id, b.name as tit from customer a,company b on a.company_id=b.id;
  4. 多租戶支持,指定分片。
    /*!mycat : schema = test_01 */ sql ;

6 Mycat支持的catlet實現

格式:/*mycat:catlet=classFullName/SQL
1,shareJoin,指定本分片join
/!mycat:catlet=demo.catlets.ShareJoin / select a.,b.id, b.name as tit from customer a,company b on a.company_id=b.id;
2,批量插入與ID自增長結合的支持
/
!mycat:catlet=demo.catlets.BatchInsertSequence / insert into sam_test(name_)
values(‘ t1’ ),(‘ t2’ );
3,獲取批量sequence值得支持
/
!mycat:catlet=demo.catlets.BatchGetSequence */SELECT mycat_get_seq(‘ MYCAT_TEST’ ,100);

7 JDBC多數據庫支持

dataHost,dbDriver改為jdbc,dbType改為對應數據庫名,如:oracle、mongodb等。
導入驅動文件到bin文件夾。

8 管理命令與監控

默認連接:mysql -uroot -p123456 -P9066
show @@help;查看所有命令

9 壓縮協議支持

需mycat、客戶端、mysql(默認開啟壓縮)均開啟壓縮。
mycat在server.xml–system–useCompression,設為1。
客戶端,mysql命令行加-C,jdbc加參數useCompression=true

10 Mycat-WEB

可視化監控,基於jrds實現。

  1. 下載安裝zookeeper;修改./conf/zoo_sample.cfg為zoo.cfg;運行./bin/zkServer.cmd
  2. 下載解壓mycat-web,https://github.com/MyCATApache/Mycat-download/tree/master/mycat-web-1.0;運行./start.bat
  3. 訪問mycat-web,localhost:8082/mycat。添加mycat及其vm監控實例;jmx端口在./conf/wrapper.conf。jmx連接信息localhost:1984。

jmx需自行開啟:-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1984 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
配置示例:https://blog.csdn.net/zhxdick/article/details/50728859


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM