




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 MYCATMycat在線視頻培訓代碼demo: Mycat 開源組 -MYCAT 是什么?-MYCAT的前世今生。-MYCAT社區發展。-數據庫切分及其解決方案。-MYCAT特性及其解決方案。-MYCAT入門介紹。內容:MYCAT是什么一個用于MySQL讀寫分離和與數據切分的高可用中間件一個模擬為MySQL Server的超級數據庫代理一個能平滑擴展支持1000億大表的分布式數據庫系統一個可管控多種關系數據庫的數據庫路由器MYCAT之前世今生2013年阿里的Cobar在某大型項目中使用過程中發現存在一些比較嚴重的問題,于是第一代改良版Mycat誕生。Mycat開源以后,一些Cobar的用戶參
2、與了Mycat的開發,最終Mycat發展成為一個由眾多軟件公司的實力派架構師和資深開發人員維護的社區型開源軟件。2014年Mycat首次在上海的中華架構師大會上對外宣講,引發圍觀,更多的人參與進來,隨后越來越多的項目采用了Mycat2015年7月為止,Mycat項目總共有16個Committer,其中核心參與者的年薪總額超過200萬2015年5月,由核心參與者們一起編寫的第一本官方權威指南Mycat權威指南電子版發布,累計超過500本,成為開源項目中的首創。截至2015年7月,超過100個項目采用Mycat,涵蓋銀行、電信、電子商務、物流、移動應用、O2O的眾多領域和公司。截至2014年7月,
3、Mycat官方QQ群(106088787)已經超過2700人,大多數為資深IT工程師、架構師、DBA、以及一些CXO和高端獵頭,成為國內具有影響力的高端IT專業群Mycat社區首次提出BigSQL的概念,并逐步將大數據和實時計算等先進技術引入到Mycat里,從而吸引和聚集了一大批業內大數據和云計算方面的資深工程師,Mycat社區成為名副其實的國內大數據領域實力派成員。Mycat社區里不斷有優秀工程師被創業公司挖走,為了能更好的支持創業公司并尋求更多的優秀工程師參與采用,Mycat社區目前已經開始開展在線高端IT培訓,培養高端Java架構師、工程師。為什么選擇MYCAT基于阿里的成熟項目Coba
4、r而來,它有過大量的大規模生產案例社區非常活躍,維護者的水平很高,重大Bug都24小時修復目前的生產案例是開源項目中為數最多的,而且很多是大型項目Mycat的版本分為長期支持版本和當前最新版本兩種,前者出現重大Bug后,還會及時修復,解決了生產中應用的后顧之憂Mycat的資料非常全,包括志愿者提供的資料,用戶分享的經驗資料,以及官方定期更新的Mycat權威指南,絕大多數技術問題,都可以通過文檔和社區交流來解決如果需要專業技術支持服務,也可以跟Mycat社區交流,通過贊助開源項目的方式,名利雙收,一舉兩得。何為數據(系統)切分? 簡單來說,就是指通過某種特定的條件,按照某個維度,將我們存放在同一
5、個數據庫中的數據分散存放到多個數據庫(主機)上面以達到分散單庫(主機)負載的效果。 切分模式:A.垂直(縱向)切分。B.水平切分。系統切分及其解決方案一個數據庫由很多表的構成,每個表對應著不同的業務,垂直切分是指按照業務將表進行分類,分布到不同的數據庫上面,這樣也就將數據或者說壓力分擔到不同的庫上面,如下圖:優點: -拆分后業務清晰,拆分規則明確。 -系統之間整合或擴展容易。 -數據維護簡單。缺點: -部分業務表無法JOIN,只能通過接口方式解決,提高了系統復雜度。 -受每種業務不同的限制存在單庫性能瓶頸,不易數據擴展跟性能提高。 -事務處理復雜。 垂直拆分相對于垂直拆分,水平拆分不是將表的數
6、據做分類,而是按照某個字段的某種規則來分散到多個庫之中,每個表中包含一部分數據。簡單來說,我們可以將數據的水平切分理解為是按照數據行的切分,就是將表中的某些行切分到一個數據庫,而另外的某些行又切分到其他的數據庫中,主要有分表,分庫兩種模式,如圖:優點: 不存在單庫大數據,高并發的性能瓶頸。 對應用透明,應用端改造較少。 按照合理拆分規則拆分,JOIN操作基本避免跨庫。 提高了系統的穩定性跟負載能力。缺點: 拆分規則難以抽象。 分片事務一致性難以解決。 數據多次擴展難度跟維護量極大。 跨庫JOIN性能較差。 水平切分前面講了垂直切分跟水平切分的不同跟優缺點,會發現每種切分方式都有缺點,但共同的特
7、點缺點有:-引入分布式事務的問題。-跨節點JOIN 的問題。-跨節點合并排序分頁問題。針對數據源管理,目前主要有兩種思路:A. 客戶端模式,在每個應用程序模塊中配置管理自己需要的一個(或者多個)數據源,直接訪問各個數據庫,在模塊內完成數據的整合; 優點:相對簡單,無性能損耗。 缺點:不夠通用,數據庫連接的處理復雜,對業務不夠透明,處理復雜。B. 通過中間代理層來統一管理所有的數據源,后端數據庫集群對前端應用程序透明; 優點:通用,對應用透明,改造少。 缺點:實現難度大,有二次轉發性能損失。切分原則:-盡量不切分,架構是進化而來,不是一蹴而就。-最大可能的找到最合適的切分維度。-由于數據庫中間件
8、對數據JOIN 實現的優劣難以把握,而且實現高性能難度極大,業務讀取 盡量少使用多表JOIN-盡量通過數據冗余,分組避免數據垮庫多表JOIN。-盡量避免分布式事務。-單表切分數據1000萬以內。切分的處理難點: -360 ATLAS-ALIBABA COBAR -MYCAT-TDDL-HEISENBERG-OCEANUS-VITESS-ONEPROXY -DRDS切分方案TLAS是由 QIHOO 360, WEB平臺部基礎架構團隊開發維護的一個基于MYSQL協議的數據中間層項目。它是在版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用ATLAS運行的MYSQL業務,每天承載的
9、讀寫請求數達幾十億條。主要功能:主要功能:* 讀寫分離* 從庫負載均衡* IP過濾* SQL語句黑白名單* 自動分表360 AtlasCOBAR是阿里巴巴(B2B)部門開發的一種關系型數據的分布式處理系統,它可以在分布式的環境下看上去像傳統數據庫一樣為您提供海量數據服務. COBAR的分布式主要是通過將表放入不同的庫來實現:1. COBAR支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分2. COBAR也支持將不同的表放入不同的庫3. 多數情況下,用戶會將以上兩種方式混合使用這里需要強調的是,COBAR不支持將一張表,例如TEST表拆分成TEST_1, TEST_2, TEST_3
10、.放在同一個庫中,必須將拆分后的表分別放入不同的庫來實現分布式。HA:在用戶配置了MYSQL心跳的情況下,COBAR可以自動向后端連接的MYSQL發送心跳,判斷MYSQL運行狀況,一旦運行出現異常,COBAR可以自動切換到備機工作。但需要強調的是:1. COBAR的主備切換有兩種觸發方式,一種是用戶手動觸發,一種是COBAR的心跳語句檢測到異常后自動觸發。那么,當心跳檢測到主機異常,切換到備機,如果主機恢復了,需要用戶手動切回主機工作,COBAR不會在主機恢復時自動切換回主機,除非備機的心跳也返回異常。2. COBAR只檢查MYSQL主備異常,不關心主備之間的數據同步,因此用戶需要在使用COB
11、AR之前在MYSQL主備上配置雙向同步,詳情可以參閱MYSQL參考手冊。其次,我們也需要注意COBAR的功能約束:1) 不支持跨庫情況下的JOIN、分頁、排序、子查詢操作。2) SET語句執行會被忽略,事務和字符集設置除外。3) 分庫情況下,INSERT語句必須包含拆分字段列名。4) 分庫情況下,UPDATE語句不能更新拆分字段的值。5) 不支持SAVEPOINT操作。6) 暫時只支持MYSQL數據節點。alibaba cobar淘寶根據自己的業務特點開發了TDDL(TAOBAO DISTRIBUTED DATA LAYER 外號:頭都大了 )框架,主要解決了分庫分表對應用的透明化以及異構數據
12、庫之間的數據復制,它是一個基于集中式配置的 JDBC DATASOURCE實現,具有主備,讀寫分離,動態數據庫配置等功能。TDDL所處的位置(TDDL通用數據訪問層,部署在客戶端的JAR包,用于將用戶的SQL路由到指定的數據庫中). 1.數據庫主備和動態切換2.帶權重的讀寫分離3.單線程讀重試4.集中式數據源信息管理和動態變更5.剝離的穩定JBOSS數據源6.支持MYSQL和ORACLE數據庫7.基于JDBC規范,很容易擴展支持實現JDBC規范的數據源8.無SERVER,CLIENT-JAR形式存在,應用直連數據庫9.讀寫次數,并發度流程控制,動態變更10.可分析的日志打印,日志流控,動態變更
13、TDDL強大好用的MYSQL分庫分表中間件,由百度員工個人編寫。分庫分表與應用脫離,分庫表如同使用單庫表一樣減少DB 連接數壓力熱重啟配置可水平擴容遵守MYSQL原生協議無語言限制,MYSQLCLIENT,C,JAVA等都可以使用HEISENBERG服務器通過管理命令可以查看,如連接數,線程池,結點等,并可以調整heisenberg58 OCEANUS致力于打造一個功能簡單、可依賴、易于上手、易于擴展、易于集成的解決方案,甚至是平臺化系統。擁抱開源,提供各類插件機制集成其他開源項目,新手可以在幾分鐘內上手編程,分庫分表邏輯不再與業務緊密耦合,擴容有標準模式,減少意外錯誤的發生 DATANODE
14、:數據源節點。為一個數據源命名,配置鏈接屬性、報警實現NAMENODE:數據源的簇。為一組數據源命名,指定這組數據源的負載方式、訪問模式、權重TABLE:映射表。匹配解析SQL中的TABLE名稱,命中TABLE標簽的NAME屬性值后,會執行約定的路由邏輯BEAN:實體。由其他標簽引用,實體類必須有無參的構造函數TRACKER:監控埋點。涉及到計算和IO的功能點都有監控點,自定義一個埋點實現類,當功能耗時超出預期時會執行其中的回調函數,便于監控和優化系統Oceanus谷歌開發的數據庫中間件,集群基于ZOOKEEPER管理,通過RPC方式進行數據處理,總體分為,SERVER,COMMAND LIN
15、E,GUI監控 3部分。vitess分布式關系型數據庫服務DRDS阿里分布式關系型數據庫服務(DISTRIBUTE RELATIONAL DATABASE SERVICE,簡稱DRDS)是一種水平拆分、可平滑擴縮容、讀寫分離的在線分布式數據庫服務。前身為淘寶TDDL,是近千個應用首選組件,已穩定服務了七年以上。rds/drds-遵守MYSQL原生協議,跨語言,跨數據庫的通用中間件代理。-基于心跳的自動故障切換,支持讀寫分離,支持MYSQL一雙主多從,以及一主多從-有效管理數據源連接,基于數據分庫,而不是分表的模式。-基于NIO實現,有效管理線程,高并發問題。-支持數據的多片自動路由與聚合,支持
16、SUM,COUNT,MAX等常用的聚合函數。-支持2表JOIN,甚至基于CALTLET的多表JOIN。-支持通過全局表,ER關系的分片策略,實現了高效的多表JOIN查詢。-支持多租戶方案。-支持分布式事務(弱XA)-支持全局序列號,解決分布式下的主鍵生成問題。-分片規則豐富,插件化開發,易于擴展。-強大的WEB,命令行監控。-支持前端作為MYSQ通用代理,后端JDBC方式支持ORACLE、DB2、SQL SERVER 、 MONGODB 、巨杉。-集群基于ZOOKEEPER管理,在線升級,擴容,智能優化,大數據處理(開發版)。MycatMYCAT架構圖MYCAT高效NIO和線程設計-邏輯庫(S
17、CHEMA)-邏輯表(TABLE) - ER 表表 - 非分片表 - 分片表 - 全局表- 分片節點(DATANODE) -節點主機(DATAHOST) -分片規則(RULE)-全局序列號(SEQUENCE)-多租戶Mycat概念MYCAT抽象多個MYQL實例,對外提供唯一的訪問數據源。 邏輯庫與邏輯表 mycat orderdb Scema配置 select 1 select 1 MYCAT的路由解決方案在數據切分處理中,特別是水平切分中,中間件最終要的兩個處理過程就是數據的切分、數據的聚合。選擇合適的切分規則,至關重要,因為它決定了后續數據聚合的難易程度,甚至可以避免跨庫的數據聚合處理。拆
18、分原則:1. 避免或減少跨庫join。2. 選擇最合適的拆分維度。Mycat拆分表解決方案:-MYCAT 全局表全局表-ER關系關系-表拆分表拆分 -拆分維度拆分維度 -主鍵分片vs 非主鍵分片非主鍵分片路由規則配置 user_id func1 1 1024 拆分字段(拆分維度)MYCAT全局表ordershost1ordershost2ordershost3ordershost4insert into orders (xxx)Mycat每個節點同時并發插入和更新數據,每個節點都可以讀取數據,提升讀性能的同時解決跨 節點Join的效率 ER模型就是將表按照相同拆分規則,相同拆分值,切分到同一個
19、分片節點上,避免出現跨分片的JOIN的一種切分模型。可以配置為父子表,也可以不配置為父子表。ER表及ER關系模型 -MYCAT數據JOIN解決方案全局表技術獨創的ER關系分片基于Catlet的sharejoin兩表自動Join模塊復雜SQL可通過用戶自定義的Catlet進行處理Catlet是Java編寫的一段程序,類似數據庫中的存儲過程,可以實現任意復雜SQL的Join、Group、Order等功能/*!mycat:catlet=demo.catlets.ShareJoin */ select a.*,b.id, as tit from customer a,company b
20、ona pany_id=b.id;嵌套循環連接(NESTED LOOPS JOIN)哈希連接(HASH JOIN) 排序合并連接(SORT MERGE JOIN) 常見的join算法:BKA(Batched Key Access)MYCAT高可用讀寫分離和自動切換機制-基于心跳的自動切換-Mycat 支持基于MySQL主從復制狀態的高級讀寫分離與主從切換控制機制。-強制走寫節點解決讀寫分離時延問題Mycat讀寫分片配置(注意:讀寫節點,主從節點直接數據同步需要數據庫自己同步,mycat不負責)MyCAT的讀寫分離機制如下:a.事務內的SQL,默認走寫節點,以注釋/*balance*/開頭,則會
21、根據balance=“1” 或“2”或“3” 去獲取 .b.自動提交的select語句會走讀節點,并在所有可用讀節點中間隨機負載均衡,默認根據balance=“1” 或“2”或“3” 去獲取,以注釋/*balance*/開頭則會走寫,解決部分已經開啟讀寫分離,但是需要強一致性數據實時獲取數據的場景走寫c. 當某個主節點宕機,則其全部讀節點都不再被使用,因為此時,同步失敗,數據已經不是最新的,MYCAT會采用另外一個主節點所對應的全部讀節點來實現select負載均衡。d.當所有主節點都失敗,則為了系統高可用性,自動提交的所有select語句仍將提交到全部存活的讀節點上執行,此時系統的很多頁面還是
22、能出來數據,只是用戶修改或提交會失敗。MyCAT的讀寫分離的配置如下: select user() dataHost的balance屬性設置為:0,不開啟讀寫分離機制1,全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1-S1,M2-S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。2,所有的readHost與writeHost都參與select語句的負載均衡,也就是說,當系統的寫操作壓力不大的情況下,所有主機都可以承擔負載均衡。3. 全部的讀節點參數讀,寫節點不參與,如果配置了
23、多個writerhost,則多個writerhost下面的readhost參數讀負載。mysql -集群處理-自動擴容-智能優化-大數據處理mysqlmysqlMycatMycatbalanceZookeeper Regist centerMycatAdmin/web應用應用MYCAT對多租戶應用的支持MYCAT對事務的支持為弱XA,如果業務需要嚴格的強一致性,需要采用事務補償方案,或者盡量避免跨庫操作。Mycat事務支持mycat的事務處理是,依次輪詢需要處理的分片執行對應的Sql,當應用commit時在依次輪詢commit。如果中間一個分片執行sql出錯全部回滾。但是如果應用發起commi
24、t命令,Mycat發起commit到db成功,但是實際db未成功時,mycat無法保證各個節點回滾,這就是弱xa。分布式事務處理-異步化處理-最終一致性Mycat主從及多主配置dataHost的writeType屬性設置為: writeType=0 默認配置。 writeType=1 代表配置多主,mycat會往所有寫節點,隨機寫數據,但是每次只會寫入一個節點,此模式下無讀節點,節點之間開啟數據庫級別同步。此配置為mysql高級級別使用,因為多主會帶來數據庫同步問題。 select user() 基于主從同步的讀寫分離與主從切換1.4 開始支持MySQL 主從復制狀態綁定的讀寫分離與主從切換機
25、制,讀更加安全可靠,配置如下:MyCAT 心跳檢查語句配置為show slave status ,dataHost 上定義兩個新屬性: switchType=2 與slaveThreshold=100,此時意味著開啟MySQL 主從復制狀態綁定的讀寫分離與切換機制,Mycat 心跳機制通過檢測show slave status 中的Seconds_Behind_Master, Slave_IO_Running,Slave_SQL_Running 三個字段來確定當前主從同步的狀態以及Seconds_Behind_Master 主從復制時延, 當Seconds_Behind_Masterslave
26、Threshold 時,讀寫分離篩選器會過濾掉此Slave 機器,防止讀到很久之前的舊數據,而當主節點宕機后,切換邏輯會檢查Slave 上的Seconds_Behind_Master 是否為0,為0 時則表示主從同步,可以安全切換,否則不會切換。switchType 目前有三種選擇: -1 表示不自動切換 1 默認值,自動切換 2 基于MySQL 主從同步的狀態決定是否切換下面為參考配置: show slave status Mycat高級特性(注解)MyCat對自身不支持的Sql語句提供了一種解決方案在要執行的SQL語句前添加額外的一段代碼,這樣Sql就能正確執行,這段代碼稱之為“注解”。注
27、解的形式是 /*!mycat: sql=Sql語句*/使用時將=號后的“Sql語句”替換為需要的Sql語句即可,后面會提到具體的用法。例子假設需要執行的語句是 Insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黃蓉,10010);鑒于路由分析的原因,MyCat暫不支持這種語句的執行,如果一定需要執行這種語句,可在這段sql代碼前添加 /*!mycat: sql=select id from persons where sharding_id=10010 */語句變為如下形式即可執行 /*!mycat: sql=sele
28、ct id from persons where sharding_id=10010 */insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黃蓉,10010);原理 MyCat執行SQL語句的流程是先進行SQL解析處理,解析出分片信息(路由信息)后,然后到該分片對應的物理庫上去執行;若傳入的SQL語句MyCat無法解析,則MyCat不會去執行;而注解則是告訴MyCat按照注解內的SQL(稱之為注解SQL)去進行解析處理,解析出分片信息后,將注解后真正要執行的SQL語句(稱之為原始SQL)發送到該分片對應的物理庫上去執行
29、。從上面的原理可以看到,注解只是告訴MyCat到何處去執行原始SQL;因而使用注解前,要清楚的知道該原始SQL去哪個分片執行,然后在注解SQL中也指向該分片,這樣才能使用!例子中的sharding_id=10010即是指明分片信息的。需要說明的是,若注解SQL沒有能明確到具體某個分片,譬如例子中的注解SQL沒有添加sharding_id=10010這個條件,則MyCat會將原始SQL發送到persons表所在的所有分片上去執行去,這樣造成的后果若是插入語句,則在多個分片上都存在重復記錄,同樣查詢、更新、刪除操作也會得到錯誤的結果!解決問題MySql不支持的語法結構,如insert values
30、(),() insert select等 同一個實例內的跨庫關聯查詢,如用戶庫和平臺庫內的表關聯 存儲過程調用全局序列號全局序列號是MyCAT提供的一個新功能,為了實現分庫分表情況下,表的主鍵是全局唯一,而默認的MySQL的自增長主鍵無法滿足這個要求。全局序列號的語法符合標準SQL規范,其格式為:next value for MYCATSEQ_GLOBAL其中MYCATSEQ_GLOBAL是序列號的名字,MyCAT自動創建新的序列號,免去了開發的復雜度,另外,MyCAT也提供了一個全局的序列號,名稱為:MYCATSEQ_GLOBAL。注意,注意,MYCATSEQ_必須大寫才能正確識別。必須大寫
31、才能正確識別。注意:注意:序列:序列:MYCATSEQ_MYCAT配置:配置:MYCAT=dn1 表為:表為:MYCAT 也就是也就是”表名表名“=序列號后半部分的名字(序列號后半部分的名字(MYCATSEQ_xxx 中的中的xxx)目前全局序列號提供了本地文件跟數據庫模式及本地基于時間戳算法的三種方式: Insert table t_node(name) values(testname);Demo:Mycat 監控MyCAT 自身有類似其他數據庫的管理監控方式,可以通過Mysql 命令行,登錄管理端口(9066)執行相應的SQL 進行管理,也可以通過jdbc 的方式進行遠程連接管理,本小節主要講解命令行的管理操作。登錄:目前mycat 有兩個端口,8066 數據端口,9066 管理端口,命令行的登陸是通過9066 管理端口來操作,登錄方式類似于mysql 的服務端登陸。mysql -h -utest -ptest -P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業管理服務合同執行保障措施
- 公司車輛轉讓合同(4篇)
- 承攬合同模板(14篇)
- 2025年北京出租汽車駕駛員勞動合同8篇
- 經濟適用住房銷售合同7篇
- 合同協議-產品經銷合同5篇
- 2023年天津下半年監理工程師合同管理合同爭議的解決模擬試題
- 2024年度上海市知識產權發展報告
- 2024年物理治療康復設備投資申請報告代可行性研究報告
- 25年公司安全管理員安全培訓考試試題含答案【考試直接用】
- 電子書 -《商業的底層邏輯》
- 農貿市場消防應急預案演練總結
- 2023年湖北宜昌高新區社區專職工作人員(網格員)招聘考試真題及答案
- 外貿談判知識分享課件
- 《患者疼痛管理》課件
- 基于AI人工智能的智慧園區融合感知平臺建設方案
- JB T 7689-2012懸掛式電磁除鐵器
- 課件-錯賬更正
- 現代漢語語料庫詞頻表CorpusWordlist
- GB/T 5465.2-2023電氣設備用圖形符號第2部分:圖形符號
- 學校德育活動安排表
評論
0/150
提交評論