溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mycat三大核心配置文件是什么

發(fā)布時(shí)間:2021-10-22 14:53:11 來源:億速云 閱讀:149 作者:iii 欄目:數(shù)據(jù)庫

這篇文章主要介紹“Mycat三大核心配置文件是什么”,在日常操作中,相信很多人在Mycat三大核心配置文件是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mycat三大核心配置文件是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

Mycat的三大核心配置文件:server.xml、schema.xml和rule.xml。

server.xml

server.xml幾乎保存了所有mycat需要的系統(tǒng)配置信息。其在代碼內(nèi)直接的映射類為SystemConfig類?,F(xiàn)在就對這個(gè)文件中的配置進(jìn)行相關(guān)的介紹

user標(biāo)簽

<user name="test">  <property name="password">test</property>  <property name="schemas">TESTDB</property>  <property name="readOnly">true</property> </user>

server.xml中的標(biāo)簽本就不多,這個(gè)標(biāo)簽主要用于定義登錄mycat的用戶和權(quán)限。例如上面的例子中,我定義了一個(gè)用戶,用戶名為test、密碼也為test,可訪問的schema也只有TESTDB一個(gè)。如果我在schema.xml中定義了多個(gè)schema,那么這個(gè)用戶是無法訪問其他的schema。在mysql客戶端看來則是無法使用use切換到這個(gè)其他的數(shù)據(jù)庫。如果使用了use命令,則mycat會報(bào)出這樣的錯誤提示:ERROR  1044 (HY000): Access denied for user 'test' to database  'xxx'這個(gè)標(biāo)簽嵌套的property標(biāo)簽則是具體聲明的屬性值,正如上面的例子。我們可以修改user標(biāo)簽的name屬性來指定用戶名;修改password內(nèi)的文本來修改密碼;修改readOnly為true  或false來限制用戶是否只是可讀的;修改schemas內(nèi)的文本來控制用戶可放問的schema;修改schemas內(nèi)的文本來控制用戶可訪問的schema,同時(shí)訪問多個(gè)schema的話使用  , 隔開,例如:

<property name="schemas">TESTDB,db1,db2</property>

system標(biāo)簽

這個(gè)標(biāo)簽內(nèi)嵌套的所有property標(biāo)簽都與系統(tǒng)配置有關(guān),請注意,下面我會省去標(biāo)簽property直接使用這個(gè)標(biāo)簽的name屬性內(nèi)的值來介紹這個(gè)屬性的作用。

defaultSqlParser屬性

由于mycat最初是時(shí)候Foundation  DB的sql解析器,而后才添加的Druid的解析器。所以這個(gè)屬性用來指定默認(rèn)的解析器。目前的可用的取值有:druidparser和  fdbparser。使用的時(shí)候可以選擇其中的一種,目前一般都使用druidparser。

processors屬性

這個(gè)屬性主要用于指定系統(tǒng)可用的線程數(shù),默認(rèn)值為Runtime.getRuntime().availableProcessors()方法返回的值。主要影響processorBufferPool、processorBufferLocalPercent、processorExecutor屬性。NIOProcessor的個(gè)數(shù)也是由這個(gè)屬性定義的,所以調(diào)優(yōu)的時(shí)候可以適當(dāng)?shù)恼{(diào)高這個(gè)屬性。

processorBufferChunk屬性

這個(gè)屬性指定每次分配Socket Direct Buffer的大小,默認(rèn)是4096個(gè)字節(jié)。這個(gè)屬性也影響buffer pool的長度。

processorBufferPool屬性

這個(gè)屬性指定bufferPool計(jì)算  比例值。由于每次執(zhí)行NIO讀、寫操作都需要使用到buffer,系統(tǒng)初始化的時(shí)候會建立一定長度的buffer池來加快讀、寫的效率,減少建立buffer的時(shí)間。

兩個(gè)主要的buffer池

BufferPool和ThreadLocalPool

BufferPool由ThreadLocalPool組合而成,每次從BufferPool中獲取buffer都會優(yōu)先獲取ThreadLocalPool中的buffer,未命中之后才會去獲取BufferPool中的buffer。也就是說ThreadLocalPool是作為BufferPool的二級緩存,每個(gè)線程內(nèi)部自己使用的。當(dāng)然,這其中還有一些限制條件需要線程的名字是由$_開頭。然而,BufferPool上的buffer則是每個(gè)NIOProcessor都共享的。默認(rèn)這個(gè)屬性的值為:

默認(rèn)bufferChunkSize(4096) * processors屬性 * 1000 BufferPool的總長度 =  bufferPool / bufferChunk。

若bufferPool不是bufferChunk的整數(shù)倍,則總長度為前面計(jì)算得出的商 + 1 假設(shè)系統(tǒng)線程數(shù)為4,其他都為屬性的默認(rèn)值,則:

bufferPool = 4096 * 4 * 1000  BufferPool的總長度 : 4000 = 16384000 / 4096

processorBufferLocalPercent屬性

前面提到了ThreadLocalPool。這個(gè)屬性就是用來控制分配這個(gè)pool的大小用的,但其也并不是一個(gè)準(zhǔn)確的值,也是一個(gè)比例值。這個(gè)屬性默認(rèn)值為100。

線程緩存百分比 = bufferLocalPercent / processors屬性。

例如,系統(tǒng)可以同時(shí)運(yùn)行4個(gè)線程,使用默認(rèn)值,則根據(jù)公式每個(gè)線程的百分比為25。最后根據(jù)這個(gè)百分比來計(jì)算出具體的。

ThreadLocalPool的長度公式如下:

ThreadLocalPool的長度 = 線程緩存百分比 * BufferPool長度 / 100

假設(shè)BufferPool的長度為 4000,其他保持默認(rèn)值。那么最后每個(gè)線程建立上的ThreadLocalPool的長度為:1000 = 25 *  4000 / 100

processorExecutor屬性

這個(gè)屬性主要用于指定NIOProcessor上共享的businessExecutor固定線程池大小。mycat在需要處理一些異步邏輯的時(shí)候會把任務(wù)提交到這個(gè)線程池中。新版本中這個(gè)連接池的使用頻率不是很大了,可以設(shè)置一個(gè)較小的值。

sequnceHandlerType屬性

指定使用Mycat全局序列的類型。0為本地文件方式,1為數(shù)據(jù)庫方式。默認(rèn)是使用本地文件方式,文件方式主要只是用于測試使用。

TCP連接相關(guān)屬性

StandardSocketOptions.SO_RCVBUF StandardSocketOptions.SO_SNDBUF StandardSocketOptions.TCP_NODELAY

以上這三個(gè)屬性,分別由:

  • frontSocketSoRcvbuf 默認(rèn)值:1024 * 1024

  • frontSocketSoSndbuf 默認(rèn)值:4 * 1024 * 1024

  • frontSocketNoDelay 默認(rèn)值:1

  • backSocketSoRcvbuf 默認(rèn)值:4 * 1024 * 1024

  • backSocketSoSndbuf 默認(rèn)值:1024 * 1024

  • backSocketNoDelay 默認(rèn)值:1

各自設(shè)置前后端TCP連接參數(shù)。Mycat在每次建立前、后端連接的時(shí)候都會使用這些參數(shù)初始化連接。可以按系統(tǒng)要求適當(dāng)?shù)恼{(diào)整這些buffer的大小。TCP連接參數(shù)的定義,可以查看Javadoc。MySQL連接相關(guān)屬性初始化mysql前后端連接所涉及到的一些屬性:

  • packetHeaderSize : 指定Mysql協(xié)議中的報(bào)文頭長度。默認(rèn)4。

  • maxPacketSize : 指定Mysql協(xié)議可以攜帶的數(shù)據(jù)最大長度。默認(rèn)16M。

  • idleTimeout :  指定連接的空閑超時(shí)時(shí)間。某連接在發(fā)起空閑檢查下,發(fā)現(xiàn)距離上次使用超過了空閑時(shí)間,那么這個(gè)連接會被回收,就是被直接的關(guān)閉掉。默認(rèn)30分鐘。

  • charset : 連接的初始化字符集。默認(rèn)為utf8。

  • txIsolation :  前端連接的初始化事務(wù)隔離級別,只在初始化的時(shí)候使用,后續(xù)會根據(jù)客戶端傳遞過來的屬性對后端數(shù)據(jù)庫連接進(jìn)行同步。默認(rèn)為REPEATED_READ。

  • sqlExecuteTimeout:SQL執(zhí)行超時(shí)的時(shí)間,Mycat會檢查連接上最后一次執(zhí)行SQL的時(shí)間,若超過這個(gè)時(shí)間則會直接關(guān)閉這連接。默認(rèn)時(shí)間為300秒。

周期間隔相關(guān)屬性

mycat中有幾個(gè)周期性的任務(wù)來異步的處理一些我需要的工作。這些屬性就在系統(tǒng)調(diào)優(yōu)的過程中也是比不可少的。

  • processorCheckPeriod : 清理NIOProcessor上前后端空閑、超時(shí)和關(guān)閉連接的間隔時(shí)間。默認(rèn)是1秒。

  • dataNodeIdleCheckPeriod : 對后端連接進(jìn)行空閑、超時(shí)檢查的時(shí)間間隔,默認(rèn)是60秒。

  • dataNodeHeartbeatPeriod : 對后端所有讀、寫庫發(fā)起心跳的間隔時(shí)間,默認(rèn)是10秒。

服務(wù)相關(guān)屬性

這里介紹一個(gè)與服務(wù)相關(guān)的屬性,主要會影響外部系統(tǒng)對myact的感知。

  • bindIp : mycat服務(wù)監(jiān)聽的IP地址,默認(rèn)值為0.0.0.0。

  • serverPort : 定義mycat的使用端口,默認(rèn)值為8066。

  • managerPort : 定義mycat的管理端口,默認(rèn)值為9066。

schema.xml

schema.xml作為MyCat中重要的配置文件之一,管理著MyCat的邏輯庫、表、分片規(guī)則、DataNode以及DataSource。弄懂這些配置,是正確使用MyCat的前提。這里就一層層對該文件進(jìn)行解析。

<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/">    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">   <table name="user" dataNode="dn1,dn2" rule="auto-sharding-long" />   <table name="stat_tcp_stream" dataNode="dn2,dn3" rule="auto-sharding-long" />  </schema>  <dataNode name="dn1" dataHost="localhost1" database="mpos_tshark_miner_2014" />  <dataNode name="dn2" dataHost="localhost2" database="mpos_tshark_miner2014" />  <dataNode name="dn3" dataHost="localhost3" database="mpos_tshark_hrtel" />    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" dbType="mysql" dbDriver="jdbc" writeType="0" switchType="1"  slaveThreshold="100">   <heartbeat>select user()</heartbeat>   <writeHost host="hostM1" url="jdbc:mysql://192.168.1.150:5029" user="root" password="root"></writeHost>  </dataHost>  <dataHost name="localhost2" maxCon="1000" minCon="1" balance="0" dbType="mysql" dbDriver="jdbc">    <heartbeat>   </heartbeat>    <writeHost host="hostM2" url="jdbc:mysql://192.168.1.150:5029" user="root"  password="root"></writeHost>    </dataHost>    <dataHost name="localhost3" maxCon="1000" minCon="1" balance="0" dbType="mysql" dbDriver="jdbc">    <heartbeat>   </heartbeat>    <writeHost host="hostM3" url="jdbc:mysql://192.168.1.150:5029" user="root"  password="root"></writeHost>    </dataHost>    </mycat:schema>

schema標(biāo)簽

dataNode

該屬性用于綁定邏輯庫到某個(gè)具體的database上,如果定義了這個(gè)屬性,那么這個(gè)邏輯庫就不能工作在分庫分表模式下了。也就是說對這個(gè)邏輯庫的所有操作會直接作用到綁定的dataNode上,這個(gè)schema就可以用作讀寫分離和主從切換,具體如下配置:

<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!&mdash;這里不能配置任何邏輯表信息--> </schema>

那么現(xiàn)在USERDB就綁定到dn1所配置的具體database上,可以直接訪問這個(gè)database。當(dāng)然該屬性只能配置綁定到一個(gè)database上,不能綁定多個(gè)dn。

checkSQLschema

當(dāng)該值設(shè)置為 true 時(shí),如果我們執(zhí)行語句 select * from TESTDB.travelrecord; 則MyCat會把語句修改為  select * from travelrecord; 。即把表示schema的字符去掉,避免發(fā)送到后端數(shù)據(jù)庫執(zhí)行時(shí)報(bào) (ERROR 1146 (42S02):  Table &lsquo;testdb.travelrecord&rsquo; doesn&rsquo;t exist)。 不過,即使設(shè)置該值為 true  ,如果語句所帶的是并非是schema指定的名字,例如:select * from db1.travelrecord;  那么MyCat并不會刪除db1這個(gè)字段,如果沒有定義該庫的話則會報(bào)錯,所以在提供SQL語句的最好是不帶這個(gè)字段。

sqlMaxLimit

當(dāng)該值設(shè)置為某個(gè)數(shù)值時(shí)。每條執(zhí)行的SQL語句,如果沒有加上limit語句,MyCat也會自動的加上所對應(yīng)的值。例如設(shè)置值為100,執(zhí)行 select *  from TESTDB.travelrecord; 的效果為和執(zhí)行 select * from TESTDB.travelrecord limit 100;  相同。不設(shè)置該值的話,MyCat默認(rèn)會把查詢到的信息全部都展示出來,造成過多的輸出。所以,在正常使用中,還是建議加上一個(gè)值,用于減少過多的數(shù)據(jù)返回。當(dāng)然SQL語句中也顯式的指定limit的大小,不受該屬性的約束。

table標(biāo)簽

<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" ></table>

Table 標(biāo)簽定義了MyCat中的邏輯表,所有需要拆分的表都需要在這個(gè)標(biāo)簽中定義。

name屬性

定義邏輯表的表名,這個(gè)名字就如同我在數(shù)據(jù)庫中執(zhí)行create table命令指定的名字一樣,同個(gè)schema標(biāo)簽中定義的名字必須唯一。

dataNode屬性

定義這個(gè)邏輯表所屬的dataNode,  該屬性的值需要和dataNode標(biāo)簽中name屬性的值相互對應(yīng)。如果需要定義的dn過多可以使用如下的方法減少配置:

<table name="travelrecord" dataNode="multipleDn$0-99,multipleDn2$100-199" rule="auto-sharding-long" ></table> <dataNode name="multipleDn" dataHost="localhost1" database="db$0-99" ></dataNode> <dataNode name="multipleDn2" dataHost="localhost1" database=" db$0-99" ></dataNode>

這里需要注意的是database屬性所指定的真實(shí)database  name需要在后面添加一個(gè),例如上面的例子中,我需要在真實(shí)的mysql上建立名稱為dbs0到dbs99的database。

rule屬性

該屬性用于指定邏輯表要使用的規(guī)則名字,規(guī)則名字在rule.xml中定義,必須與tableRule標(biāo)簽中name屬性屬性值一一對應(yīng)。

primaryKey屬性

該邏輯表對應(yīng)真實(shí)表的主鍵,例如:分片的規(guī)則是使用非主鍵進(jìn)行分片的,那么在使用主鍵查詢的時(shí)候,就會發(fā)送查詢語句到所有配置的DN上,如果使用該屬性配置真實(shí)表的主鍵。難么MyCat會緩存主鍵與具體DN的信息,那么再次使用非主鍵進(jìn)行查詢的時(shí)候就不會進(jìn)行廣播式的查詢,就會直接發(fā)送語句給具體的DN,但是盡管配置該屬性,如果緩存并沒有命中的話,還是會發(fā)送語句給具體的DN,來獲得數(shù)據(jù)。

type屬性

該屬性定義了邏輯表的類型,目前邏輯表只有“全局表”和”普通表”兩種類型。對應(yīng)的配置:全局表:global。普通表:不指定該值為globla的所有表。

autoIncrement屬性

MySQL對非自增長主鍵,使用last_insert_id()是不會返回結(jié)果的,只會返回0。所以,只有定義了自增長主鍵的表才可以用last_insert_id()返回主鍵值。mycat目前提供了自增長主鍵功能,但是如果對應(yīng)的mysql節(jié)點(diǎn)上數(shù)據(jù)表,沒有定義auto_increment,那么在mycat層調(diào)用last_insert_id()也是不會返回結(jié)果的。由于insert操作的時(shí)候沒有帶入分片鍵,mycat會先取下這個(gè)表對應(yīng)的全局序列,然后賦值給分片鍵。這樣才能正常的插入到數(shù)據(jù)庫中,最后使用last_insert_id()才會返回插入的分片鍵值。如果要使用這個(gè)功能最好配合使用數(shù)據(jù)庫模式的全局序列。使用autoIncrement=“true”  指定這個(gè)表有使用自增長主鍵,這樣mycat才會不拋出分片鍵找不到的異常。使用autoIncrement=“false”  來禁用這個(gè)功能,當(dāng)然你也可以直接刪除掉這個(gè)屬性。默認(rèn)就是禁用的。

needAddLimit屬性

指定表是否需要自動的在每個(gè)語句后面加上limit限制。由于使用了分庫分表,數(shù)據(jù)量有時(shí)會特別巨大。這時(shí)候執(zhí)行查詢語句,如果恰巧又忘記了加上數(shù)量限制的話。那么查詢所有的數(shù)據(jù)出來,也夠等上一小會兒的。所以,mycat就自動的為我們加上LIMIT  100。當(dāng)然,如果語句中有l(wèi)imit,就不會在次添加了。這個(gè)屬性默認(rèn)為true,你也可以設(shè)置成false`禁用掉默認(rèn)行為。

childTable標(biāo)簽

childTable標(biāo)簽用于定義E-R分片的子表。通過標(biāo)簽上的屬性與父表進(jìn)行關(guān)聯(lián)

<table name="customer" primaryKey="ID" dataNode="dn1,dn2"  rule="sharding-by-intfile">  <childTable name="orders" primaryKey="ID" joinKey="customer_id"   parentKey="id">   <childTable name="order_items" joinKey="order_id"    parentKey="id" />  </childTable>  <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"   parentKey="id" /> </table>

name屬性

定義子表的表名。

joinKey屬性

插入子表的時(shí)候會使用這個(gè)列的值查找父表存儲的數(shù)據(jù)節(jié)點(diǎn)。

parentKey屬性

屬性指定的值一般為與父表建立關(guān)聯(lián)關(guān)系的列名。程序首先獲取joinkey的值,再通過 parentKey  屬性指定的列名產(chǎn)生查詢語句,通過執(zhí)行該語句得到父表存儲在哪個(gè)分片上。從而確定子表存儲的位置。

primaryKey屬性

同table標(biāo)簽所描述的。

needAddLimit屬性

同table標(biāo)簽所描述的。

dataNode標(biāo)簽

<dataNode name="dn1" dataHost="lch4307" database="db1" ></dataNode>

dataNode 標(biāo)簽定義了MyCat中的數(shù)據(jù)節(jié)點(diǎn),也就是我們通常說所的數(shù)據(jù)分片。一個(gè)dataNode  標(biāo)簽就是一個(gè)獨(dú)立的數(shù)據(jù)分片。例子中所表述的意思為:使用名字為lch4307數(shù)據(jù)庫實(shí)例上的db1物理數(shù)據(jù)庫,這就組成一個(gè)數(shù)據(jù)分片,最后,我們使用名字dn1標(biāo)識這個(gè)分片。

name屬性

定義數(shù)據(jù)節(jié)點(diǎn)的名字,這個(gè)名字需要是唯一的,我們需要在table標(biāo)簽上應(yīng)用這個(gè)名字,來建立表與分片對應(yīng)的關(guān)系。

dataHost屬性

該屬性用于定義該分片屬于哪個(gè)數(shù)據(jù)庫實(shí)例的,屬性值是引用dataHost標(biāo)簽上定義的name屬性。

database屬性

該屬性用于定義該分片屬性哪個(gè)具體數(shù)據(jù)庫實(shí)例上的具體庫,因?yàn)檫@里使用兩個(gè)緯度來定義分片,就是:實(shí)例+具體的庫。因?yàn)槊總€(gè)庫上建立的表和表結(jié)構(gòu)是一樣的。所以這樣做就可以輕松的對表進(jìn)行水平拆分。

dataHost標(biāo)簽

作為Schema.xml中最后的一個(gè)標(biāo)簽,該標(biāo)簽在mycat邏輯庫中也是作為最底層的標(biāo)簽存在,直接定義了具體的數(shù)據(jù)庫實(shí)例、讀寫分離配置和心跳語句?,F(xiàn)在我們就解析下這個(gè)標(biāo)簽。

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="123456"> <!-- can have multi read hosts --> <!-- <readHost host="hostS1" url="localhost:3306" user="root" password="123456" /> --> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost>

name屬性

唯一標(biāo)識dataHost標(biāo)簽,供上層的標(biāo)簽使用。

maxCon屬性

指定每個(gè)讀寫實(shí)例連接池的最大連接。也就是說,標(biāo)簽內(nèi)嵌套的writeHost、readHost標(biāo)簽都會使用這個(gè)屬性的值來實(shí)例化出連接池的最大連接數(shù)。

minCon屬性

指定每個(gè)讀寫實(shí)例連接池的最小連接,初始化連接池的大小。

balance屬性

負(fù)載均衡類型,目前的取值有3種:

  • balance=“0”, 所有讀操作都發(fā)送到當(dāng)前可用的writeHost上。

  • balance=“1”,所有讀操作都隨機(jī)的發(fā)送到readHost。

  • balance=“2”,所有讀操作都隨機(jī)的在writeHost、readhost上分發(fā)。

writeType屬性

負(fù)載均衡類型,目前的取值有3種:

  • writeType=“0”, 所有寫操作都發(fā)送到可用的writeHost上。

  • writeType=“1”,所有寫操作都隨機(jī)的發(fā)送到readHost。

  • writeType=“2”,所有寫操作都隨機(jī)的在writeHost、readhost分上發(fā)。

dbType屬性

指定后端連接的數(shù)據(jù)庫類型,目前支持二進(jìn)制的mysql協(xié)議,還有其他使用JDBC連接的數(shù)據(jù)庫。例如:mongodb、oracle、spark等。

dbDriver屬性

指定連接后端數(shù)據(jù)庫使用的Driver,目前可選的值有native和JDBC。使用native的話,因?yàn)檫@個(gè)值執(zhí)行的是二進(jìn)制的mysql協(xié)議,所以可以使用mysql和maridb。其他類型的數(shù)據(jù)庫則需要使用JDBC驅(qū)動來支持。如果使用JDBC的話需要將符合JDBC  4標(biāo)準(zhǔn)的驅(qū)動JAR包放到MYCAT\lib目錄下,并檢查驅(qū)動JAR包中包括如下目錄結(jié)構(gòu)的文件:META-INF\services\java.sql.Driver。在這個(gè)文件內(nèi)寫上具體的Driver類名,例如:com.mysql.jdbc.Driver。

heartbeat標(biāo)簽

這個(gè)標(biāo)簽內(nèi)指明用于和后端數(shù)據(jù)庫進(jìn)行心跳檢查的語句。例如,MYSQL可以使用select user(),Oracle可以使用select 1 from  dual等。這個(gè)標(biāo)簽還有一個(gè)connectionInitSql屬性,主要是當(dāng)使用Oracla數(shù)據(jù)庫時(shí),需要執(zhí)行的初始化SQL語句就這個(gè)放到這里面來。例如:alter  session set nls_date_format='yyyy-mm-dd hh34:mi:ss'

writeHost標(biāo)簽、readHost標(biāo)簽

這兩個(gè)標(biāo)簽都指定后端數(shù)據(jù)庫的相關(guān)配置給mycat,用于實(shí)例化后端連接池。唯一不同的是,writeHost指定寫實(shí)例、readHost指定讀實(shí)例,組著這些讀寫實(shí)例來滿足系統(tǒng)的要求。在一個(gè)dataHost內(nèi)可以定義多個(gè)writeHost和readHost。但是,如果writeHost指定的后端數(shù)據(jù)庫宕機(jī),那么這個(gè)writeHost綁定的所有readHost都將不可用。另一方面,由于這個(gè)writeHost宕機(jī)系統(tǒng)會自動的檢測到,并切換到備用的writeHost上去。這兩個(gè)標(biāo)簽的屬性相同,這里就一起介紹。

host屬性

用于標(biāo)識不同實(shí)例,一般writeHost我們使用M1,readHost我們用S1。

url屬性

后端實(shí)例連接地址,如果是使用native的dbDriver,則一般為address:port這種形式。用JDBC或其他的dbDriver,則需要特殊指定。當(dāng)使用JDBC時(shí)則可以這么寫:jdbc:mysql://localhost:3306/。

user屬性

后端存儲實(shí)例需要的用戶名字

password屬性

后端存儲實(shí)例需要的密碼

rule.xml

rule.xml里面就定義了我們對表進(jìn)行拆分所涉及到的規(guī)則定義。我們可以靈活的對表使用不同的分片算法,或者對表使用相同的算法但具體的參數(shù)不同。這個(gè)文件里面主要有tableRule和function這兩個(gè)標(biāo)簽。在具體使用過程中可以按照需求添加tableRule和function。

tableRule標(biāo)簽

這個(gè)標(biāo)簽定義表規(guī)則。定義的表規(guī)則,在rule.xml:

<tableRule name="rule1">  <rule>   <columns>id</columns>   <algorithm>func1</algorithm>  </rule> </tableRule>

name 屬性指定唯一的名字,用于標(biāo)識不同的表規(guī)則。內(nèi)嵌的rule標(biāo)簽則指定對物理表中的哪一列進(jìn)行拆分和使用什么路由算法。columns  內(nèi)指定要拆分的列名字。algorithm  使用function標(biāo)簽中的name屬性。連接表規(guī)則和具體路由算法。當(dāng)然,多個(gè)表規(guī)則可以連接到同一個(gè)路由算法上。標(biāo)簽內(nèi)使用。讓邏輯表使用這個(gè)規(guī)則進(jìn)行分片。

function標(biāo)簽

<function name="hash-int" class="org.opencloudb.route.function.PartitionByFileMap">  <property name="mapFile">partition-hash-int.txt</property> </function>

其中,各屬性如下所示。

  • name 指定算法的名字。

  • class 制定路由算法具體的類名字。

  • property 為具體算法需要用到的一些屬性。

到此,關(guān)于“Mycat三大核心配置文件是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI