MyCat入門指南


入門篇

  1. 1.       安裝

1.1從https://github.com/MyCATApache/Mycat-download下載壓縮包

1.2解壓縮后復制到相應目錄下面,比如/usr/local/mycat

1.3mycat目錄下面分別是bin conf lib logs。

   bin目錄里是啟動腳本

   conf目錄里是配置文件

   lib目錄里是Mycat和它的依賴jar

   logs目錄里是console.log用來保存控制台日志,和mycat.log用來保存mycat的log4j日志

2.       配置環境變量

指定指定MYCAT_HOME,比如按照前文所述,可以把MYCAT_HOME配置為:export MYCAT_HOME=/usr/local/mycat

3.       啟動

Mycat有兩種啟動方式,第一種是運行$MYCAT_HOME/bin/mycat腳本執行wrap模式的啟動;第二種是運行$MYCAT_HOME/bin/startup_nowrap.sh執行nowrap模式的啟動

4.       Mycat類加載目錄與JVM參數

以nowrap模式為例,mycat會加載$MYCAT_HOME/lib/classes和$MYCAT_HOME/lib目錄下的所有jar。

如果要修改jvm啟動參數,可以修改$MYCAT_HOME/bin/startup_mycat.sh里的JAVA_OPTS變量

5.       配置文件

重點介紹rule.xml schema.xml router.xml server.xml log4j.xml

5.1   rule.xml

分片規則配置文件,mycat支持的所有分片規則都在這個文件里。定義一個規則需要兩個節點,一個是tableRule,一個是function。

以一致性哈希分片為例,function節點定義了分片規則的實現類與初始化參數和分片規則的算法名稱。

屬性name為規則算法名稱

     class為規則實現類

     property子節點為初始化規則的參數,使用seed count virtualBucketTimes就可初始化一致性哈希規則

   <function name="murmur" class="org.opencloudb.route.function.PartitionByMurmurHash">

      <property name="seed">0</property><!-- 默認是0-->

      <property name="count">2</property><!-- 要分片的數據庫節點數量,必須指定,否則沒法分片-->

      <property name="virtualBucketTimes">160</property><!-- 一個實際的數據庫節點被映射為這么多虛擬節點,默認是160倍,也就是虛擬節點數是物理節點數的160倍-->

  </function>

tableRule節點定義了分片規則名(注意此處是規則名,前面的function節點的name屬性是算法名)rule子節點指定用來分片的數據庫表字段和分片算法名,也就是前面的function節點的name屬性。

<tableRule name="sharding-by-murmur">

      <rule>

        <columns>id</columns>

        <algorithm>murmur</algorithm>

      </rule>

   </tableRule>

任何自定義的分片規則也可以這樣配置

5.2   server.xml

此文件用來配置mycat全局參數

<system>節點

<property name="defaultSqlParser">druidparser</property>,指定SQL解析器,默認是fdbparser,經測試druidparser效率更高

<property name="sequnceHandlerType">1</property>,指定mycat自動序列號生成方式。0:在借助本地文件生成序列號,1:借助數據庫生成序列號,更多信息請參考Mycat in action

<property name="serverPort">8066</property>指定mycat服務端口號,mycat通過這個端口接收數據庫客戶端的訪問請求。

另外還有一個9066端口沒有出現在配置文件中,用來接收mycat監控命令、查詢mycat運行狀況、重新加載配置文件等。更多信息請參考Mycat in action。

<user>節點

name屬性指定mycat用戶名

<property name=”password”>password</property><!—用戶密碼-->

<property name=”schema”>database_name</property><!—數據庫名,用客戶端建立連接后要操作的數據庫名 -->

<property name=”readOnly”>false</property><!—指定是不是只讀庫-->

可以有多個user節點。

5.3   router.xml

<queryRouter schema=”schema”><!—沒太搞清楚這個文件的意義,我把schema屬性、<name>、<queryNode>都配置成了一樣的,而且都與要連接的數據庫名保持一致 -->

<!—schema的值會在schema.xml用到 -->

<dataNode>

    <name>dataNodeName</name>

    <queryNode>queryNode</queryNode>

</dataNode>

</queryRouter>

5.4   schema.xml

<schema name=”schema”><!—就是router.xml命名的schema-->

<table name=”table_name” <!—要與它代理的數據庫物理表名一致-->

primaryKey=”pk” <!—被用作主鍵的字段名-->

dataNode=”dataNodeName” <!—下面將會出現的dataNode節點-->

rule=”sharding-by-murmur”<!—rule.xml的tableRule節點name屬性值,指定這個節點表示用這個規則執行分片-->

authIncrement=”true”><!—插入數據時是否由mycat自動生成分片,指定true時,如果insert sql內沒有指定主鍵的值,而主鍵又是自增長的,mycat會自動插入生成主鍵的代碼,並在生成主鍵時按照指定的分片規則將數據保存到數據庫-->

<!—mycat有自己的自增序列命令,更多信息請參考Mycat in action-->

<!—此處可以指定多個table子節點,一個table節點表示一張表-->

</schema>

<dataNode name=”dataNodeName” dataHost=”localhost“ database=”database”/>

<!—分別是節點名,就是schema節點里的table子節點dataNode屬性

   dataHost是節點主機名,在下面要出現的dataHost定義

   database數據庫名

-->

<dataHost name=”localhost” maxCon=”1000” minCon=”10” balance=”0”

         wrteType=”0” dbType=”mysql” dbDriver=”native>

<!—name屬性是dataHost名

   maxCon minCon分別是連接到物理數據庫的最大最小連接數

   dbType指定數據庫類型

   dbDriver只有兩個取值,分別是native和jdbc。native為mycat自帶驅動,只支持mysql,jdbc為使用jdbc實現連接數據庫,指定什么數據庫的jdbc驅動就可以訪問什么數據庫,更靈活,但效率不如native

可以有多個dataHost節點

-->

   <heartbeat>select 1</heartbeat><!—保持連接不斷的心跳sql-->

   <writeHost host=”hostM1” url=”localhost:3306” user=”user” password=”password”>

      <reeadHost host=”hostS1” url="localhost:3306" user="root" password="123456"/>

   </writeHost>

<!—可以有多個writeHost,一個writeHost里要吧有多個readHost-->

</dataHost>

現在所有配置已經完成可以執行bin目錄下的啟動腳本完成啟動了。然后就可以像使用真正的數據庫一樣訪問mycat。如果運行時修改了配置文件,可以用在命令行用mysql命令登錄9066端口,執行show @@help得到相關命令,其中有重新加載全部配置文件的命令,可以運行時重新加載配置

6.       二次開發

6.1   開發新的分片規則

建一個新的類,繼承AbstractPartitionAlgorithm實現RuleAlgorithm。重寫public void init()和public Integer calculate(String columnValue)。

init根據rule.xml指定的分片初始化參數初始化分片規則,calculate(String)接收分片字段的字符串形式計算記錄應該保存的節點。

7.       升級注意事項

7.1   從1.2.*到1.3.*的變化

7.1.1 server.xml 的<property name="processors">32</property>,通常設置為CPU核數的2倍,比如CPU核數是16,此處就設置為32;<property name="processorExecutor">32</property>,默認不用設置了,在1.3.*已經沒有重要影響

7.1.2 對分片規則的類名改了一些拼寫錯誤,注意升級rule.xml。也可以自己修改,變化在地原來的Partion改為Partition。


免責聲明!

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



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