配置:
--bin 啟動目錄
--conf 配置文件存放配置文件:
--server.xml:是Mycat服務器參數調整和用戶授權的配置文件。
--schema.xml:是邏輯庫定義和表以及分片定義的配置文件。
--rule.xml: 是分片規則的配置文件,分片規則的具體一些參數信息單獨存放為文件,也在這個目錄下,配置文件修改需要重啟MyCAT。
--log4j.xml: 日志存放在logs/log中,每天一個文件,日志的配置是在conf/log4j.xml中,根據自己的需要可以調整輸出級別為debug debug級別下,會輸出更多的信息,方便排查問題。
--autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相關的id分片規則配置文件
--lib MyCAT自身的jar包或依賴的jar包的存放目錄。
--logs MyCAT日志的存放目錄。日志存放在logs/log中,每天一個文件
下面圖片描述了Mycat最重要的3大配置文件:
邏輯庫配置:
配置server.xml
添加兩個mycat邏輯庫:user,pay: system 參數是所有的mycat參數配置,比如添加解析器:defaultSqlParser,其他類推 user 是用戶參數。
<system>
<property name="defaultSqlParser">druidparser</property>
</system>
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">user,pay</property>
</user>
編輯schema.xml
修改dataHost和schema對應的連接信息,user,pay 垂直切分后的配置如下所示:
schema 是實際邏輯庫的配置,user,pay分別對應兩個邏輯庫,多個schema代表多個邏輯庫。
dataNode是邏輯庫對應的分片,如果配置多個分片只需要多個dataNode即可。
dataHost是實際的物理庫配置地址,可以配置多主主從等其他配置,多個dataHost代表分片對應的物理庫地址,下面的writeHost、readHost代表該分片是否配置多寫,主從,讀寫分離等高級特性。
以下例子配置了兩個writeHost為主從。
<schema name="user" checkSQLschema="false" sqlMaxLimit="100" dataNode="user" />
<schema name="pay" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay" >
<table name="order" dataNode="pay1,pay2" rule="rule1"/>
</schema>
<dataNode name="user" dataHost="host" database="user" />
<dataNode name="pay1" dataHost="host" database="pay1" />
<dataNode name="pay2" dataHost="host" database="pay2" />
<dataHost name="host" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select 1</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="root" />
<writeHost host="hostM2" url="192.168.0.3:3306" user="root" password="root" />
</dataHost>
編輯MYCAT_HOME/conf/schema.xml文件,增加對物理數據表映射信息:
一、schema節點中各屬性說明:
name:制定邏輯庫名稱;
checkSQLschema:如果為true,執行select * from TESTDB.travelrecord,則會修改為select * from travelrecord;即把表示schema的字段去掉;
sqlMaxLimit:當設置該值時,每條查詢SQL語句,如果沒有加上limit語句,MyCat也會自動的加上。例如值為100,則加上limit 100;
二、table節點中各屬性說明:
name:指定物理表名稱;
primaryKey:指定物理表主鍵名稱;例如:分片的規則是使用非主鍵進行分片的,那么在使用主鍵查詢的時候,就會發送查詢語句到所有的配置的DN上,如果使用該屬性配置真實表的主鍵。那么MyCat會緩存主鍵與具體DN的信息,那么再次使用非主鍵進行查詢的時候就不會進行廣播式查詢,就會直接發送語句給具體的DN,但是盡管配置該屬性,如果緩存並沒有命中的話,還是會發送語句給具體的DN,來獲取數據。
autoIncrement:指定主鍵是否采用自增長策略,如果不需要自增長可不用配置;
dataNode:指定表所在的邏輯數據節點,如果有多個節點可使用逗號分隔,也可使用表 達式dn$0-99 指定在0-99這100個節點上都使用(如果是一個節點上有多個庫可使用db1$0-99);
rule:指定路由規則;
ruleRequired:該屬性用於指定表是否綁定分片規則,如果為true,但是沒有配置rule的話,程序會報錯
type:定義邏輯表的類型,目前只有“全局表”和“普通表”兩種類型。
全劇表:global/普通表:不指定該值
needAddLimit:指定表是否需要自動的在每條語句加上limit 100限制,如果語句中有limit則不會在次添加,默認true
三、childTable節點中各屬性說明:
name:定義子表的表名
joinKey:插入子表的時候會使用這個列的值查找父表存儲的數據節點
parentKey:屬性指定的值一般為與父親建立關系的列名。程序首先會獲取joinKey的值,再通過parentKey屬性指定的列名產生查詢語句,通過執行該語句得到父表存儲在哪個分片上,從而確定子表存儲的位置。
primaryKey:同table標簽一樣
needAddLimit:同table標簽一樣
邏輯數據節點與物理主機配置:
四、dataNode節點中各屬性說明:
name:指定邏輯數據節點名稱;
dataHost:指定邏輯數據節點物理主機節點名稱;
database:指定物理主機數據庫。如果一個節點上有多個庫,可使用表達式db$0-99,表示指定0-99這100個數據庫;
五、dataHost 節點中各屬性說明:
定義了具體的數據庫實例額、讀寫分離配置和心跳語句。
name:物理主機節點名稱;
maxCon:指定物理主機服務最大支持1000個連接;指定每個讀寫實例都會使用這個屬性來實例化出連接池的最大連接。
minCon:指定物理主機服務最小保持10個連接;指定每個讀寫實例連接池的最小連接,初始化連接池的大小
writeType:指定寫入類型;
l 0,所有寫操作發送到配置的第一個writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動后已切換后的為准,切換記錄在配置文件中:dnindex.properties
l 1,所有寫操作都隨機的發送到配置的writeHost,1.5后廢除不推薦
dbType:指定數據庫類型;
dbDriver:指定數據庫驅動;目前可選的值有native和JDBC。
balance:指定物理主機服務的負載模式。負載均衡類型,目前取值有3種:
l 0,不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
l 1,全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡;
l 2,所有的readHost與writeHost都參與select語句的負載均衡,也就是說,當系統的寫操作壓力不大的情況下,所有主機都可以承擔負載均衡;
l 3,所有讀請求隨機的分發到writeHost對應的readhost執行,writerHost不負擔讀壓力,注意balance=3只在1.4及其以后版本有,1.3沒有。
switchType:
-1 表示不自動切換
1 默認值,自動切換
2 基於MySQL主從同步的狀態決定是否切換
心跳語句為 show slave status
3 基於MySQL galary cluster的切換機制(適合集群)(1.4.1)
心跳語句為show status like ‘sweep%'
tempReadHostAvailable:
如果配置了這個屬性 writeHost下面的readHost仍舊可用,默認0,可配置(0、1)
一個dataHost元素,表明進行了數據同步的一組數據庫,DBA需要保證這一組數據庫服務器是進行了數據同步復制的。writeHost相當於Master DB Server,而其下的readHost則是與從數據庫同步的Slave DB Server。當dataHost配置了多個writeHost的時候,任何一個writeHost宕機,Mycat 都會自動檢測出來,並嘗試切換到下一個可用的writeHost;
MyCAT支持高可用性的企業級特性,根據您的應用特性,可以配置如下幾種策略:
l 后端數據庫配置為一主多從,並開啟讀寫分離機制;
l 后端數據庫配置為雙主雙從(多從),並開啟讀寫分離機制;
l 后端數據庫配置為多主多從,並開啟讀寫分離機制;
后面兩種配置,具有更高的系統可用性,當其中一個寫節點(主節點)失敗后,Mycat會偵測出來(心跳機制)並自動切換到下一個寫節點,MyCAT在任何時候,只會往一個寫節點寫數據;
下面是典型的雙主雙從的Mysql集群配置:
六、heartbeat標簽
這個標簽指明用於和后端數據庫進行心跳檢查的語句。
Mysql可以使用 select user()
Oracle select 1 from dual
主從切換必須是:show slave status
七、writeHost標簽、readHost標簽
如何writeHost指定的后端數據庫宕機,那么該下面的所有readHost都不可用。
host:標識不同的實例。一般writeHost用*M1,readjust用*S1
url:實例連接地址
user :用戶名
password:密碼
weight:權重配置在readhost中作為讀節點的權重(1.4以后)
usingDecrypt:是否對密碼加密默認0 否,開啟 1