SpringBoot集成MyCat

什麼是Mycat

  MyCat是一個開源的分佈式數據庫系統,前端用戶可以把它看作是一個數據庫代理。其實現的核心原理是“攔截” 。Myacat攔截用戶發送過來的Sql語句,做一些特定的分析:如分片分析,路由分

析,讀寫分析,讀寫分離分析。然後將SQL發往真實的數據庫。不同於其他的中間件比如druid連接池,Mycat使用的是Nio異步通信機制(非阻塞型的),它的線程池數量默認爲1,實際生產環境線

程數=CPU的核數。推薦使用Mycat1.6版本,項目中MyCat配置代替原數據源的配置,非常簡單。

應用場景:

1)單純的讀寫分離,此時配置最爲簡單,支持讀寫分離,主從切換;

2)分表分庫,對於超過 1000 萬的表進行分片,最大支持 1000 億的單表分片;

3)多租戶應用,每個應用一個庫,但應用程序只連接 Mycat,從而不改造程序本身,實現多租戶化;

4)報表系統,藉助於 Mycat 的分表能力,處理大規模報表的統計; 替代 Hbase,分析大數據;

5)作爲海量數據實時查詢的一種簡單有效方案,比如 100 億條頻繁查詢的記錄需要在 3 秒內查詢出來結果,除了基於主鍵的查詢,還可能存在範圍查詢或其他屬性查詢,此時 Mycat 可能是最簡單有效的選

SpringBoot集成MyCat

  Mycat已經幫我們在內部實現了路由的功能,我們只需要在Mycat中配置以下切分規則即可,對於開發者來說,我們就可以把Mycat看做是一個數據庫,接下來我們開始搭建環境:

步驟一

  Mycat是使用java寫的數據庫中間件,所以要運行Mycat前要準備要jdk的環境,要求是jdk1.7以上的環境。所以需要在系統中配置JAVA_HOME的環境變量.

步驟二

從官網下載Mycat,http://dl.mycat.io/1.6-RELEASE/ 我們是基於CentOS7來搭建Mycat環境的,所以下載版本:

Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

步驟三

將下載好的安裝包上傳到服務器上並解壓.

tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

步驟四

配置切分規則:

1)修改mycat/conf/schema.xml的內容。

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <table name="user" primaryKey="id" dataNode="dn01,dn02" rule="rule1" />  
    </schema>
    
    <!-- 設置dataNode 對應的數據庫,及 mycat 連接的地址dataHost -->  
    <dataNode name="dn01" dataHost="dh01" database="db01" />  
    <dataNode name="dn02" dataHost="dh01" database="db02" />   
    
    <!-- mycat 邏輯主機dataHost對應的物理主機.其中也設置對應的mysql登陸信息 -->  
    <dataHost name="dh01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
            <heartbeat>select user()</heartbeat>  
            <writeHost host="server1" url="127.0.0.1:3306" user="root" password="WolfCode_2017"/>  
    </dataHost> 
</mycat:schema>

名詞解析
<schema>:表示的是在mycat中的邏輯庫配置,邏輯庫名稱爲:TESTDB
<table>:表示在mycat中的邏輯表配置,邏輯表名稱爲:user,映射到兩個數據庫節點dataNode中,切分規則爲:rule1(在rule.xml配置)
<dataNode>:表示數據庫節點,這個節點不一定是單節點,可以配置成讀寫分離.
<dataHost>:真實的數據庫的地址配置
<heartbeat>:用戶心跳檢測
<writeHost>:寫庫的配置

2)修改mycat/conf/rule.xml的內容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="rule1">
        <rule>
            <columns>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">2</property>
    </function>
</mycat:rule>

 

這裏定義的是切分規則,是按照id列進行切分,切分規則是採取取模的方式,<property name="count">2</property>:這裏配置了我們有拆分了多個庫(表),需要和前面配置

<table name="user" primaryKey="id" dataNode="dn01,dn02" rule="rule1" />

中的dataNode個數一致,否則會出錯。

步驟五

在數據庫中創建兩個數據庫db01,db02.

步驟六

啓動mycat,執行mycat/bin/startup_nowrap.sh

步驟七

在SpringBoot項目中.修改數據源的配置,將原來的數據源改爲MayCat的配置

application.properties配置如下

#配置數據源
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
#這裏配置的是Mycat中server.xml中配置賬號密碼,不是數據庫的密碼。
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
#mycat的邏輯庫 端口也是mycat的
spring.datasource.druid.url=jdbc:mysql://192.168.142.129:8066/TESTDB

 

這樣整個MayCat就集成好了,在實際項目中MyCat會對我們的SQL語句進行一個攔截分析,然後把他發送到具體的數據庫執行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章