Mycat 資料庫分庫分表中介軟體學習指南
對於分庫分表的資料庫設計很多情況下還是需要的,我們就此作為學習的起點,一起來看下前世來自阿里的Cobar而今的Mycat。
Mycat是什麼
一個徹底開源的,面向企業應用開發的大資料庫叢集 支援事務、ACID、可以替代MySQL的加強版資料庫 一個可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集 一個融合記憶體快取技術、NoSQL技術、HDFS大資料的新型SQL Server 結合傳統資料庫和新型分散式資料倉庫的新一代企業級資料庫產品 一個新穎的資料庫中介軟體產品目標
低成本的將現有的單機資料庫和應用平滑遷移到“雲”端,解決資料儲存和業務規模迅速增長情況下的資料瓶頸問題。
長期規劃2.0
完全實現分散式事務,完全的支援分散式。 通過Mycat web(eye)完成視覺化配置,及智慧監控,自動運維。 通過mysql 本地節點,完整的解決資料擴容難度,實現自動擴容機制,解決擴容難點。 支援基於zookeeper的主從切換及Mycat叢集化管理。 通過Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的相容Mycat叢集節點的動態上下線。 接入Spark等第三方工具,解決資料分析及大資料聚合的業務場景。 通過Mycat智慧優化,分析分片熱點,提供合理的分片建議,索引建議,及資料切分實時業務建議。優勢
基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和效能以及眾多成熟的使用案例使得MYCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,我們能看到更遠。業界優秀的開源專案和創新思路被廣泛融入到MYCAT的基因中,使得MYCAT在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。
MYCAT背後有一支強大的技術團隊,其參與者都是5年以上資深軟體工程師、架構師、DBA等,優秀的技術團隊保證了MYCAT的產品質量。
MYCAT並不依託於任何一個商業公司,因此不像某些開源專案,將一些重要的特性封閉在其商業產品中,使得開源專案成了一個擺設。
mycat監控
支援對Mycat、Mysql效能監控 支援對Mycat的JVM記憶體提供監控服務 支援對執行緒的監控 支援對作業系統的CPU、記憶體、磁碟、網路的監控基礎學習資源
Mycat權威指南:PDF
Mycat前世今生
2013年阿里的Cobar在社群使用過程中發現存在一些比較嚴重的問題,及其使用限制,經過Mycat發起人第一次改良,第一代改良版——Mycat誕生。 Mycat開源以後,一些Cobar的使用者參與了Mycat的開發,最終Mycat發展成為一個由眾多軟體公司的實力派架構師和資深開發人員維護的社群型開源軟體。
2014年Mycat首次在上海的《中華架構師》大會上對外宣講,更多的人蔘與進來,隨後越來越多的專案採用了Mycat。
2015年5月,由核心參與者們一起編寫的第一本官方權威指南《Mycat權威指南》電子版釋出,累計超過500本,成為開源專案中的首創。
2015年10月為止,Mycat專案總共有16個Committer。
截至2015年11月,超過300個專案採用Mycat,涵蓋銀行、電信、電子商務、物流、移動應用、O2O的眾多領域和公司。
截至2015年12月,超過4000名使用者加群或研究討論或測試或使用Mycat。
Mycat是基於開源cobar演變而來,我們對cobar的程式碼進行了徹底的重構,使用NIO重構了網路模組,並且優化了Buffer核心,增強了聚合,Join等基本特性,同時相容絕大多數資料庫成為通用的資料庫中介軟體。1.4 版本以後 完全的脫離基本cobar核心,結合Mycat叢集管理、自動擴容、智慧優化,成為高效能的中介軟體。我們致力於開發高效能資料庫中間而努力。永不收費,永不閉源,持續推動開源社群的發展。
Mycat吸引和聚集了一大批業內大資料和雲端計算方面的資深工程師,Mycat的發展壯大基於開源社群志願者的持續努力,感謝社群志願者的努力讓Mycat更加強大,同時我們也歡迎社群更多的志願者,特別是公司能夠參與進來,參與Mycat的開發,一起推動社群的發展,為社群提供更好的開源中介軟體。
Mycat還不夠強大,Mycat還有很多不足,歡迎社群志願者的持續優化改進。
關鍵特性
支援SQL92標準 支援MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法 遵守Mysql原生協議,跨語言,跨平臺,跨資料庫的通用中介軟體代理。 基於心跳的自動故障切換,支援讀寫分離,支援MySQL主從,以及galera cluster叢集。 支援Galera for MySQL叢集,Percona Cluster或者MariaDB cluster 基於Nio實現,有效管理執行緒,解決高併發問題。 支援資料的多片自動路由與聚合,支援sum,count,max等常用的聚合函式,支援跨庫分頁。 支援單庫內部任意join,支援跨庫2表join,甚至基於caltlet的多表join。 支援通過全域性表,ER關係的分片策略,實現了高效的多表join查詢。 支援多租戶方案。 支援分散式事務(弱xa)。 支援XA分散式事務(1.6.5)。 支援全域性序列號,解決分散式下的主鍵生成問題。 分片規則豐富,外掛化開發,易於擴充套件。 強大的web,命令列監控。 支援前端作為MySQL通用代理,後端JDBC方式支援Oracle、DB2、SQL Server 、 mongodb 、巨杉。 支援密碼加密 支援服務降級 支援IP白名單 支援SQL黑名單、sql注入攻擊攔截 支援prepare預編譯指令(1.6) 支援非堆記憶體(Direct Memory)聚合計算(1.6) 支援PostgreSQL的native協議(1.6) 支援mysql和oracle儲存過程,out引數、多結果集返回(1.6) 支援zookeeper協調主從切換、zk序列、配置zk化(1.6) 支援庫內分表(1.6) 叢集基於ZooKeeper管理,線上升級,擴容,智慧優化,大資料處理(2.0開發版)。下載:
安裝:
下載的檔案直接解壓即可。
執行:
linux:
./mycat start 啟動
./mycat stop 停止
./mycat console 前臺執行
./mycat install 新增到系統自動啟動(暫未實現)
./mycat remove 取消隨系統自動啟動(暫未實現)
./mycat restart 重啟服務
./mycat pause 暫停
./mycat status 檢視啟動狀態
win:
直接執行startup_nowrap.bat,如果出現閃退,在cmd 命令列執行,查看出錯原因。
記憶體配置:
啟動前,一般需要修改JVM配置引數,開啟conf/wrapper.conf檔案,如下行的內容為2G和2048,可根據本機配置情況修改為512M或其它值。以下配置跟jvm引數完全一致,可以根據自己的jvm引數調整。
Java Additional Parameters
wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx100m
wrapper.java.additional.11=-Xms100m
wrapper.java.additional.12=-XX:+UseParNewGC
wrapper.java.additional.13=-XX:+UseConcMarkSweepGC
wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection
wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0
wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70
以下配置作廢:
wrapper.java.initmemory=3
wrapper.java.maxmemory=64
Mycat連線測試:
測試mycat與測試mysql完全一致,mysql怎麼連線,mycat就怎麼連線。
推薦先採用命令列測試:
mysql -uroot -proot -P8066 -h127.0.0.1
如果採用工具連線,1.4,1.3目前部分工具無法連線,會提示database not selected,建議採用高版本,navicat測試。1.5已經修復了部分工具連線。