隔了好久,才想起來更新博客,最近倒騰的數(shù)據(jù)庫從Oracle換成了MySQL,研究了一段時間,感覺社區(qū)版的MySQL在各個方面都遜色于Oracle,Oracle真的好方便!
好了,不廢話,這次準備記錄一些關(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能看到更遠。
---------------------------------------------------------MyCAT的下載方式--------------------------------------------------------------------
MyCAT的SVN地址為:http://code.taobao.org/svn/openclouddb/
---------------------------------------------------------MyCAT的重要特性--------------------------------------------------------------------
支持 SQL 92標準;
支持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)----------------------------------------------------------------
總體上分成三個部分,最前端的是連接器,線程管理使用了資源池,并且默認采用了AIO的方式(這些基本信息可以再啟動日志里面看到);
中間層在圖中已經(jīng)描述的很清楚了,SQL解析器+SQL路由,SQL Executor需要具體看源碼才能了解,因為通過這段時間對MyCAT的測試,沒有感覺到SQL Executor的存在,更多的感覺是一個SQL process的東西,DataNode和心跳檢測算是中間層實現(xiàn)的兩個組件,一個是和MySQL的庫(注意,不是實例)相關(guān),一個是常見的監(jiān)測機制的功能模塊;
最下層的存儲就是是MySQL的集群了~怎么玩MySQL的集群,由我們自己決定╰(?? ▽ ??)╯。
目前累計服務(wù)客戶超過千家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。創(chuàng)新互聯(lián)公司始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。
--------------------------------------------------------------怎么使用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)上摘抄的一個示例模板
-
-
-
-
-
-
-
-
-
-
-
-
-
-
writeType="0" dbType="mysql" dbDriver="native">
-
select user()
-
-
-
-
-
首先是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是負責(zé)寫入數(shù)據(jù)的MySQL實例,writehost是負責(zé)讀的MySQL實例,如果兩個實例的具體信息寫成一樣,那就意味著后端使用單實例,如果配置成不同的實例,那么就在兩個實例之間配置主從同步,然后通過MyCAT實現(xiàn)讀寫分離
對數(shù)據(jù)庫進行垂直切分,主要由schema.xml來完成,這個以后再詳細介紹。
rule.xml如示例
rule.xml里面的配置主要用于對表的水平切分,MyCAt本身提供了很多種水平切分的策略,這個示例顯示的是取模分片,總共分成四片,user_id對1024取模,然后分成兩片,每一片512個。
其他的切分策略以后再詳細介紹
server.xml如示例
server.xml里面配置MyCAT的邏輯庫參數(shù),如示例,配置的就是邏輯庫weixin和yixin的登錄用戶名和密碼
這個XML里面其實還有一些有關(guān)于MyCAT性能調(diào)整的參數(shù),不過略去了,東西太多,以后再詳細介紹
----------------------------------------------------------------------華麗的分割線-------------------------------------------------------------
簡單的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,不過這個需要去看源代碼才知曉細節(jié)了。
這次只打算寫這么多,關(guān)于MyCAT的一些細節(jié)介紹,留給下一章~
下一章:http://blog.itpub.net/29510932/viewspace-1667814/
新聞名稱:MySQL分布式集群之MyCAT(一)簡介(修正)
轉(zhuǎn)載來于:
http://weahome.cn/article/pjgoce.html