更新時(shí)間:2021-09-17 10:46:36 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1787次
MyCAT為數(shù)據(jù)庫中間件產(chǎn)品,支持mysql集群,提供高可用性數(shù)據(jù)分片集群。
分片簡(jiǎn)單來說,就是指通過某種特定的條件,將我們存放在同一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(主機(jī))上面,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果
數(shù)據(jù)的切分(Sharding)根據(jù)其切分規(guī)則的類型,可以分為兩種切分模式。
(1)一種是按照不同的表(或者Schema)來切分到不同的數(shù)據(jù)庫(主機(jī))之上,這種切分可以稱之為數(shù)據(jù)的垂直(縱向)切分
(2)另外一種則是根據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個(gè)表中的數(shù)據(jù)按照某種條件拆分到多臺(tái)數(shù)據(jù)庫(主機(jī))上面,這種切分稱之為數(shù)據(jù)的水平(橫向)切分。
到官方下載
http://dl.mycat.io/1.6-RELEASE/
選擇windows版的
Mycat-server-1.6-RELEASE-20161028204710-win.tar.gz
解壓下載的壓縮包,就安裝在D:\server\mycat
接下類介紹mycat的使用規(guī)則,為了簡(jiǎn)單起見,就從分片使用最多的算法,一致性哈希算法說起
當(dāng)我們需要將數(shù)據(jù)平均分在幾個(gè)分區(qū)中,需要使用一致性hash規(guī)則
查看D:\server\mycat\conf\rule.xml
tableRule的name配置了使用的算法函數(shù),函數(shù)也把它復(fù)制在下面
rule指定對(duì)id列進(jìn)行分片,算法為murmur
<tableRule name="sharding-by-murmur">
<rule>
<columns>id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>
<function name="murmur"
class="io.mycat.route.function.PartitionByMurmurHash">
<property name="seed">0</property><!-- 默認(rèn)是0 -->
<property name="count">3</property><!-- 要分片的數(shù)據(jù)庫節(jié)點(diǎn)數(shù)量,必須指定,否則沒法分片 -->
<property name="virtualBucketTimes">160</property><!-- 一個(gè)實(shí)際的數(shù)據(jù)庫節(jié)點(diǎn)被映射為這么多虛擬節(jié)點(diǎn),默認(rèn)是160倍,也就是虛擬節(jié)點(diǎn)數(shù)是物理節(jié)點(diǎn)數(shù)的160倍 -->
<!-- <property name="weightMapFile">weightMapFile</property> 節(jié)點(diǎn)的權(quán)重,沒有指定權(quán)重的節(jié)點(diǎn)默認(rèn)是1。以properties文件的格式填寫,以從0開始到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è)文件,沒有默認(rèn)值,如果不指定,就不會(huì)輸出任何東西 -->
</function>
接下來我們就使用該算法進(jìn)行分片
在D:\server\mycat\conf\schema.xml中,為了清晰起見,把配置信息的意思注釋在配置文件中
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--邏輯數(shù)據(jù)庫TESTDB-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!--邏輯數(shù)據(jù)表tb_test-->
<!--rule="sharding-by-murmur" 使用隨機(jī)拆分 -->
<table name="tb_test" dataNode="dn1,dn2,dn3"
rule="sharding-by-murmur" />
</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>
<!-- host="hostM1" 物理數(shù)據(jù)庫 -->
<writeHost host="hostM1" url="127.0.0.1:3306" user="root"
password="123">
</writeHost>
</dataHost>
</mycat:schema>
接下來配置中間件
在 D:\server\mycat\conf\server.xml中,配置連接mycat的用戶密碼
我們只需要連接mycat這個(gè)邏輯數(shù)據(jù)庫即可,
<!--邏輯數(shù)據(jù)庫的用戶密碼 端口為8066-->
<user name="root">
<property name="password">123</property>
<property name="schemas">TESTDB</property>
</user>
啟動(dòng)mycat
在cmdD:\server\mycat\bin\startup_nowrap.bat
出現(xiàn) 如下信息即為啟動(dòng)成功
接下來使用mysql客戶端連接mycat
首先使用本地?cái)?shù)據(jù)創(chuàng)建db1 db2 db3 三個(gè)數(shù)據(jù)庫
創(chuàng)建表和數(shù)據(jù)腳本如下
CREATE TABLE tb_test (
id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL ,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO tb_test(ID,TITLE) VALUES(114,'goods1');
INSERT INTO tb_test(ID,TITLE) VALUES(225,'goods2');
INSERT INTO tb_test(ID,TITLE) VALUES(3524,'goods3');
INSERT INTO tb_test(ID,TITLE) VALUES(331,'goods1');
INSERT INTO tb_test(ID,TITLE) VALUES(215,'goods2');
INSERT INTO tb_test(ID,TITLE) VALUES(344,'goods3');
SELECT ID,TITLE FROM tb_test
運(yùn)行sql腳本后,可以看到
邏輯數(shù)據(jù)庫如下
物理數(shù)據(jù)庫如下
查看db1,db2,db3各個(gè)物理數(shù)據(jù)庫的記錄如下
可以看到mycat已經(jīng)幫我們進(jìn)行了水平拆分,當(dāng)數(shù)據(jù)量大時(shí),各個(gè)數(shù)據(jù)庫的行數(shù)就趨于相等。
想了解更多關(guān)于Mycat的相關(guān)知識(shí),不妨來關(guān)注動(dòng)力節(jié)點(diǎn)Mycat教程,里面有更多的知識(shí)點(diǎn)供大家學(xué)習(xí)參考。在Java視頻教程頁面中也有相關(guān)配套視頻可以免費(fèi)下載學(xué)習(xí),希望對(duì)大家能夠有所幫助。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743