溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL分布式集群之MyCAT(一)簡介(修正)

發(fā)布時間:2020-08-14 12:15:27 來源:ITPUB博客 閱讀:186 作者:hmy_362322 欄目:MySQL數(shù)據(jù)庫
隔了好久,才想起來更新博客,最近倒騰的數(shù)據(jù)庫從Oracle換成了MySQL,研究了一段時間,感覺社區(qū)版的MySQL在各個方面都遜色于Oracle,Oracle真的好方便!
好了,不廢話,這次準(zhǔn)備記錄一些關(guān)于MySQL分布式集群搭建的一個東東,MyCAT,我把他理解為一個MySQL代理。
-----------------------------------------------------------------重要的TIPs-----------------------------------------------------------------------
MyCAT的團隊已經(jīng)發(fā)布了1.4Alpha版本,這其中修復(fù)了不少的bug,也添加了新功能,
博主這邊測試用的是1.3的版本,所以和最新版本的測試結(jié)果可能出現(xiàn)不一致!


-------------------------------------------------------------------背景介紹------------------------------------------------------------------

MyCAT的背景介紹直接略過,沒啥用,當(dāng)然,這是一個由JAVA開發(fā)的東東,這一點需要了解~。

-----------------------------------------------------------------MyCAT的前身----------------------------------------------------------------

MyCAT的前身,是阿里巴巴于2012年6月19日,正式對外開源的數(shù)據(jù)庫中間件Cobar,Cobar的前身是早已經(jīng)開源的Amoeba,不過其作者陳思儒離職去盛大之后,阿里巴巴內(nèi)部考慮到Amoeba的穩(wěn)定性、性能和功能支持,以及其他因素,重新設(shè)立了一個項目組并且更換名稱為Cobar。Cobar是由 Alibaba 開源的 MySQL 分布式處理中間件,它可以在分布式的環(huán)境下看上去像傳統(tǒng)數(shù)據(jù)庫一樣提供海量數(shù)據(jù)服務(wù)。

Cobar自誕生之日起, 就受到廣大程序員的追捧,但是自2013年后,幾乎沒有后續(xù)更新。在此情況下,MyCAT應(yīng)運而生,它基于阿里開源的Cobar產(chǎn)品而研發(fā),Cobar的穩(wěn)定性、可靠性、優(yōu)秀的架構(gòu)和性能,以及眾多成熟的使用案例使得MyCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,MyCAT能看到更遠(yuǎn)。

---------------------------------------------------------MyCAT的下載方式--------------------------------------------------------------------
MyCAT的SVN地址為:http://code.taobao.org/svn/openclouddb/

---------------------------------------------------------MyCAT的重要特性--------------------------------------------------------------------
支持 SQL 92標(biāo)準(zhǔn);
支持MySQL集群,可以作為Proxy使用;
支持JDBC連接ORACLE、DB2、SQL Server,將其模擬為MySQL Server使用;
支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性數(shù)據(jù)分片集群;
自動故障切換,高可用性;
支持讀寫分離,支持MySQL雙主多從,以及一主多從的模式;
支持全局表,數(shù)據(jù)自動分片到多個節(jié)點,用于高效表關(guān)聯(lián)查詢;
支持獨有的基于E-R 關(guān)系的分片策略,實現(xiàn)了高效的表關(guān)聯(lián)查詢;
多平臺支持,部署和實施簡單。

------------------------------------------------------------MyCAT的體系結(jié)構(gòu)----------------------------------------------------------------
MySQL分布式集群之MyCAT(一)簡介(修正)
總體上分成三個部分,最前端的是連接器,線程管理使用了資源池,并且默認(rèn)采用了AIO的方式(這些基本信息可以再啟動日志里面看到);
中間層在圖中已經(jīng)描述的很清楚了,SQL解析器+SQL路由,SQL Executor需要具體看源碼才能了解,因為通過這段時間對MyCAT的測試,沒有感覺到SQL Executor的存在,更多的感覺是一個SQL process的東西,DataNode和心跳檢測算是中間層實現(xiàn)的兩個組件,一個是和MySQL的庫(注意,不是實例)相關(guān),一個是常見的監(jiān)測機制的功能模塊;
最下層的存儲就是是MySQL的集群了~怎么玩MySQL的集群,由我們自己決定╰(?? ▽ ??)╯。

--------------------------------------------------------------怎么使用MyCAT---------------------------------------------------------- 
MyCAT目前通過配置文件的方式來定義邏輯庫和相關(guān)配置,主要是包括三個文件:
MYCAT_HOME/conf/schema.xml中定義邏輯庫,表、分片節(jié)點等內(nèi)容;
 MYCAT_HOME/conf/rule.xml中定義分片規(guī)則;
MYCAT_HOME/conf/server.xml中定義用戶以及系統(tǒng)相關(guān)變量,如端口等。

 不著急,這一篇簡單介紹這幾個配置文件的作用和一些參數(shù)的意義。
一個一個來,先看schema.xml,這是從網(wǎng)上摘抄的一個示例模板                

點擊(此處)折疊或打開

  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://org.opencloudb/">
  4.     <schema name="weixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="weixin" >
  5.         
  6.    
  7.     <schema name="yixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="yixin" />
  8.         
  9.     
  10.     <dataNode name="dn1" dataHost="localhost0" database="weixin" />
  11.     <dataNode name="dn2" dataHost="localhost0" database="yixin" />

  12.     <dataHost name="localhost0" maxCon="450" minCon="10" balance="1"
  13.        writeType="0" dbType="mysql" dbDriver="native">
  14.        <heartbeat>select user()</heartbeat>
  15.        <!-- can have multi write hosts -->
  16.        <writeHost host="hostM1" url="localhost:3306" user="root" password="123456" />
  17.            <readHost host="hostS1" url="localhost:3307" user="test" password="123456" />
  18.     </dataHost>
  19. </mycat:schema>
首先是schema name = "weixin",這一項配置以后的效果就是,當(dāng)MySQL客戶端連接MyCAT時,通過Show DATABASE命令,能看到的數(shù)據(jù)庫的,名字,
比如在這個配置文件里面,就配置了兩個數(shù)據(jù)庫,weixin和yixin,這兩個庫各自包含一張user表。
注意:MyCAT對外端顯示出來的數(shù)據(jù)庫,和數(shù)據(jù)庫里面的表,全部在schema里面配置,沒有寫在這個里面的表或者庫,即使后端的MySQL里面存在,也無法通過MyCAT去訪問,不過MyCAT不會去定義具體表的結(jié)構(gòu)。
然后是datanode,這個屬性指定了schema的表,具體存放在哪個數(shù)據(jù)庫,比如這個配置里面,指定了dn1的數(shù)據(jù)節(jié)點位于localhost0,這個數(shù)據(jù)庫實例的名為weixin的數(shù)據(jù)庫,dn2同理。
datahost列出了實際的后端MySQL集群的具體信息,writehost是負(fù)責(zé)寫入數(shù)據(jù)的MySQL實例,writehost是負(fù)責(zé)讀的MySQL實例,如果兩個實例的具體信息寫成一樣,那就意味著后端使用單實例,如果配置成不同的實例,那么就在兩個實例之間配置主從同步,然后通過MyCAT實現(xiàn)讀寫分離
對數(shù)據(jù)庫進行垂直切分,主要由schema.xml來完成,這個以后再詳細(xì)介紹。

rule.xml如示例

點擊(此處)折疊或打開

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
  3. <mycat:rule xmlns:mycat="http://org.opencloudb/">
  4.  <tableRule name="rule">
  5.     <rule>
  6.       <columns>user_id</columns>
  7.       <algorithm>func1</algorithm>
  8.     </rule>
  9.  </tableRule>

  10.  <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
  11.     <property name="partitionCount">2</property>
  12.     <property name="partitionLength">512</property>
  13.  </function>
  14. </mycat:rule>
               
rule.xml里面的配置主要用于對表的水平切分,MyCAt本身提供了很多種水平切分的策略,這個示例顯示的是取模分片,總共分成四片,user_id對1024取模,然后分成兩片,每一片512個。
其他的切分策略以后再詳細(xì)介紹

server.xml如示例

點擊(此處)折疊或打開

  1. <!DOCTYPE mycat:server SYSTEM "server.dtd">
  2. <mycat:server xmlns:mycat="http://org.opencloudb/">
  3.     <system>
  4.         <property name="sequnceHandlerType">0</property>
  5.     </system>
  6.     <user name="test">
  7.        <property name="password">test</property>
  8.        <property name="schemas">weixin,yixin</property>
  9.     </user>
  10. </mycat:server>

server.xml里面配置MyCAT的邏輯庫參數(shù),如示例,配置的就是邏輯庫weixin和yixin的登錄用戶名和密碼
這個XML里面其實還有一些有關(guān)于MyCAT性能調(diào)整的參數(shù),不過略去了,東西太多,以后再詳細(xì)介紹

----------------------------------------------------------------------華麗的分割線-------------------------------------------------------------

簡單的MyCAT搭建大致上就包括這些內(nèi)容,現(xiàn)在講講使用一段時間以后,對MyCAT的一些總結(jié);
1.MyCAT的性能表現(xiàn)還是不錯的,這幾天一直對MyCAT的各方面進行測試,發(fā)現(xiàn)MyCAT作為一個代理,雖然是在JAVA虛擬機上面運行,但是面對接近9K的QPS的峰值的時候,本身并沒有出現(xiàn)無響應(yīng)或者丟失連接的問題;
2.MyCAT對前端顯示的所有的庫,表,全部由schema來配置,但是本身不定義表結(jié)構(gòu),這使得后端的表結(jié)構(gòu)如果出現(xiàn)不一致,MyCAT前端是察覺不到的,不太方便吧;
3.第二點的不方便,也反映了一點,沒有配置到schema的表,完全無法通過MyCAT去操作,這也算是安全性良好的一個表現(xiàn)吧;
4.之前說SQL Executor沒感覺到,也是因為在一些測試中,發(fā)現(xiàn)MyCAT更像一個提供轉(zhuǎn)發(fā)和結(jié)果合并功能的代理,只是對SQL和結(jié)果進行了process,不過這個需要去看源代碼才知曉細(xì)節(jié)了。

這次只打算寫這么多,關(guān)于MyCAT的一些細(xì)節(jié)介紹,留給下一章~

下一章:http://blog.itpub.net/29510932/viewspace-1667814/
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI