1. 程式人生 > >資料庫路由中介軟體MyCat - 使用篇(3)下篇

資料庫路由中介軟體MyCat - 使用篇(3)下篇

此文已由作者張鎬薪授權網易雲社群釋出。


歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。

2. 配置conf/server.xml

server.xml幾乎儲存了所有mycat需要的系統配置資訊。其在程式碼內直接的對映類為SystemConfig類。 參考完整配置:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mycat:server SYSTEM "server.dtd"><mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
        <property name="defaultSqlParser">druidparser</property>
        <!--  <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
        <!-- <property name="processorBufferChunk">40960</property> -->
        <!--
        <property name="processors">1</property>
        <property name="processorExecutor">32</property>
         -->
        <!--預設是65535 64K 用於sql解析時最大文字長度 -->
        <!--<property name="maxStringLiteralLength">65535</property>-->
        <!--<property name="sequnceHandlerType">0</property>-->
        <!-- 表示使用資料庫方式生成sequence. -->
        <property name="sequnceHandlerType">1</property>
        <!--<property name="backSocketNoDelay">1</property>-->
        <!--<property name="frontSocketNoDelay">1</property>-->
        <!--<property name="processorExecutor">16</property>-->
        <!--
            <property name="mutiNodeLimitType">1</property> 0:開啟小數量級(預設) ;1:開啟億級資料排序
            <property name="mutiNodePatchSize">100</property> 億級數量排序批量
            <property name="processors">32</property> <property name="processorExecutor">32</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> -->
        <property name="serverPort">8066</property> <property name="managerPort">9066</property>
    </system>
    <user name="root">
        <!--從1.4.1開始,MyCat支援密文儲存密碼,這裡明文密碼為root -->
        <property name="usingDecrypt">1</property>
        <property name="password">CrjpLhvVJkHk0EPW35Y07dUeTimf52zMqClYQkIAN3/dqiG1DVUe9Zr4JLh8Kl+1KH1zd7YTKu5w04QgdyQeDw==</property>
        <property name="schemas">schema1</property>
    </user><user name="test">
        <!--這裡明文密碼為test-->
        <property name="usingDecrypt">1</property>
        <property name="password">nYx8wxkKtgdPtMXIpapwbNadIWFzpse48NcO+42D1yS//1cNxxQquw07eV/7gvVpxzbjNv47t6QpChvVszKy9g==</property>
        <property name="readOnly">true</property>
        <property name="schemas">schema1</property>
    </user></mycat:server>

2.1 生成密文密碼

檢視密文密碼工具類org.opencloudb.util.DecryptUtil,可以發現main方法中接收的引數為如下格式: 0:test:test 分別對應的是

  • 加密方式:0 前端加密, 1 後端加密(後端是指後臺具體資料庫連線)

  • server.xml 檔案中定義的使用者名稱

  • 明文密碼

這裡我們是配置前端,使用者名稱為test,密碼為test。 (前端和後端用的密碼鹽不一樣,鹽中還有使用者名稱的成分) 傳入這個引數執行主類,在控制命令列得到密文密碼。 nYx8wxkKtgdPtMXIpapwbNadIWFzpse48NcO+42D1yS//1cNxxQquw07eV/7gvVpxzbjNv47t6QpChvVszKy9g==

2.2 配置使用者和邏輯庫與許可權

<user name="root">
        <!--從1.4.1開始,MyCat支援密文儲存密碼,這裡明文密碼為root -->
        <property name="usingDecrypt">1</property>
        <property name="password">CrjpLhvVJkHk0EPW35Y07dUeTimf52zMqClYQkIAN3/dqiG1DVUe9Zr4JLh8Kl+1KH1zd7YTKu5w04QgdyQeDw==</property>
        <!--規定可以訪問的邏輯庫,可以配置多個,用,分割-->
        <property name="schemas">schema1</property>
    </user><user name="test">
        <!--這裡明文密碼為test-->
        <property name="usingDecrypt">1</property>
        <property name="password">nYx8wxkKtgdPtMXIpapwbNadIWFzpse48NcO+42D1yS//1cNxxQquw07eV/7gvVpxzbjNv47t6QpChvVszKy9g==</property>
        <!--對於資料庫只讀訪問-->
        <property name="readOnly">true</property>
        <property name="schemas">schema1</property>
    </user>

上面的註釋已經很清楚,在1.5版本,使用者許可權更全面,並且還有ip白名單和sql黑名單的功能。

2.3 配置系統引數

<system>
        <!--預設sql解析器,之後我們會仔細分析,這裡設定為淘寶開源的druidparser最為高效-->
        <property name="defaultSqlParser">druidparser</property>
        <!--是否開啟mysql壓縮協議,客戶端、mycat、mysql三者都啟用才行,參考下面1-->
        <!--  <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
        <!-- <property name="processorBufferChunk">40960</property> -->
        <!--
        <property name="processors">1</property>
        <property name="processorExecutor">32</property>
         -->
        <!--預設是65535 64K 用於sql解析時最大文字長度 -->
        <!--<property name="maxStringLiteralLength">65535</property>-->
        <!--<property name="sequnceHandlerType">0</property>-->
        <!-- 指定使用Mycat全域性序列的型別。0為本地檔案方式,1為資料庫方式。預設是使用本地檔案方式,檔案方式主要只是用於測試使
用。根據之前的討論,最好還是用id生成器-->
        <!--<property name="sequnceHandlerType">1</property>-->
        <!--<property name="backSocketNoDelay">1</property>-->
        <!--<property name="frontSocketNoDelay">1</property>-->
        <!--<property name="processorExecutor">16</property>-->
        <!--
            <property name="mutiNodeLimitType">1</property> 0:開啟小數量級(預設) ;1:開啟億級資料排序
            <property name="mutiNodePatchSize">100</property> 億級數量排序批量
            <property name="processors">32</property> <property name="processorExecutor">32</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> -->
        <property name="serverPort">8066</property> <property name="managerPort">9066</property>
    </system>

以下2、3、4的屬性不理解不用著急,之後的原始碼篇會講述得更清楚,這裡可以都不配置。

  1. Mycat可以在server.xml中配置1啟用。 客戶端如果是mysql命令列,則加引數-C啟用壓縮協議。 客戶端如果是jdbc則在jdbc的url上加上引數useCompression=true,例如:jdbc:mysql://127.0.0.1:8066 /base?useCompression=true  一般網路條件越差,效能提升越明顯。

  2. processors:這個屬性主要用於指定系統可用的執行緒數,預設值為Runtime.getRuntime().availableProcessors()方法返回的值。主要影響processorBufferPool、processorBufferLocalPercent、processorExecutor屬性。NIOProcessor的個數也是由這個屬性定義的,所以調優的時候可以適當的調高這個屬性。

  3. 由於每次執行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 假設系統執行緒數為4,其他都為屬性的預設值,則: bufferPool = 4096  4  1000 BufferPool的總長度 : 4000 = 16384000 / 4096

  4. processorExecutor屬性 這個屬性主要用於指定NIOProcessor上共享的businessExecutor固定執行緒池大小。mycat在需要處理一些非同步邏輯的時候會把任務提交到這個執行緒池中。新版本中這個連線池的使用頻率不是很大了,可以設定一個較小的值。

  5. TCP相關引數,前端後端分別為: frontSocketSoRcvbuf 預設值: 1024  1024 frontSocketSoSndbuf 預設值: 4  1024  1024 frontSocketNoDelay 預設值: 1 backSocketSoRcvbuf 預設值: 4  1024  1024 backSocketSoSndbuf 預設值: 1024  1024 backSocketNoDelay 預設值: 1

  6. MySql連線相關屬性: packetHeaderSize : 指定Mysql協議中的報文頭長度。預設4。 maxPacketSize : 指定Mysql協議可以攜帶的資料最大長度。預設16M。 idleTimeout : 指定連線的空閒超時時間。某連線在發起空閒檢查下,發現距離上次使用超過了空閒時間,那麼這個連線會被回收,就是被直接的關閉掉。預設30分鐘。 charset : 連線的初始化字符集。預設為utf8。 txIsolation : 前端連線的初始化事務隔離級別,只在初始化的時候使用,後續會根據客戶端傳遞過來的屬性對後端資料庫連線進行同步。預設為REPEATED_READ。 sqlExecuteTimeout:SQL執行超時的時間,Mycat會檢查連線上最後一次執行SQL的時間,若超過這個時間則會直接關閉這連線。預設時間為300秒

  7. 定時任務: processorCheckPeriod : 清理NIOProcessor上前後端空閒、超時和關閉連線的間隔時間。預設是1秒。 dataNodeIdleCheckPeriod : 對後端連線進行空閒、超時檢查的時間間隔,預設是60秒。 dataNodeHeartbeatPeriod : 對後端所有讀、寫庫發起心跳的間隔時間,預設是10秒

  8. 服務相關屬性: bindIp : mycat服務監聽的IP地址,預設值為0.0.0.0。 serverPort : 定義mycat的使用埠,預設值為8066。就是客戶端接入埠(應用接入,mysql客戶端接入埠),MyCat的主要服務都是通過這個埠發出。 managerPort : 定義mycat的管理埠,預設值為9066。有很多監控命令


免費體驗雲安全(易盾)內容安全、驗證碼等服務

更多網易技術、產品、運營經驗分享請點選




相關文章:
【推薦】 BRVAH(讓RecyclerView變得更高效)(1)
【推薦】 一行程式碼搞定Dubbo介面呼叫