Mycat 配置概述
阿新 • • 發佈:2020-08-14
核心配置檔案
1.server.xml
作用:
- 配置mycat系統性引數 (
標籤) - 配置使用者以及訪問許可權 (
標籤) - 配置sql防火牆以及sql攔截功能
常用完整屬性配,常用的mysql系統的完整配置
<system> <property name="serverPort">8066</property> <!-- mycat 管理埠 --> <property name="managerPort">9066</property> <!-- 0為需要密碼登陸、1為不需要密碼登陸 ,預設為0,設定為1則需要指定預設賬戶--> <property name="nonePasswordLogin">0</property> <property name="bindIp">0.0.0.0</property> <!--寫佇列大小--> <property name="frontWriteQueueSize">4096</property> <property name="charset">utf8</property> <!--事務隔離級別 3-可重複讀--> <property name="txIsolation">3</property> <!--mycat執行緒數量--> <property name="processors">8</property> <!--執行緒空閒多長時間斷開 毫秒--> <property name="idleTimeout">1800000</property> <!--秒--> <property name="sqlExecuteTimeout">300</property> <!-- 1為開啟實時統計、0為關閉 --> <property name="useSqlStat">0</property> <!-- 1為開啟全加班一致性檢測、0為關閉 --> <property name="useGlobleTableCheck">0</property> <property name="sequnceHandlerType">2</property> <!--預設引數--> <property name="defaultMaxLimit">100</property> <!--mysql中包的大小--> <property name="maxPacketSize">104857600</property> </system> <user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">TESTDB,TESTDB2,TESTDB3</property> <!-- 表級 DML 許可權設定 --> <!-- <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> --> </user> <user name="user"> <property name="password">user</property> <property name="password">user</property> <!--是否對明文進行加密--> <property name="usingDecrypt">0</property> <property name="schemas">TESTDB,TESTDB1,TESTDB2</property> <!--是否是預設賬號--> <property name="readOnly">false</property> <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> </user>
- dml 總的數字代表: 0110 -> insert,update,select,detele 0代表不具有此許可權,1代表有次許可權
- 使用者密碼加密配置
java -cp Mycat-server-1.6.5-release.jar 0:root:123456 (0:前端加密標誌 root:使用者名稱 123456:密碼)
配置:對應的user標籤1
2.rule.xml
作用
配置分片規則
分片表的配置規則
<tableRule name="hash-mod-2_id"> <rule> <columns>id</columns> <algorithm>hash–mode–2</algorithm> <rule> <tableRule>
- columns 分片列
- algorithm 分片演算法
配置表的分片演算法
<function name="hash-mode-2" class="io.mycat.route.function.PartitionByHashMod">
<property name="count">2</property>
</function>
常用分片演算法
- 簡單取模分片演算法 PartitionByMod
場景:分片列是整型,使用這種取模演算法
例子
<tableRule name="partition-mod-2-stuent_id">
<rule>
<columns>student_id</columns>
<algorithm>partition-mod-2</algorithm>
</rule>
</tableRule>
<function name="partition-mod-2" class="io.mycat.route.function.PartitionByMod">
<property name="count">2</property>
</function>
- 雜湊取模 PartitionByHashMod
場景:分片列適合所有型別
注意:如果hash一致的過多,可能會使某個分片資料庫資料過多。
例子
<tableRule name="partition-hash-mod-2-stuent_id">
<rule>
<columns>student_id</columns>
<algorithm>partition-hash-mod-2</algorithm>
</rule>
</tableRule>
<function name="partition-hash-mod-2" class="io.mycat.route.function.PartitionByHashMod">
<property name="count">2</property>
</function>
- 分片列舉演算法 PartitionByFileMap
場景: 根據有限個列舉型別進行分片
<tableRule name="partition-enums-file-mod-2-school_id">
<rule>
<columns>school_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="partition-enums-file-mod-2" class="io.mycat.route.functioin.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type">0</property>
<property name="defaultNode">0</property>
</function>
- property name="type" 定義列舉值型別,0代表整數型別,非0表示字串
- name="defaultNode" 是否使用預設節點,<0 : 不起用預設節點, >=0 表示啟用預設節點
- 相應的配置檔案,需要放在$MYCAT_HOME/conf 目錄下
- 列舉值可以指定資料的儲存位置
- 字串範圍取模分片演算法
擷取某個字串的一部分,作為分片的依據
演算法:擷取字串的某一段,然後assic碼相加,然後和取模基數進行取模計算。
<function name="sharding-by-prefix-patter" class="io.mycat.route.function.PartitionByPrefixPattern">
<property name="patternValue">128</property> <!--配置的取模基數-->
<property name="prefixLength">2</property> <!--取前2兩位-->
<property name="mapFile">prefix-partition-pattern.txt</property>
</function>
- prefix-partition-pattern.txt 記錄了 對應的取模範圍和後端節點的對應關係
- 可以根據指定字串的前N個字元確定儲存位置
3.schema.xml
用途
配置邏輯庫和邏輯表
配置邏輯表所儲存的資料節點
配置資料節點所對應的資料庫伺服器資訊
- 邏輯庫的定義
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="1000"></schema>
- sqlMaxLimit 當前邏輯庫預設返回的最大行數 , -1 時表示不限制
- checkSQLschema 是否檢查sql中含有庫名稱 ,true :檢查並刪除庫名 , false :不檢查
- 邏輯表定義
<table name="travelrecord" primeryKey="id" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
- name 邏輯表名 (邏輯表必須對應著物理表)
- primeryKey 主鍵
- dataNode : 儲存的實際的物理節點
- rule 引用分片規則
- dataNode 標籤
<dataNode name="dn1" dataHost="localhost1" database="db1" />
- name : 定義dataNode 的值
- dataHost mysql 叢集的地址
- database 物理資料庫的名稱
- dataHost 標籤
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
</writeHost>
<writeHost host="hostS1" url="localhost:3316" user="root" password="123456" />
</dataHost>
dataHost屬性
- name 組伺服器名稱,dataNode 標籤引用的依據,mycat中唯一
- maxCon , minCon 定義 最大連線數 ,最小連線數
- banlance 工作方式,取值
- 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",所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,
注意 balance=3 只在 1.4 及其以後版本有,1.3 沒有。
- writeType 負載均衡型別
- writeType="0", 所有寫操作傳送到配置的第一個 writeHost,第一個掛了切到還生存的第二個 writeHost,
重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties . - writeType="1",所有寫操作都隨機的傳送到配置的 writeHost,1.5 以後廢棄不推薦。
- writeType="0", 所有寫操作傳送到配置的第一個 writeHost,第一個掛了切到還生存的第二個 writeHost,
- switchType 是否自動切換寫資料庫
- -1 表示不自動切換。
- 1 預設值,自動切換。
- 2 基於 MySQL 主從同步的狀態決定是否切換。
- heartbeat 標籤,檢測心跳
- writeHost 標籤,指定寫例項
- readHost 標籤,指定讀例項
- schema.xml 完整標籤示例
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
</writeHost>
<writeHost host="hostS1" url="localhost:3316" user="root" password="123456" />
</dataHost>
</mycat:schema>