server.xml 幾乎保存了所有 mycat 需要的系統(tǒng)配置信息宾袜。其在代碼內(nèi)直接的映射類為 SystemConfig 類。
1.user標(biāo)簽:
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="benchmark">11111</property>
<proerty name="usingDecrypt">1</property>
<privileges check="false">
<schema name="TESTDB" dml="0010" showTables="custome/mysql">
<table name="tbl_user" dml="0110"></table>
<table name="tbl_dynamic dml="1111"></table>
</schema>
</privileges>
</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ù)庫(kù)。
如果使用了 use 命令沪摄,則 mycat 會(huì)報(bào)出這樣的錯(cuò)誤提示:
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>
Benchmark 屬性:
Benchmark:mycat連接服務(wù)降級(jí)處理:benchmark基準(zhǔn),當(dāng)前端的整體connection數(shù)達(dá)到基準(zhǔn)值是,對(duì)來自該賬戶的請(qǐng)求開始拒絕連接奕筐,0或不設(shè)表示不限制.例如:
<property name="benchmark">1000</property>
usingDecrypt 屬性:
是否對(duì)密碼加密默認(rèn) 0 否 如需要開啟配置 1,同時(shí)使用加密程序?qū)γ艽a加密变骡,加密命令為:
執(zhí)行 mycat jar 程序:
java -cp Mycat-server-1.4.1-dev.jar org.opencloudb.util.DecryptUtil 0:user:password
Mycat-server-1.4.1-dev.jar 為 mycat download 下載目錄的 jar
1:host:user:password 中 0 為前端加密標(biāo)志
privileges 子節(jié)點(diǎn):
對(duì)用戶的 schema 及 下級(jí)的 table 進(jìn)行精細(xì)化的 DML 權(quán)限控制离赫,privileges 節(jié)點(diǎn)中的 check 屬性是用于標(biāo)識(shí)是否開啟 DML 權(quán)限檢查, 默認(rèn) false 標(biāo)識(shí)不檢查塌碌,當(dāng)然 privileges 節(jié)點(diǎn)不配置渊胸,等同 check=false,由于 Mycat 一個(gè)用戶的 schemas 屬性可配置多個(gè) schema ,所以 privileges 的下級(jí)節(jié)點(diǎn) schema 節(jié)點(diǎn)同樣可配置多個(gè)台妆,對(duì)多庫(kù)多表進(jìn)行細(xì)粒度的 DML 權(quán)限控制
Schema/Table 上的 dml 屬性描述
privileges 配置事例如下:
<privileges check="true">
<schema name="TESTDB" dml="0010">
<table name="table01" dml="0111"></table>
<table name="table02" dml="0101"></table>
</schema>
</privileges>
2.system 標(biāo)簽:
這個(gè)標(biāo)簽內(nèi)嵌套的所有 property 標(biāo)簽都與系統(tǒng)配置有關(guān)胖翰,請(qǐng)注意,下面我會(huì)省去標(biāo)簽 property 直接使用這個(gè)標(biāo)簽的 name 屬性內(nèi)的值來介紹這個(gè)屬性的作用切厘。
charset 屬性:字符集設(shè)置
<system>
<property name="charset">utf8</property>
</system>
defaultSqlParser 屬性:
由于 mycat 最初是時(shí)候 Foundation DB 的 sql 解析器萨咳,而后才添加的 Druid 的解析器。所以這個(gè)屬性用來指定默認(rèn)的解析器疫稿。目前的可用的取值有:druidparser 和 fdbparser培他。使用的時(shí)候可以選擇其中的一種,目前一般都使用 druidparser遗座。
1.3 解析器默認(rèn)為 fdbparser舀凛,1.4 默認(rèn)為 druidparser,1.4 以后 fdbparser 作廢途蒋。
processors 屬性:
這個(gè)屬性主要用于指定系統(tǒng)可用的線程數(shù)猛遍,默認(rèn)值為機(jī)器 CPU 核心線程數(shù)。
主要影響 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 的長(zhǎng)度日麸。如果一次性獲取的數(shù)過大 buffer 不夠用 經(jīng)常出現(xiàn)警告寄啼,則可以適當(dāng)調(diào)大.
processorBufferPool 屬性:
這個(gè)屬性指定 bufferPool 計(jì)算比例值。由于每次執(zhí)行 NIO 讀代箭、寫操作都需要使用到 buffer墩划,系統(tǒng)初始化的時(shí)候會(huì)建立一定長(zhǎng)度的 buffer 池來加快讀、寫的效率嗡综,減少建立 buffer 的時(shí)間乙帮。
Mycat 中有兩個(gè)主要的 buffer 池:
- BufferPool
- ThreadLocalPool
BufferPool 由 ThreadLocalPool 組合而成,每次從 BufferPool 中獲取 buffer 都會(huì)優(yōu)先獲取ThreadLocalPool 中的 buffer极景,未命中之后才會(huì)去獲取 BufferPool 中的 buffer察净。也就是說 ThreadLocalPool 是作為 BufferPool 的二級(jí)緩存,每個(gè)線程內(nèi)部自己使用的盼樟。當(dāng)然氢卡,這其中還有一些限制條件需要線程的名字是由$_開頭。然而晨缴,BufferPool 上的 buffer 則是每個(gè) NIOProcessor 都共享的译秦。
? ? ? ? 默認(rèn)這個(gè)屬性的值為:默認(rèn) bufferChunkSize(4096) * processors 屬性 * 1000
? ? ? ? BufferPool 的總長(zhǎng)度 = bufferPool / bufferChunk。
? ? ? ? 若 bufferPool 不是 bufferChunk 的整數(shù)倍,則總長(zhǎng)度為前面計(jì)算得出的商 + 1
? ? ? ? 假設(shè)系統(tǒng)線程數(shù)為 4筑悴,其他都為屬性的默認(rèn)值们拙,則:
? ? ? ? bufferPool = 4096 * 4 * 1000
? ? ? ? BufferPool 的總長(zhǎng)度 : 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 的長(zhǎng)度公式如下:
ThreadLocalPool 的長(zhǎng)度 = 線程緩存百分比 * BufferPool 長(zhǎng)度 / 100
假設(shè) BufferPool 的長(zhǎng)度為 4000摔刁,其他保持默認(rèn)值挥转。
那么最后每個(gè)線程建立上的 ThreadLocalPool 的長(zhǎng)度為: 1000 = 25 * 4000 / 100
processorExecutor 屬性:
這個(gè)屬性主要用于指定 NIOProcessor 上共享的 businessExecutor 固定線程池大小。 mycat 在需要處理一些異步邏輯的時(shí)候會(huì)把任務(wù)提交到這個(gè)線程池中共屈。新版本中這個(gè)連接池的使用頻率不是很大了绑谣,可以設(shè)置一個(gè)較小的值。
sequnceHandlerType 屬性:
指定使用 Mycat 全局序列的類型拗引。 0 為本地文件方式借宵,1 為數(shù)據(jù)庫(kù)方式,2 為時(shí)間戳序列方式矾削,3 為分布式ZK ID 生成器壤玫,4 為 zk 遞增 id 生成。
從 1.6 增加 兩種 ZK 的全局 ID 生成算法哼凯。
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í)候都會(huì)使用這些參數(shù)初始化連接猎贴。可以按系統(tǒng)要求適當(dāng)?shù)恼{(diào)整這些 buffer 的大小蝴光。 TCP 連接參數(shù)的定義她渴,可以查看 Javadoc
Mysql 連接相關(guān)屬性:
初始化 mysql 前后端連接所涉及到的一些屬性:
packetHeaderSize : 指定 Mysql 協(xié)議中的報(bào)文頭長(zhǎng)度。默認(rèn) 4虱疏。
maxPacketSize : 指定 Mysql 協(xié)議可以攜帶的數(shù)據(jù)最大長(zhǎng)度惹骂。默認(rèn) 16M苏携。
idleTimeout : 指定連接的空閑超時(shí)時(shí)間做瞪。某連接在發(fā)起空閑檢查下,發(fā)現(xiàn)距離上次使用超過了空閑時(shí)間,那么這個(gè)連接會(huì)被回收装蓬,就是被直接的關(guān)閉掉著拭。默認(rèn) 30 分鐘,單位毫秒牍帚。
charset : 連接的初始化字符集儡遮。默認(rèn)為 utf8。
txIsolation : 前端連接的初始化事務(wù)隔離級(jí)別暗赶,只在初始化的時(shí)候使用鄙币,后續(xù)會(huì)根據(jù)客戶端傳遞過來的屬性對(duì)后端數(shù)據(jù)庫(kù)連接進(jìn)行同步。默認(rèn)為 REPEATED_READ蹂随,設(shè)置值為數(shù)字默認(rèn) 3十嘿。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
sqlExecuteTimeout:SQL 執(zhí)行超時(shí)的時(shí)間,Mycat 會(huì)檢查連接上最后一次執(zhí)行 SQL 的時(shí)間岳锁,若超過這個(gè)時(shí)間則會(huì)直接關(guān)閉這連接绩衷。默認(rèn)時(shí)間為 300 秒,單位秒
心跳屬性:
mycat 中有幾個(gè)周期性的任務(wù)來異步的處理一些我需要的工作激率。這些屬性就在系統(tǒng)調(diào)優(yōu)的過程中也是比不可少的咳燕。
processorCheckPeriod : 清理 NIOProcessor 上前后端空閑、超時(shí)和關(guān)閉連接的間隔時(shí)間乒躺。默認(rèn)是 1 秒招盲,單位毫秒。
dataNodeIdleCheckPeriod : 對(duì)后端連接進(jìn)行空閑嘉冒、超時(shí)檢查的時(shí)間間隔宪肖,默認(rèn)是 300 秒,單位毫秒健爬。
dataNodeHeartbeatPeriod : 對(duì)后端所有讀控乾、寫庫(kù)發(fā)起心跳的間隔時(shí)間,默認(rèn)是 10 秒娜遵,單位毫秒蜕衡。
服務(wù)相關(guān)屬性:
這里介紹一個(gè)與服務(wù)相關(guān)的屬性,主要會(huì)影響外部系統(tǒng)對(duì) myact 的感知设拟。
bindIp : mycat 服務(wù)監(jiān)聽的 IP 地址慨仿,默認(rèn)值為 0.0.0.0。
serverPort : 定義 mycat 的使用端口纳胧,默認(rèn)值為 8066镰吆。
managerPort : 定義 mycat 的管理端口,默認(rèn)值為 9066.
ps:還有部分1.6支持的屬性跑慕,詳細(xì)請(qǐng)看pdf
本文摘抄于:mycat用戶指南