目標
低成本的將現有的單機資料庫和應用平滑遷移到「雲」端,解決資料儲存和業務規模迅速增長情況下的資料瓶頸問題。
關鍵特性
支援 sql 92標準 支援mysql集群,可以作為proxy使用 支援jdbc連線oracle、db2、sql server,將其模擬為mysql server使用 支援galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性資料分片集群,自動故障切換,高可用性 ,支援讀寫分離,支援mysql雙主多從,以及一主多從的模式 ,支援全域性表,資料自動分片到多個節點,用於高效表關聯查詢 ,支援獨有的基於e-r 關係的分片策略,實現了高效的表關聯查詢多平台支援,部署和實施簡單。
優勢基於阿里開源的cobar產品而研發,cobar的穩定性、可靠性、優秀的架構和效能,以及眾多成熟的使用案例使得mycat一開始就擁有乙個很好的起點,站在巨人的肩膀上,我們能看到更遠。廣泛吸取業界優秀的開源專案和創新思路,將其融入到mycat的基因中,使得mycat在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。mycat背後有乙隻強大的技術團隊,其參與者都是5年以上資深軟體工程師、架構師、dba等,優秀的技術團隊保證了mycat的產品質量。 mycat並不依託於任何乙個商業公司,因此不像某些開源專案,將一些重要的特性封閉在其商業產品中,使得開源專案成了乙個擺設。
1、相關概念
schema:邏輯庫,與mysql中的database(資料庫)對應,乙個邏輯庫中定義了所包括的table。
table:表,即物理資料庫中儲存的某一張表,與傳統資料庫不同,這裡的**需要宣告其所儲存的邏輯資料節點datanode,這是通過**的分片規則定義來實現的,table可以定義其所屬的「子表(childtable)」,子表的分片依賴於與「父表」的具體分片位址,簡單的說,就是屬於父表裡某一條記錄a的子表的所有記錄都與a儲存在同乙個分片上。
分片規則:是乙個欄位與函式的**定義,根據這個欄位的取值來返回所在儲存的分片(datanode)的序號,每個**可以定義乙個分片規則,分片規則可以靈活擴充套件,預設提供了基於數字的分片規則,字串的分片規則等。
datanode: mycat的邏輯資料節點,是存放table的具體物理節點,也稱之為分片節點,通過datasource來關聯到後端某個具體資料庫上,一般來說,為了高可用性,每個datanode都設定兩個datasource,一主一從,當主節點宕機,系統自動切換到從節點。
datahost:定義某個物理庫的訪問位址,用於**到datanode上。
mycat目前通過配置檔案的方式來定義邏輯庫和相關配置:
mycat_home/conf/schema.xml中定義邏輯庫,表、分片節點等內容;
mycat_home/conf/rule.xml中定義分片規則;
mycat_home/conf/server.xml中定義使用者以及系統相關變數,如埠等。
關係圖:
2、垂直切分
根據業務的不同,將不同業務的表放到不同的資料庫中。示例:
schema.xml檔案:
<?xml version="1.0"?>
select user()
server.xml檔案:
<?xml version="1.0" encoding="utf-8"?>
druidparser
test
mycat1,mycat2,mycat3
user
mycat1,mycat2,mycat3
true
以上配置是將mycat1,mycat2和mycat3資料庫分別放在ip1,ip2和ip3對應的資料庫例項中。
優點:拆分後業務清晰,拆分規則明確;
系統之間整合或擴充套件容易;
資料維護簡單。
缺點:部分業務表無法 join,只能通過介面方式解決,提高了系統複雜度;
受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件跟效能提高;
事務處理複雜。
3、水平拆分
對資料量很大的表進行拆分,把這些表按照某種規則將資料存放到不同的資料庫中。示例:
schema.xml檔案:
<?xml version="1.0"?>
select user()
select user()
server.xml檔案:
<?xml version="1.0" encoding="utf-8"?>
druidparser
test
test
user
test
true
rule.xml檔案:
<?xml version="1.0" encoding="utf-8"?>
idfunc1
2 512
以上配置是把id在0512的資料放在ip1對應的資料庫mycat1中的tb_user表中,5121024的資料放在ip2對應的資料庫mycat2中的tb_user表中。
優點 :
拆分規則抽象好,join 操作基本可以資料庫做;
不存在單庫大資料,高併發的效能瓶頸;
應用端改造較少;
提高了系統的穩定性跟負載能力。
缺點 :
拆分規則難以抽象;
分片事務一致性難以解決;
資料多次擴充套件難度跟維護量極大;
跨庫 join 效能較差
4、各類資料庫中介軟體
中介軟體種類很多種,如下圖:
阿里巴巴b2b開發的關係型分布式系統,管理將近3000個mysql例項。 在阿里經受住了考驗,後面由於作者的走開的原因cobar沒有人維護 了,阿里也開發了tddl替代cobar。
mycat:
社群愛好者在阿里cobar基礎上進行二次開發,解決了cobar當時存 在的一些問題,並且加入了許多新的功能在其中。目前mycat社群活 躍度很高,目前已經有一些公司在使用mycat。
oneproxy:
資料庫界大牛,前支付寶資料庫團隊領導樓總開發,基於mysql官方 的proxy思想利用c進行開發的,oneproxy是一款商業收費的中介軟體,專注在效能和穩定性上。
vitess:
這個中介軟體是youtube生產在使用的,但是架構很複雜。 與以往中介軟體不同,使用vitess應用改動比較大要使用他提供語言的api介面。
kingshard:
kingshard是前360atlas中介軟體開發團隊的陳菲利用業務時間用go語言開發的,目前在不斷完善。
atlas:
360團隊基於mysql proxy 把lua用c改寫。原有版本是支援分表, 目前已經放出了分庫分表版本。
maxscale與mysql route:
maxscale是mariadb 研發的,目前版本不支援分庫分表。mysql route是現在mysql 官方oracle公司發布出來的乙個中介軟體。
資料庫中介軟體 MyCat配置示例
資料庫中介軟體 mycat mycat連線協議和mysql一樣 mycat支援mysql oracle sqlserver等 安裝完mysql後啟動服務 service mysql start 登入 mysql u root 設定遠端登入 grant all privileges on to roo...
分庫分表中介軟體Mycat配置詳解
目錄 mycat介紹 server.xml schema.xml rule.xml mycat是乙個開源的分庫分表中介軟體。mycat的前身是阿里的cobar。用於在多個資料庫上的表通過mycat 連線,實現一張或者多張分庫或分表的大表資料根據定義的分片規則聚合展示。學習mycat主要是學習myca...
Mycat中介軟體的下發準則
mycat中的路由結果是通過分片欄位和分片方法來確定的。例如下圖中的乙個mycat分庫方案 如果查詢條件中有 id 欄位的情況還好,查詢將會落到某個具體的分片。例如 mysql select from tt waybill where id 12330 此時mycat會計算路由結果 12330 3 ...