Mycat的server.xml配置


Mycat的配置文件,設置賬號、參數等。
server.xml 幾乎保存了所有 mycat 需要的系統配置信息。其在代碼內直接的映射類為 SystemConfig 類。

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="nonePasswordLogin">0</property> <!-- 0為需要密碼登陸、1為不需要密碼登陸 ,默認為0,設置為1則需要指定默認賬戶-->
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>  <!-- 1為開啟實時統計、0為關閉 -->
        <property name="useGlobleTableCheck">0</property>  <!-- 1為開啟全加班一致性檢測、0為關閉 -->

                <property name="sequnceHandlerType">2</property>
        <property name="subqueryRelationshipCheck">false</property> <!-- 子查詢中存在關聯查詢的情況下,檢查關聯字段中是否有分片字段 .默認 false -->
      <!--  <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
        <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--設置模擬的MySQL版本號-->
        <!-- <property name="processorBufferChunk">40960</property> -->
        <!-- 
        <property name="processors">1</property> 
        <property name="processorExecutor">32</property> 
         -->
        <!--默認為type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
                <property name="processorBufferPoolType">0</property>
                <!--默認是65535 64K 用於sql解析時最大文本長度 -->
                <!--<property name="maxStringLiteralLength">65535</property>-->
                <!--<property name="sequnceHandlerType">0</property>-->
                <!--<property name="backSocketNoDelay">1</property>-->
                <!--<property name="frontSocketNoDelay">1</property>-->
                <!--<property name="processorExecutor">16</property>-->
                <!--
                        <property name="serverPort">8066</property> <property name="managerPort">9066</property> 
                        <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
                        <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
                <!--分布式事務開關,0為不過濾分布式事務,1為過濾分布式事務(如果分布式事務內只涉及全局表,則不過濾),2為不過濾分布式事務,但是記錄分布式事務日志-->
                <property name="handleDistributedTransactions">0</property>

                        <!--
                        off heap for merge/order/group/limit      1開啟   0關閉
                -->
                <property name="useOffHeapForMerge">1</property>

                <!--
                        單位為m
                -->
        <property name="memoryPageSize">64k</property>

                <!--
                        單位為k
                -->
                <property name="spillsFileBufferSize">1k</property>

                <property name="useStreamOutput">0</property>

                <!--
                        單位為m
                -->
                <property name="systemReserveMemorySize">384m</property>


                <!--是否采用zookeeper協調切換  -->
                <property name="useZKSwitch">false</property>

                <!-- XA Recovery Log日志路徑 -->
                <!--<property name="XARecoveryLogBaseDir">./</property>-->

                <!-- XA Recovery Log日志名稱 -->
                <!--<property name="XARecoveryLogBaseName">tmlog</property>-->
                <!--如果為 true的話 嚴格遵守隔離級別,不會在僅僅只有select語句的時候在事務中切換連接-->
                <property name="strictTxIsolation">false</property>

                <property name="useZKSwitch">true</property>

        </system>

        <!-- 全局SQL防火牆設置 -->
        <!--白名單可以使用通配符%或着*-->
        <!--例如<host host="127.0.0.*" user="root"/>-->
        <!--例如<host host="127.0.*" user="root"/>-->
        <!--例如<host host="127.*" user="root"/>-->
        <!--例如<host host="1*7.*" user="root"/>-->
        <!--這些配置情況下對於127.0.0.1都能以root賬戶登錄-->
        <!--
        <firewall>
           <whitehost>
              <host host="1*7.0.0.*" user="root"/>
           </whitehost>
       <blacklist check="false">
       </blacklist>
        </firewall>
        -->

        <user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</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="schemas">TESTDB</property>
                <property name="readOnly">true</property>
        </user>

</mycat:server>
View Code

 一、<user>標簽

<user name="test">
    <property name="password">test</property>
    <property name="schemas">TESTDB</property>
    <property name="readOnly">true</property>
    <property name="benchmark">11111</property>
    <property 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>

<user>標簽主要用於定義登錄 mycat 的用戶和權限,如上面,定義了一個用戶,用戶名為 test、密碼也為 test,可訪問的 schema 也只有 TESTDB 一個。

<property>標簽則是具體聲明的屬性值:

  • user 用戶配置節點
  • name 登錄的用戶名,也就是連接Mycat的用戶名
  • password 登錄的密碼,也就是連接Mycat的密碼
  • readOnly true/false,限制用戶是否只是可讀的
  • benchmark 連接服務降級處理基准值,當前端的整體 connection 數達到基准值是, 對來自該賬戶的請求開始拒絕連接,0 或不設表示不限制
  • usingDecrypt 是否對密碼加密默認 0 否 如需要開啟配置 1,同時使用加密程序對密碼加密
  • schemas 數據庫名,這里會和schema.xml中的配置關聯,多個用逗號分開,例如需要這個用戶需要管理兩個數據庫db1,db2,則配置db1,dbs
  • privileges 配置對用戶的 schema 及下級的 table 進行精細化的 DML 權限控制,privileges 節點中的 check 屬性是用於標識是否開啟 DML 權限檢查, 默認 false 標識不檢查,當然 privileges 節點不配置,等同 check=false,由於 Mycat 一個用戶的 schemas 屬性可配置多個 schema ,所以 privileges 的下級節點 schema 節點同樣可配置多個,對多庫多表進行細粒度的 DML 權限控制。insert,update,select,delete 表示0000。如果設置了 schema , 但只設置了個別 table 或 未設置 table 的 DML,會自動繼承 schema 的 DML 屬性

二、<system>標簽

這個標簽內嵌套的所有 property 標簽都與系統配置有關。

1. charset 屬性

配置mycat的字符集

<system> 
    <property name="charset">utf8</property>
</system>

如果需要配置 utf8mb2 等特殊字符集可以在index_to_charset.properties 配置:

語法:配置數據庫短的字符集 ID=字符集

例如:224=utf8mb4

配置字符集的時候一定要堅持 mycat 的字符集與數據庫端的字符集是一致的,可以通過變量來查詢:

show variables like 'collation_%';
show variables like 'character_set_%';

2. defaultSqlParser 屬性

用來指定默認的解析器。
1.6版本目前的可用的取值有:druidparser 和 fdbparser。使用的時候可以選擇其中的一種,目前一般都使用 druidparser。

<property name="defaultSqlParser ">druidparser</property>

3. processors 屬性

用於指定系統可用的線程數,默認值為機器 CPU 核心線程數。
主要影響 processorBufferPool、processorBufferLocalPercent、processorExecutor 屬性。
NIOProcessor 的個數也是由這個屬性定義的,所以調優的時候可以適當的調高這個屬性。

<property name="processors">100</property>

4. processorBufferChunk 屬性

指定每次分配 Socket Direct Buffer 的大小,默認是 4096 個字節。
這個屬性也影響 buffer pool 的長度。如果一次性獲取的數過大 buffer 不夠用 經常出現警告,則可以適當調大。

<property name="processorBufferChunk ">6000</property>

5. processorBufferPool 屬性

指定 bufferPool 計算 比例值。
由於每次執行 NIO 讀、寫操作都需要使用到 buffer,系統初始化的時候會建立一定長度的 buffer 池來加快讀、寫的效率,減少建立 buffer 的時間。

Mycat 中有兩個主要的 buffer 池: BufferPool 和 ThreadLocalPool

BufferPool 由 ThreadLocalPool 組合而成,每次從 BufferPool 中獲取 buffer 都會優先獲取ThreadLocalPool 中的 buffer,未命中之后才會去獲取 BufferPool 中的 buffer。也就是說 ThreadLocalPool 是作為 BufferPool 的二級緩存,每個線程內部自己使用的。當然,這其中還有一些限制條件需要線程的名字是由$_開頭。然而,BufferPool 上的 buffer 則是每個 NIOProcessor 都共享的。

默認這個屬性的值為: 默認 bufferChunkSize(4096) * processors 屬性 * 1000
BufferPool 的總長度 = bufferPool / bufferChunk。
若 bufferPool 不是 bufferChunk 的整數倍,則總長度為前面計算得出的商 + 1

6. processorBufferLocalPercent 屬性

這個屬性就是用來控制分配ThreadLocalPool  的大小用的,但其也並不是一個准確的值,也是一個比例值。這個屬性默認值為 100。

7. processorExecutor 屬性

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

<property name="processorExecutor">10</property>

8. sequnceHandlerType 屬性

指定使用 Mycat 全局序列的類型。0 為本地文件方式,1 為數據庫方式,2 為時間戳序列方式,3 為分布式 ZK ID 生成器,4 為 zk 遞增 id 生成。
從 1.6 增加 兩種 ZK 的全局 ID 生成算法。

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

9. Mysql 連接相關屬性

初始化 mysql 前后端連接所涉及到的一些屬性:

  • packetHeaderSize : 指定 Mysql 協議中的報文頭長度。默認 4。
  • maxPacketSize : 指定 Mysql 協議可以攜帶的數據最大長度。默認 16M。
  • idleTimeout : 指定連接的空閑超時時間。某連接在發起空閑檢查下,發現距離上次使用超過了空閑時間,那么這個連接會被回收,就是被直接的關閉掉。默認 30 分鍾,單位毫秒。
  • charset : 連接的初始化字符集。默認為 utf8。
  • txIsolation : 前端連接的初始化事務隔離級別,只在初始化的時候使用,后續會根據客戶端傳遞過來的屬性對后端數據庫連接進行同步。默認為 REPEATED_READ,設置值為數字默認 3。
    • READ_UNCOMMITTED = 1;
    • READ_COMMITTED = 2;
    • REPEATED_READ = 3;
    • SERIALIZABLE = 4;
  • sqlExecuteTimeout:SQL 執行超時的時間,Mycat 會檢查連接上最后一次執行 SQL 的時間,若超過這個時間則會直接關閉這連接。默認時間為 300 秒,單位秒。

10. 心跳屬性

mycat 中有幾個周期性的任務來異步的處理一些我需要的工作。這些屬性就在系統調優的過程中也是比不可少的。

  • processorCheckPeriod : 清理 NIOProcessor 上前后端空閑、超時和關閉連接的間隔時間。默認是 1 秒,單位毫秒。。
  • dataNodeIdleCheckPeriod : 對后端連接進行空閑、超時檢查的時間間隔,默認是 300 秒,單位毫秒。
  • dataNodeHeartbeatPeriod : 對后端所有讀、寫庫發起心跳的間隔時間,默認是 10 秒,單位毫秒。

11. 服務相關屬性

主要會影響外部系統對 mycat 的感知。

  • bindIp : mycat 服務監聽的 IP 地址,默認值為 0.0.0.0。
  • serverPort : 定義 mycat 的使用端口,默認值為 8066, 這也連接mycat的端口。
  • managerPort : 定義 mycat 的管理端口,默認值為 9066。這也是連接mycat管理地址的端口。

12. fakeMySQLVersion

mycat 模擬的 mysql 版本號,默認值為 5.6 版本,如非特需,不要修改這個值,目前支持設置 5.5,5.6 版本,其他版本可能會有問題。此特性從 1.6 版本開始支持。

13. 全局表一致性檢測

useGlobleTableCheck

通過在全局表增加_MYCAT_OP_TIME 字段來進行一致性檢測,類型為 bigint,create 語句通過 mycat執行會自動加上這個字段,其他情況請自己手工添加。
此特性從 1.6 版本開始支持。

14. useOffHeapForMerge

此特性從 1.6 版本開始支持。
使用非堆內存(Direct Memory)處理跨分片結果集。 1 開啟 0關閉

15. 分布式事務

<!--分布式事務開關,0 為不過濾分布式事務,1 為過濾分布式事務(如果分布式事務內只涉及全局表,則不過濾),2 為不過濾分布
式事務,但是記錄分布式事務日志-->
<property name="handleDistributedTransactions">0</property>

主要應用場景,主要為了控制是否允許跨庫事務。

此特性從 1.6 版本開始支持。

 


免責聲明!

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



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