MyCat配置簡介

MyCat

MyCAT 是一款開源的Mysql企業(yè)級集群應(yīng)用劲室,它是基于阿里的開源產(chǎn)品Cobar發(fā)展出來的霹肝。MyCAT提供了類似Mysql的接口穆趴,可以平滑的將單機(jī)Mysql遷移到Mysql集群上饿凛,解決數(shù)據(jù)存儲和業(yè)務(wù)規(guī)模迅速增長情況下的數(shù)據(jù)瓶頸問題只泼。

配置

schema.xml中定義邏輯庫剖笙,表、分片節(jié)點(diǎn)等內(nèi)容请唱;
rule.xml中定義分片規(guī)則弥咪;
server.xml中定義用戶以及系統(tǒng)相關(guān)變量,如端口等

server.xml

server.xml是MyCAT對外的“虛擬數(shù)據(jù)庫”配置文件十绑。所謂的“虛擬數(shù)據(jù)庫”是說聚至,MyCAT將多個(gè)Mysql集群整合起來對外提供服務(wù),提供服務(wù)的接口仍然采用Mysql的形式本橙,因此扳躬,通過仿造Mysql接口,讓調(diào)用程序以為自己是在訪問Mysql數(shù)據(jù)庫,就是所謂的“虛擬數(shù)據(jù)庫”贷币。

<?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>
    </system>
    <user name="test">
        <property name="password">test</property>
        <property name="schemas">TESTDB</property>
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

表明該虛擬數(shù)據(jù)庫有一個(gè)schema击胜,TESTDB

有2個(gè)用戶testuser役纹,密碼分別是testuser偶摔,

user用戶是只讀的,test用戶未設(shè)置只讀促脉;

默認(rèn)的SQL解析器是druidparser

schema.xml

<?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="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
        <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2,dn3"
            rule="mod-long" />
        <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
            rule="sharding-by-intfile" />
        <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>
    </schema>
    
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost1" database="db2" />
    <dataNode name="dn3" dataHost="localhost1" database="db3" />
    
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="localhost:3306" user="root"
            password="123456">
        </writeHost>
        <writeHost host="hostS1" url="localhost:3316" user="root"
            password="123456" />
    </dataHost>
</mycat:schema> 

Schema中主要配置 Mycat 數(shù)據(jù)庫啰挪,MySQL表,分片規(guī)則嘲叔,分片類型

schema

第1塊是schema塊,主要描述了虛擬數(shù)據(jù)庫的schemaTESTDB中有哪些表抽活,每個(gè)表分布在哪些數(shù)據(jù)節(jié)點(diǎn)上硫戈,分布的方法采用哪種算法。例如<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />下硕,表示travelrecord表分布在dn1,dn2,dn3這3個(gè)節(jié)點(diǎn)上丁逝,分布的方法采用auto-sharding-long算法。

dataNode

第2塊是dataNode梭姓,表示該數(shù)據(jù)庫有哪些數(shù)據(jù)節(jié)點(diǎn)霜幼,以及這些數(shù)據(jù)節(jié)點(diǎn)實(shí)際對應(yīng)的數(shù)據(jù)服務(wù)器和數(shù)據(jù)庫名,這里配置了3個(gè)節(jié)點(diǎn)dn1,dn2,dn3誉尖,都是在localhost1服務(wù)器上罪既,數(shù)據(jù)庫名分別是db1,db2,db3,其實(shí)铡恕,這也正是前面schema塊中用到的琢感。

dataHost

第3塊是dataHost,這部分是實(shí)際的數(shù)據(jù)庫服務(wù)器配置探熔,這里配置了2個(gè)Mysql數(shù)據(jù)庫驹针,hostM1hostS1,地址分別在“l(fā)ocalhost:3306”诀艰,用戶名都是root柬甥,密碼是123456,并且指定了心跳是select user()其垄。

這里面有兩個(gè)參數(shù)需要注意苛蒲,balance和 switchType。

balance指的負(fù)載均衡類型绿满,目前的取值有4種:

  • balance="0", 不開啟讀寫分離機(jī)制撤防,所有讀操作都發(fā)送到當(dāng)前可用的writeHost上。

  • balance="1",全部的readHost與stand by writeHost參與select語句的負(fù)載均衡寄月,簡單的說辜膝,當(dāng)雙主雙從模式(M1->S1,M2->S2漾肮,并且M1與 M2互為主備)厂抖,正常情況下,M2,S1,S2都參與select語句的負(fù)載均衡克懊。

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

  • balance="3"墙懂,所有讀請求隨機(jī)的分發(fā)到wiriterHost對應(yīng)的readhost執(zhí)行,writerHost不負(fù)擔(dān)讀壓力

switchType指的是切換的模式扮念,目前的取值也有4種:

  • switchType='-1' 表示不自動切換
  • switchType='1' 默認(rèn)值损搬,表示自動切換
  • switchType='2' 基于MySQL主從同步的狀態(tài)決定是否切換,心跳語句為 show slave status
  • switchType='3'基于MySQL galary cluster的切換機(jī)制(適合集群)(1.4.1),心跳語句為 show status like 'wsrep%'柜与。

rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">

<mycat:rule  xmlns:mycat="http://org.opencloudb/">
  <tableRule name="sharding-by-hour">
    <rule>
      <columns>createTime</columns>
      <algorithm>sharding-by-hour</algorithm>
    </rule>
  </tableRule>

  <function name="sharding-by-hour" class="org.opencloudb.route.function.LatestMonthPartion">
    <property name="splitOneDay">24</property>
  </function>

</mycat:rule >

數(shù)據(jù)切分中作為表切分規(guī)則中最重要的配置巧勤,表的切分方式?jīng)Q定了數(shù)據(jù)切分后的性能好壞,因此也是最重要的配置弄匕。

如上面例子配置了一個(gè)切分規(guī)則颅悉,名為sharding-by-hour 對應(yīng)的切分方式(function )是按日期切分,該配置中:

tableRule

name 為schema.xml 中table 標(biāo)簽中對應(yīng)的 rule="sharding-by-hour" ,也就是配置表的分片規(guī)則迁匠,
columns 是表的切分字段: createTime 創(chuàng)建日期剩瓶。
algorithm 是規(guī)則對應(yīng)的切分規(guī)則:映射到function 的name。

function

function 配置是分片規(guī)則的配置城丧。
name 為切分規(guī)則的名稱儒搭,名字人員取,但是需要與tableRule 中匹配芙贫。
class 是切分規(guī)則對應(yīng)的切分類搂鲫,寫死,需要哪種規(guī)則則配置哪種磺平,例如本例子是按小時(shí)分片:org.opencloudb.route.function.LatestMonthPartion
property 標(biāo)簽是切分規(guī)則對應(yīng)的不同屬性魂仍,不同的切分規(guī)則配置不同。

登陸演示mycat

登陸

登錄方式類似于 mysql 的服務(wù)端登陸拣挪,目前 mycat 有兩個(gè)端口擦酌,8066 數(shù)據(jù)端口,9066 管理端口
登陸方式如:

mysql -h127.0.0.1 -utest -ptest -P9066 [-dmycat]
-h 后面是主機(jī)菠劝,即當(dāng)前 mycat 按照的主機(jī)地址赊舶,本地可用 127.0.0.1 遠(yuǎn)程需要遠(yuǎn)程 ip
-u Mycat server.xml 中配置的邏輯庫用戶
-p Mycat server.xml 中配置的邏輯庫密碼
-P 后面是端口 默認(rèn) 9066,注意 P 是大寫
-d Mycat server.xml 中配置的邏輯庫
數(shù)據(jù)端口與管理端口的配置端口修改:
數(shù)據(jù)端口默認(rèn) 8066,管理端口默認(rèn) 9066 笼平,如果需要修改需要配置 serve.xml

演示

D:\mycat\bin>mysql -utest -ptest -P9066 -Dtestdb          
        mysql> show @@help;      -- 獲取有關(guān)管理的相關(guān)命令          
        
        mysql> show @@database;  -- 查看邏輯數(shù)據(jù)庫        
        +----------+          
        | DATABASE |          
        +----------+          
        | testdb   |          
        +----------+        
        mysql> show @@datanode;  --查看分片節(jié)點(diǎn)          
        mysql> show @@server;    --查看服務(wù)器狀態(tài)          
        
        mysql> show @@version;   --查看版本          
        +----------------------------------------+          
        | VERSION                                |          
        +----------------------------------------+          
        | 5.5.8-mycat-1.4-RELEASE-20150922233010 |          
        +----------------------------------------+        

D:\mycat\bin>mysql -utest -ptest -P8066 -Dtestdb          
        mysql> select database();          
        +------------+          
        | DATABASE() |          
        +------------+          
        | testdb     |         
        +------------+              
        
        mysql> show tables;          
        +------------------+        
        | Tables in TESTDB |        
        +------------------+        
        | company          |        
        | customer         |        
        | customer_addr    |        
        | employee         |    
        | goods            |
        | hotnews          |
        | orders           |
        | order_items      |
        | travelrecord     |
        +------------------+              

注意

啟動MyCAT之前园骆,需要先檢查一些配置:

  1. java的版本需要是1.7或以上;

  2. Mysql的配置文件需要加一行lower_case_table_names = 1[mysqld]欄目中寓调,這個(gè)設(shè)置為Mysql大小寫不敏感锌唾,否則可能會發(fā)生表找不到的問題;

  3. 在示例的2個(gè)數(shù)據(jù)hostM1hostS1上夺英,新建3個(gè)數(shù)據(jù)庫db1,db2,db3晌涕,如不新建,可能提示找不到數(shù)據(jù)庫ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0(這個(gè)提示不夠友好痛悯,是在運(yùn)行很長一段時(shí)間后才提示)余黎;

  4. ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:1

    這個(gè)有可能是Mycat和MySQL部署在同一臺機(jī)器上,而在schema.xml是使用了IP的载萌,但是賬號只能使用localhost登陸惧财,所以會出現(xiàn)本地的Mycat無法連接MySQL

  5. 添加MYCAT_HOME環(huán)境變量指向解壓的mycat目錄,主要是為了一些bin目錄下的腳本的使用炒考。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市霎迫,隨后出現(xiàn)的幾起案子斋枢,更是在濱河造成了極大的恐慌,老刑警劉巖知给,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓤帚,死亡現(xiàn)場離奇詭異,居然都是意外死亡涩赢,警方通過查閱死者的電腦和手機(jī)戈次,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筒扒,“玉大人怯邪,你說我怎么就攤上這事』ǘ眨” “怎么了悬秉?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冰蘑。 經(jīng)常有香客問我和泌,道長,這世上最難降的妖魔是什么祠肥? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任武氓,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘县恕。我一直安慰自己东羹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布弱睦。 她就那樣靜靜地躺著百姓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪况木。 梳的紋絲不亂的頭發(fā)上垒拢,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音火惊,去河邊找鬼求类。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屹耐,可吹牛的內(nèi)容都是我干的尸疆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼惶岭,長吁一口氣:“原來是場噩夢啊……” “哼寿弱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起按灶,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤症革,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鸯旁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噪矛,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年铺罢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艇挨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡韭赘,死狀恐怖缩滨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泉瞻,我是刑警寧澤楷怒,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站瓦灶,受9級特大地震影響鸠删,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贼陶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一刃泡、第九天 我趴在偏房一處隱蔽的房頂上張望巧娱。 院中可真熱鬧,春花似錦烘贴、人聲如沸禁添。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽老翘。三九已至,卻和暖如春锻离,著一層夾襖步出監(jiān)牢的瞬間铺峭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工汽纠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卫键,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓虱朵,卻偏偏與公主長得像莉炉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子碴犬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容