隔了很久,纔想起來更新博客,最近倒騰的數據庫從Oracle換成了MySQL,研究了一段時間,感受社區版的MySQL在各個方面都遜色於Oracle,Oracle真的好方便!
好了,不廢話,此次準備記錄一些關於MySQL分佈式集羣搭建的一個東東,MyCAT,我把他理解爲一個MySQL代理。
-----------------------------------------------------------------重要的TIPs-----------------------------------------------------------------------
MyCAT的團隊已經發布了1.4Alpha版本,這其中修復了很多的bug,也添加了新功能,
博主這邊測試用的是1.3的版本,因此和最新版本的測試結果可能出現不一致!
-------------------------------------------------------------------背景介紹------------------------------------------------------------------
MyCAT的背景介紹直接略過,沒啥用,固然,這是一個由JAVA開發的東東,這一點須要瞭解~。
-----------------------------------------------------------------MyCAT的前身----------------------------------------------------------------
MyCAT的前身,是阿里巴巴於2012年6月19日,正式對外開源的數據庫中間件Cobar,Cobar的前身是早已經開源的Amoeba,不過其做者陳思儒離職去盛大以後,阿里巴巴內部考慮到Amoeba的穩定性、性能和功能支持,以及其餘因素,從新設立了一個項目組而且更換名稱爲Cobar。Cobar是由 Alibaba 開源的 MySQL 分佈式處理中間件,它能夠在分佈式的環境下看上去像傳統數據庫同樣提供海量數據服務。前端
Cobar自誕生之日起, 就受到廣大程序員的追捧,可是自2013年後,幾乎沒有後續更新。在此狀況下,MyCAT應運而生,它基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和性能,以及衆多成熟的使用案例使得MyCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,MyCAT能看到更遠。
---------------------------------------------------------MyCAT的下載方式--------------------------------------------------------------------
MyCAT的SVN地址爲:http://code.taobao.org/svn/openclouddb/
---------------------------------------------------------MyCAT的重要特性--------------------------------------------------------------------
支持 SQL 92標準;
支持MySQL集羣,能夠做爲Proxy使用;
支持JDBC鏈接ORACLE、DB二、SQL Server,將其模擬爲MySQL Server使用;
支持galera for mysql集羣,percona-cluster或者mariadb cluster,提供高可用性數據分片集羣;
自動故障切換,高可用性;
支持讀寫分離,支持MySQL雙主多從,以及一主多從的模式;
支持全局表,數據自動分片到多個節點,用於高效表關聯查詢;
支持獨有的基於E-R 關係的分片策略,實現了高效的表關聯查詢;
多平臺支持,部署和實施簡單。
------------------------------------------------------------MyCAT的體系結構----------------------------------------------------------------
整體上分紅三個部分,最前端的是鏈接器,線程管理使用了資源池,而且默認採用了AIO的方式(這些基本信息能夠再啓動日誌裏面看到);
中間層在圖中已經描述的很清楚了,SQL解析器+SQL路由,SQL Executor須要具體看源碼才能瞭解,由於經過這段時間對MyCAT的測試,沒有感受到SQL Executor的存在,更多的感受是一個SQL process的東西,DataNode和心跳檢測算是中間層實現的兩個組件,一個是和MySQL的庫(注意,不是實例)相關,一個是常見的監測機制的功能模塊;
最下層的存儲就是是MySQL的集羣了~怎麼玩MySQL的集羣,由咱們本身決定╰(?? ▽ ??)╯。node
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="weixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="weixin" > <schema name="yixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="yixin" /> <dataNode name="dn1" dataHost="localhost0" database="weixin" /> <dataNode name="dn2" dataHost="localhost0" database="yixin" /> <dataHost name="localhost0" maxCon="450" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="123456" /> <readHost host="hostS1" url="localhost:3307" user="test" password="123456" /> </dataHost> </mycat:schema>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://org.opencloudb/"> <tableRule name="rule"> <rule> <columns>user_id</columns> <algorithm>func1</algorithm> </rule> </tableRule> <function name="func1" class="org.opencloudb.route.function.PartitionByLong"> <property name="partitionCount">2</property> <property name="partitionLength">512</property> </function> </mycat:rule>
<!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <property name="sequnceHandlerType">0</property> </system> <user name="test"> <property name="password">test</property> <property name="schemas">weixin,yixin</property> </user> </mycat:server>
MySQL分佈式集羣之MyCAT(一)簡介(修正)-wangwenan6-ITPUB博客
http://blog.itpub.net/29510932/viewspace-1664499/mysql