本篇內(nèi)容主要講解“MyCat分片怎么配置”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“MyCat分片怎么配置”吧!
10年積累的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有灌云免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
Schema:由它指定邏輯數(shù)據(jù)庫(kù)(相當(dāng)于MySQL的database數(shù)據(jù)庫(kù))
Table:邏輯表(相當(dāng)于MySQL的table表)
DataNode:真正存儲(chǔ)數(shù)據(jù)的物理節(jié)點(diǎn)
DataHost:存儲(chǔ)節(jié)點(diǎn)所在的數(shù)據(jù)庫(kù)主機(jī)(指定MySQL數(shù)據(jù)庫(kù)的連接信息)
User:MyCat的用戶(類似于MySQL的用戶,支持多用戶)
MyCAT支持水平分片與垂直分片:水平分片:一個(gè)表格的數(shù)據(jù)分割到多個(gè)節(jié)點(diǎn)上,按照行分隔。垂直分片:一個(gè)數(shù)據(jù)庫(kù)中多個(gè)表格A,B,C,A存儲(chǔ)到節(jié)點(diǎn)1上,B存儲(chǔ)到節(jié)點(diǎn)2上,C存儲(chǔ)到節(jié)點(diǎn)3 上。
MyCAT通過(guò)定義表的分片規(guī)則來(lái)實(shí)現(xiàn)分片,每個(gè)表格可以捆綁一個(gè)分片規(guī)則,每個(gè)分片規(guī)則指定一個(gè)分 片字段并綁定一個(gè)函數(shù),來(lái)實(shí)現(xiàn)動(dòng)態(tài)分片算法。
Schema:邏輯庫(kù),與MySQL中的Database(數(shù)據(jù)庫(kù))對(duì)應(yīng),一個(gè)邏輯庫(kù)中定義了所包括的Table。
Table:表,即物理數(shù)據(jù)庫(kù)中存儲(chǔ)的某一張表,與傳統(tǒng)數(shù)據(jù)庫(kù)不同,這里的表格需要聲明其所存儲(chǔ)的 邏輯數(shù)據(jù)節(jié)點(diǎn)DataNode。在此可以指定表的分片規(guī)則。
DataNode:MyCAT的邏輯數(shù)據(jù)節(jié)點(diǎn),是存放table的具體物理節(jié)點(diǎn),也稱之為分片節(jié)點(diǎn),通過(guò) DataHost來(lái)關(guān)聯(lián)到后端某個(gè)具體數(shù)據(jù)庫(kù)上
DataHost:定義某個(gè)物理庫(kù)的訪問(wèn)地址,用于捆綁到Datanode上
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-
linux.tar.gz
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
- 啟動(dòng)命令:./mycat start
- 停止命令:./mycat stop
- 重啟命令:./mycat restart
- 查看狀態(tài):./mycat status
使用mysql的客戶端直接連接mycat服務(wù)。默認(rèn)服務(wù)端口為【8066】
mysql -uroot -p123456 -h227.0.0.1 -P8066
schema.xml作為Mycat中重要的配置文件之一,管理著Mycat的邏輯庫(kù)、表、分片規(guī)則、DataNode 以及DataHost之間的映射關(guān)系。弄懂這些配置,是正確使用Mycat的前提。schema 標(biāo)簽用于定義MyCat實(shí)例中的邏輯庫(kù) Table 標(biāo)簽定義了MyCat中的邏輯表 dataNode 標(biāo)簽定義了MyCat中的數(shù)據(jù)節(jié)點(diǎn),也就是我們通常說(shuō)所的數(shù)據(jù)分片。dataHost標(biāo)簽在mycat邏輯庫(kù)中也是作為最底層的標(biāo)簽存在,直接定義了具體的數(shù)據(jù)庫(kù)實(shí)例、讀 寫分離配置和心跳語(yǔ)句。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
schema : 邏輯庫(kù) name:邏輯庫(kù)名稱
sqlMaxLimit:一次取多少條數(shù)據(jù) 要超過(guò)用limit xxx
table:邏輯表
dataNode:數(shù)據(jù)節(jié)點(diǎn) 對(duì)應(yīng)datanode標(biāo)簽
rule:分片規(guī)則,對(duì)應(yīng)rule.xml
subTables:子表
primaryKey:分片主鍵 可緩存
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
配置Server.xml
server.xml介紹
server.xml幾乎保存了所有mycat需要的系統(tǒng)配置信息。最常用的是在此配置用戶名、密碼及權(quán)限。
server.xml配置
配置rule.xml
rule.xml里面就定義了我們對(duì)表進(jìn)行拆分所涉及到的規(guī)則定義。我們可以靈活的對(duì)表使用不同的分片算
法,或者對(duì)表使用相同的算法但具體的參數(shù)不同。這個(gè)文件里面主要有tableRule和function這兩個(gè)標(biāo)
簽。在具體使用過(guò)程中可以按照需求添加tableRule和function。
此配置文件可以不用修改,使用默認(rèn)即可。
<table name="item" dataNode="dn1,dn2,dn3" rule="mod-long"
primaryKey="ID"/>
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!--
dataHost : 數(shù)據(jù)主機(jī)(節(jié)點(diǎn)主機(jī))
balance:1 :讀寫分離 0 :讀寫不分離
writeType:0 第一個(gè)writeHost寫, 1 隨機(jī)writeHost寫
dbDriver:數(shù)據(jù)庫(kù)驅(qū)動(dòng) native:MySQL JDBC:Oracle、SQLServer
switchType:是否主動(dòng)讀
1、主從自動(dòng)切換 -1 不切換 2 當(dāng)從機(jī)延時(shí)超過(guò)slaveThreshold值時(shí)切換為主讀
-->
<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="192.168.24.129:3306" user="root"
password="root" >
</writeHost>
</dataHost>
</mycat:schema>
server.xml幾乎保存了所有mycat需要的系統(tǒng)配置信息。最常用的是在此配置用戶名、密碼及權(quán)限。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="defaultSqlParser">druidparser</property>
</system>
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">TESTDB</property>
</user>
</mycat:server>
rule.xml里面就定義了我們對(duì)表進(jìn)行拆分所涉及到的規(guī)則定義。我們可以靈活的對(duì)表使用不同的分片算 法,或者對(duì)表使用相同的算法但具體的參數(shù)不同。這個(gè)文件里面主要有tableRule和function這兩個(gè)標(biāo) 簽。在具體使用過(guò)程中可以按照需求添加tableRule和function。此配置文件可以不用修改,使用默認(rèn)即可
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat=”http://io.mycat/“ >
<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
</function>
</mycat:rule>
name 屬性指定唯一的名字,用于標(biāo)識(shí)不同的表規(guī)則 rule 標(biāo)簽則指定對(duì)物理表中的哪一列進(jìn)行拆分和使用什么路由算法。columns 內(nèi)指定要拆分的列名字。algorithm 使用 function 標(biāo)簽中的 name 屬性。連接表規(guī)則和具體路由算法。當(dāng)然,多個(gè)表規(guī)則 可以連接到同一個(gè)路由算法上。table 標(biāo)簽內(nèi)使用。讓邏輯表使用這個(gè)規(guī)則進(jìn)行分片。
name 指定算法的名字。class 制定路由算法具體的類名字。property 為具體算法需要用到的一些屬性。
<!--按固定時(shí)間分片-->
<tableRule name="sharding-by-date">
<rule>
<columns>create_time</columns>
<algorithm>sharding-by-date</algorithm>
</rule>
</tableRule>
<function name="sharding-by-date"
class="io.mycat.route.function..PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2014-01-01</property>
<property name="sPartionDay">10</property>
</function>
<!--按自然月分片-->
<tableRule name="sharding-by-month">
<rule>
配置說(shuō)明:
tableRule標(biāo)簽:
columns :標(biāo)識(shí)將要分片的表字段
algorithm :指定分片函數(shù)
function標(biāo)簽:
dateFormat :日期格式
sBeginDate :開(kāi)始日期
sPartionDay :分區(qū)天數(shù),即默認(rèn)從開(kāi)始日期算起,分隔10天一個(gè)分區(qū)
二、范圍約定
配置說(shuō)明:
tableRule標(biāo)簽:
<columns>create_time</columns>
<algorithm>sharding-by-month</algorithm>
</rule>
</tableRule>
<function name="sharding-by-month"
class="io.mycat.route.function..PartitionByMonth">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2014-01-01</property>
</function>
<!--
按單月小時(shí)分片
適合做日志,每月末,手工清理
-->
<tableRule name="sharding-by-hour">
<rule>
<columns>create_time</columns>
<algorithm>sharding-by-hour</algorithm>
</rule>
</tableRule>
<function name="sharding-by-hour"
class="io.mycat.route.function..LastestMonthPartition">
<property name="splitOneDay">24</property>
</function>
配置說(shuō)明 tableRule標(biāo)簽:columns :標(biāo)識(shí)將要分片的表字段 algorithm :指定分片函數(shù) function標(biāo)簽:dateFormat :日期格式 sBeginDate :開(kāi)始日期 sPartionDay :分區(qū)天數(shù),即默認(rèn)從開(kāi)始日期算起,分隔10天一個(gè)分區(qū)
<tableRule name="auto-sharding-long">
<rule>
<columns>user_id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
配置說(shuō)明 tableRule標(biāo)簽:columns :標(biāo)識(shí)將要分片的表字段 algorithm :指定分片函數(shù) function標(biāo)簽:mapFile :指定分片函數(shù)需要的配置文件名稱
autopartition-long.txt文件內(nèi)容:所有的節(jié)點(diǎn)配置都是從0開(kāi)始,及0代表節(jié)點(diǎn)1,此配置非常簡(jiǎn)單,即預(yù)先制定可能的id范圍對(duì)應(yīng)某個(gè)分 片
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0 0-100 0
500M-1000M=1 101-200 1
201-300 2
1000M-1500M=2
default=0
# 或以下寫法
# 0-10000000=0
# 10000001-20000000=1
優(yōu)勢(shì):擴(kuò)容無(wú)需遷移數(shù)據(jù) 缺點(diǎn):熱點(diǎn)數(shù)據(jù),并發(fā)受限
<tableRule name="sharding-by-intfile">
<rule>
<columns>user_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type">0</property>
<property name="defaultNode">0</property>
</function>
配置說(shuō)明 tableRule標(biāo)簽:columns :標(biāo)識(shí)將要分片的表字段 algorithm :指定分片函數(shù) function標(biāo)簽:mapFile :指定分片函數(shù)需要的配置文件名稱 type :默認(rèn)值為0,0表示Integer,非零表示String defaultNode :指定默認(rèn)節(jié)點(diǎn),小于0表示不設(shè)置默認(rèn)節(jié)點(diǎn),大于等于0表示設(shè)置默認(rèn)節(jié)點(diǎn),0代表節(jié) 點(diǎn)1。
默認(rèn)節(jié)點(diǎn)的作用:枚舉分片時(shí),如果碰到不識(shí)別的枚舉值,就讓它路由到默認(rèn)節(jié)點(diǎn)。如果不配置默認(rèn)節(jié)點(diǎn)(defaultNode值小于0表示不配置默認(rèn)節(jié)點(diǎn)),碰到不識(shí)別的枚舉值 就會(huì)報(bào)錯(cuò):
partition-hash-int.txt 配置:
10000=0 列等于10000 放第一個(gè)分片
10010=1
男=0
女=1
beijing=0
tianjin=1
zhanghai=2
<tableRule name="mod-long">
<rule>
<columns>user_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long"
class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>
tableRule標(biāo)簽:columns :標(biāo)識(shí)將要分片的表字段 algorithm :指定分片函數(shù) function標(biāo)簽:count :節(jié)點(diǎn)數(shù)量
<tableRule name="sharding-by-murmur">
<rule>
<columns>user_id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>
<function name="murmur"
class="io.mycat.route.function.PartitionByMurmurHash">
<!-- 默認(rèn)是0 -->
<property name="seed">0</property>
<!-- 要分片的數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)量,必須指定,否則沒(méi)法分片 -->
<property name="count">2</property>
<!-- 一個(gè)實(shí)際的數(shù)據(jù)庫(kù)節(jié)點(diǎn)被映射為這么多虛擬節(jié)點(diǎn),默認(rèn)是160倍,也就是虛擬節(jié)點(diǎn)數(shù)是物理節(jié)點(diǎn)數(shù)
的160倍 -->
<property name="virtualBucketTimes">160</property>
<!-- <property name="weightMapFile">weightMapFile</property> 節(jié)點(diǎn)的權(quán)重,沒(méi)有指
定權(quán)重的節(jié)點(diǎn)默認(rèn)是1。以properties文件的格式填寫,以從0開(kāi)始到count-1的整數(shù)值也就是節(jié)點(diǎn)索引為
key,以節(jié)點(diǎn)權(quán)重值為值。所有權(quán)重值必須是正整數(shù),否則以1代替 -->
<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>
用于測(cè)試時(shí)觀察各物理節(jié)點(diǎn)與虛擬節(jié)點(diǎn)的分布情況,如果指定了這個(gè)屬性,會(huì)把虛擬節(jié)點(diǎn)的murmur
hash值與物理節(jié)點(diǎn)的映射按行輸出到這個(gè)文件,沒(méi)有默認(rèn)值,如果不指定,就不會(huì)輸出任何東西 -->
</function>
等,還有一些其他分片,這里,暫時(shí)不說(shuō)明
把商品表分片存儲(chǔ)到三個(gè)數(shù)據(jù)節(jié)點(diǎn)上。
配置完畢后,重新啟動(dòng)mycat。使用mysql客戶端連接mycat,創(chuàng)建表。
CREATE TABLE item (
id int(11) NOT NULL,
name varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
分片策略指定為“auto-sharding-long” 分片規(guī)則指定為“mod-long”
到此,相信大家對(duì)“MyCat分片怎么配置”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
當(dāng)前名稱:MyCat分片怎么配置
文章路徑:http://jinyejixie.com/article18/ghdsdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站營(yíng)銷、外貿(mào)建站、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)