版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 MYCATMycat在線視頻培訓(xùn)代碼demo:http:/ Mycat 開源組 -MYCAT 是什么?-MYCAT的前世今生。-MYCAT社區(qū)發(fā)展。-數(shù)據(jù)庫(kù)切分及其解決方案。-MYCAT特性及其解決方案。-MYCAT入門介紹。內(nèi)容:MYCAT是什么一個(gè)用于MySQL讀寫分離和與數(shù)據(jù)切分的高可用中間件一個(gè)模擬為MySQL Server的超級(jí)數(shù)據(jù)庫(kù)代理一個(gè)能平滑擴(kuò)展支持1000億大表的分布式數(shù)據(jù)庫(kù)系統(tǒng)一個(gè)可管控多種關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)路由器MYCAT之前世今生2013年阿里的Cobar在某大型項(xiàng)目中使用過(guò)程中發(fā)現(xiàn)存在一些比較嚴(yán)重的問(wèn)題,于是第一代改良版Mycat誕生。Mycat開源以后,一些Cob
2、ar的用戶參與了Mycat的開發(fā),最終Mycat發(fā)展成為一個(gè)由眾多軟件公司的實(shí)力派架構(gòu)師和資深開發(fā)人員維護(hù)的社區(qū)型開源軟件。2014年Mycat首次在上海的中華架構(gòu)師大會(huì)上對(duì)外宣講,引發(fā)圍觀,更多的人參與進(jìn)來(lái),隨后越來(lái)越多的項(xiàng)目采用了Mycat2015年7月為止,Mycat項(xiàng)目總共有16個(gè)Committer,其中核心參與者的年薪總額超過(guò)200萬(wàn)2015年5月,由核心參與者們一起編寫的第一本官方權(quán)威指南Mycat權(quán)威指南電子版發(fā)布,累計(jì)超過(guò)500本,成為開源項(xiàng)目中的首創(chuàng)。截至2015年7月,超過(guò)100個(gè)項(xiàng)目采用Mycat,涵蓋銀行、電信、電子商務(wù)、物流、移動(dòng)應(yīng)用、O2O的眾多領(lǐng)域和公司。截至20
3、14年7月,Mycat官方QQ群(106088787)已經(jīng)超過(guò)2700人,大多數(shù)為資深I(lǐng)T工程師、架構(gòu)師、DBA、以及一些CXO和高端獵頭,成為國(guó)內(nèi)具有影響力的高端IT專業(yè)群Mycat社區(qū)首次提出BigSQL的概念,并逐步將大數(shù)據(jù)和實(shí)時(shí)計(jì)算等先進(jìn)技術(shù)引入到Mycat里,從而吸引和聚集了一大批業(yè)內(nèi)大數(shù)據(jù)和云計(jì)算方面的資深工程師,Mycat社區(qū)成為名副其實(shí)的國(guó)內(nèi)大數(shù)據(jù)領(lǐng)域?qū)嵙ε沙蓡T。Mycat社區(qū)里不斷有優(yōu)秀工程師被創(chuàng)業(yè)公司挖走,為了能更好的支持創(chuàng)業(yè)公司并尋求更多的優(yōu)秀工程師參與采用,Mycat社區(qū)目前已經(jīng)開始開展在線高端IT培訓(xùn),培養(yǎng)高端Java架構(gòu)師、工程師。為什么選擇MYCAT基于阿里的成熟
4、項(xiàng)目Cobar而來(lái),它有過(guò)大量的大規(guī)模生產(chǎn)案例社區(qū)非常活躍,維護(hù)者的水平很高,重大Bug都24小時(shí)修復(fù)目前的生產(chǎn)案例是開源項(xiàng)目中為數(shù)最多的,而且很多是大型項(xiàng)目Mycat的版本分為長(zhǎng)期支持版本和當(dāng)前最新版本兩種,前者出現(xiàn)重大Bug后,還會(huì)及時(shí)修復(fù),解決了生產(chǎn)中應(yīng)用的后顧之憂Mycat的資料非常全,包括志愿者提供的資料,用戶分享的經(jīng)驗(yàn)資料,以及官方定期更新的Mycat權(quán)威指南,絕大多數(shù)技術(shù)問(wèn)題,都可以通過(guò)文檔和社區(qū)交流來(lái)解決如果需要專業(yè)技術(shù)支持服務(wù),也可以跟Mycat社區(qū)交流,通過(guò)贊助開源項(xiàng)目的方式,名利雙收,一舉兩得。何為數(shù)據(jù)(系統(tǒng))切分? 簡(jiǎn)單來(lái)說(shuō),就是指通過(guò)某種特定的條件,按照某個(gè)維度,將我
5、們存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上面以達(dá)到分散單庫(kù)(主機(jī))負(fù)載的效果。 切分模式:A.垂直(縱向)切分。B.水平切分。系統(tǒng)切分及其解決方案一個(gè)數(shù)據(jù)庫(kù)由很多表的構(gòu)成,每個(gè)表對(duì)應(yīng)著不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進(jìn)行分類,分布到不同的數(shù)據(jù)庫(kù)上面,這樣也就將數(shù)據(jù)或者說(shuō)壓力分擔(dān)到不同的庫(kù)上面,如下圖:優(yōu)點(diǎn): -拆分后業(yè)務(wù)清晰,拆分規(guī)則明確。 -系統(tǒng)之間整合或擴(kuò)展容易。 -數(shù)據(jù)維護(hù)簡(jiǎn)單。缺點(diǎn): -部分業(yè)務(wù)表無(wú)法JOIN,只能通過(guò)接口方式解決,提高了系統(tǒng)復(fù)雜度。 -受每種業(yè)務(wù)不同的限制存在單庫(kù)性能瓶頸,不易數(shù)據(jù)擴(kuò)展跟性能提高。 -事務(wù)處理復(fù)雜。 垂直拆分相對(duì)于垂直拆分,水平拆分
6、不是將表的數(shù)據(jù)做分類,而是按照某個(gè)字段的某種規(guī)則來(lái)分散到多個(gè)庫(kù)之中,每個(gè)表中包含一部分?jǐn)?shù)據(jù)。簡(jiǎn)單來(lái)說(shuō),我們可以將數(shù)據(jù)的水平切分理解為是按照數(shù)據(jù)行的切分,就是將表中的某些行切分到一個(gè)數(shù)據(jù)庫(kù),而另外的某些行又切分到其他的數(shù)據(jù)庫(kù)中,主要有分表,分庫(kù)兩種模式,如圖:優(yōu)點(diǎn): 不存在單庫(kù)大數(shù)據(jù),高并發(fā)的性能瓶頸。 對(duì)應(yīng)用透明,應(yīng)用端改造較少。 按照合理拆分規(guī)則拆分,JOIN操作基本避免跨庫(kù)。 提高了系統(tǒng)的穩(wěn)定性跟負(fù)載能力。缺點(diǎn): 拆分規(guī)則難以抽象。 分片事務(wù)一致性難以解決。 數(shù)據(jù)多次擴(kuò)展難度跟維護(hù)量極大。 跨庫(kù)JOIN性能較差。 水平切分前面講了垂直切分跟水平切分的不同跟優(yōu)缺點(diǎn),會(huì)發(fā)現(xiàn)每種切分方式都有缺點(diǎn)
7、,但共同的特點(diǎn)缺點(diǎn)有:-引入分布式事務(wù)的問(wèn)題。-跨節(jié)點(diǎn)JOIN 的問(wèn)題。-跨節(jié)點(diǎn)合并排序分頁(yè)問(wèn)題。針對(duì)數(shù)據(jù)源管理,目前主要有兩種思路:A. 客戶端模式,在每個(gè)應(yīng)用程序模塊中配置管理自己需要的一個(gè)(或者多個(gè))數(shù)據(jù)源,直接訪問(wèn)各個(gè)數(shù)據(jù)庫(kù),在模塊內(nèi)完成數(shù)據(jù)的整合; 優(yōu)點(diǎn):相對(duì)簡(jiǎn)單,無(wú)性能損耗。 缺點(diǎn):不夠通用,數(shù)據(jù)庫(kù)連接的處理復(fù)雜,對(duì)業(yè)務(wù)不夠透明,處理復(fù)雜。B. 通過(guò)中間代理層來(lái)統(tǒng)一管理所有的數(shù)據(jù)源,后端數(shù)據(jù)庫(kù)集群對(duì)前端應(yīng)用程序透明; 優(yōu)點(diǎn):通用,對(duì)應(yīng)用透明,改造少。 缺點(diǎn):實(shí)現(xiàn)難度大,有二次轉(zhuǎn)發(fā)性能損失。切分原則:-盡量不切分,架構(gòu)是進(jìn)化而來(lái),不是一蹴而就。-最大可能的找到最合適的切分維度。-由于
8、數(shù)據(jù)庫(kù)中間件對(duì)數(shù)據(jù)JOIN 實(shí)現(xiàn)的優(yōu)劣難以把握,而且實(shí)現(xiàn)高性能難度極大,業(yè)務(wù)讀取 盡量少使用多表JOIN-盡量通過(guò)數(shù)據(jù)冗余,分組避免數(shù)據(jù)垮庫(kù)多表JOIN。-盡量避免分布式事務(wù)。-單表切分?jǐn)?shù)據(jù)1000萬(wàn)以內(nèi)。切分的處理難點(diǎn): -360 ATLAS-ALIBABA COBAR -MYCAT-TDDL-HEISENBERG-OCEANUS-VITESS-ONEPROXY 開源的切分方案TLAS是由 QIHOO 360, WEB平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(fā)維護(hù)的一個(gè)基于MYSQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它是在MYSQL-PROXY 0.8.2版本的基礎(chǔ)上,對(duì)其進(jìn)行了優(yōu)化,增加了一些新的功能特性。360內(nèi)部使用
9、ATLAS運(yùn)行的MYSQL業(yè)務(wù),每天承載的讀寫請(qǐng)求數(shù)達(dá)幾十億條。主要功能:主要功能:* 讀寫分離* 從庫(kù)負(fù)載均衡* IP過(guò)濾* SQL語(yǔ)句黑白名單* 自動(dòng)分表360 AtlasCOBAR是阿里巴巴(B2B)部門開發(fā)的一種關(guān)系型數(shù)據(jù)的分布式處理系統(tǒng),它可以在分布式的環(huán)境下看上去像傳統(tǒng)數(shù)據(jù)庫(kù)一樣為您提供海量數(shù)據(jù)服務(wù). COBAR的分布式主要是通過(guò)將表放入不同的庫(kù)來(lái)實(shí)現(xiàn):1. COBAR支持將一張表水平拆分成多份分別放入不同的庫(kù)來(lái)實(shí)現(xiàn)表的水平拆分2. COBAR也支持將不同的表放入不同的庫(kù)3. 多數(shù)情況下,用戶會(huì)將以上兩種方式混合使用這里需要強(qiáng)調(diào)的是,COBAR不支持將一張表,例如TEST表拆分成T
10、EST_1, TEST_2, TEST_3.放在同一個(gè)庫(kù)中,必須將拆分后的表分別放入不同的庫(kù)來(lái)實(shí)現(xiàn)分布式。HA:在用戶配置了MYSQL心跳的情況下,COBAR可以自動(dòng)向后端連接的MYSQL發(fā)送心跳,判斷MYSQL運(yùn)行狀況,一旦運(yùn)行出現(xiàn)異常,COBAR可以自動(dòng)切換到備機(jī)工作。但需要強(qiáng)調(diào)的是:1. COBAR的主備切換有兩種觸發(fā)方式,一種是用戶手動(dòng)觸發(fā),一種是COBAR的心跳語(yǔ)句檢測(cè)到異常后自動(dòng)觸發(fā)。那么,當(dāng)心跳檢測(cè)到主機(jī)異常,切換到備機(jī),如果主機(jī)恢復(fù)了,需要用戶手動(dòng)切回主機(jī)工作,COBAR不會(huì)在主機(jī)恢復(fù)時(shí)自動(dòng)切換回主機(jī),除非備機(jī)的心跳也返回異常。2. COBAR只檢查MYSQL主備異常,不關(guān)心主
11、備之間的數(shù)據(jù)同步,因此用戶需要在使用COBAR之前在MYSQL主備上配置雙向同步,詳情可以參閱MYSQL參考手冊(cè)。其次,我們也需要注意COBAR的功能約束:1) 不支持跨庫(kù)情況下的JOIN、分頁(yè)、排序、子查詢操作。2) SET語(yǔ)句執(zhí)行會(huì)被忽略,事務(wù)和字符集設(shè)置除外。3) 分庫(kù)情況下,INSERT語(yǔ)句必須包含拆分字段列名。4) 分庫(kù)情況下,UPDATE語(yǔ)句不能更新拆分字段的值。5) 不支持SAVEPOINT操作。6) 暫時(shí)只支持MYSQL數(shù)據(jù)節(jié)點(diǎn)。alibaba cobar淘寶根據(jù)自己的業(yè)務(wù)特點(diǎn)開發(fā)了TDDL(TAOBAO DISTRIBUTED DATA LAYER 外號(hào):頭都大了 )框架,主
12、要解決了分庫(kù)分表對(duì)應(yīng)用的透明化以及異構(gòu)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)復(fù)制,它是一個(gè)基于集中式配置的 JDBC DATASOURCE實(shí)現(xiàn),具有主備,讀寫分離,動(dòng)態(tài)數(shù)據(jù)庫(kù)配置等功能。TDDL所處的位置(TDDL通用數(shù)據(jù)訪問(wèn)層,部署在客戶端的JAR包,用于將用戶的SQL路由到指定的數(shù)據(jù)庫(kù)中). 1.數(shù)據(jù)庫(kù)主備和動(dòng)態(tài)切換2.帶權(quán)重的讀寫分離3.單線程讀重試4.集中式數(shù)據(jù)源信息管理和動(dòng)態(tài)變更5.剝離的穩(wěn)定JBOSS數(shù)據(jù)源6.支持MYSQL和ORACLE數(shù)據(jù)庫(kù)7.基于JDBC規(guī)范,很容易擴(kuò)展支持實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)源8.無(wú)SERVER,CLIENT-JAR形式存在,應(yīng)用直連數(shù)據(jù)庫(kù)9.讀寫次數(shù),并發(fā)度流程控制,動(dòng)態(tài)變更
13、10.可分析的日志打印,日志流控,動(dòng)態(tài)變更TDDL強(qiáng)大好用的MYSQL分庫(kù)分表中間件,由百度員工個(gè)人編寫。分庫(kù)分表與應(yīng)用脫離,分庫(kù)表如同使用單庫(kù)表一樣減少DB 連接數(shù)壓力熱重啟配置可水平擴(kuò)容遵守MYSQL原生協(xié)議無(wú)語(yǔ)言限制,MYSQLCLIENT,C,JAVA等都可以使用HEISENBERG服務(wù)器通過(guò)管理命令可以查看,如連接數(shù),線程池,結(jié)點(diǎn)等,并可以調(diào)整heisenberg58 OCEANUS致力于打造一個(gè)功能簡(jiǎn)單、可依賴、易于上手、易于擴(kuò)展、易于集成的解決方案,甚至是平臺(tái)化系統(tǒng)。擁抱開源,提供各類插件機(jī)制集成其他開源項(xiàng)目,新手可以在幾分鐘內(nèi)上手編程,分庫(kù)分表邏輯不再與業(yè)務(wù)緊密耦合,擴(kuò)容有標(biāo)準(zhǔn)
14、模式,減少意外錯(cuò)誤的發(fā)生 DATANODE:數(shù)據(jù)源節(jié)點(diǎn)。為一個(gè)數(shù)據(jù)源命名,配置鏈接屬性、報(bào)警實(shí)現(xiàn)NAMENODE:數(shù)據(jù)源的簇。為一組數(shù)據(jù)源命名,指定這組數(shù)據(jù)源的負(fù)載方式、訪問(wèn)模式、權(quán)重TABLE:映射表。匹配解析SQL中的TABLE名稱,命中TABLE標(biāo)簽的NAME屬性值后,會(huì)執(zhí)行約定的路由邏輯BEAN:實(shí)體。由其他標(biāo)簽引用,實(shí)體類必須有無(wú)參的構(gòu)造函數(shù)TRACKER:監(jiān)控埋點(diǎn)。涉及到計(jì)算和IO的功能點(diǎn)都有監(jiān)控點(diǎn),自定義一個(gè)埋點(diǎn)實(shí)現(xiàn)類,當(dāng)功能耗時(shí)超出預(yù)期時(shí)會(huì)執(zhí)行其中的回調(diào)函數(shù),便于監(jiān)控和優(yōu)化系統(tǒng)Oceanus谷歌開發(fā)的數(shù)據(jù)庫(kù)中間件,集群基于ZOOKEEPER管理,通過(guò)RPC方式進(jìn)行數(shù)據(jù)處理,總體
15、分為,SERVER,COMMAND LINE,GUI監(jiān)控 3部分。vitess分布式關(guān)系型數(shù)據(jù)庫(kù)服務(wù)DRDS阿里分布式關(guān)系型數(shù)據(jù)庫(kù)服務(wù)(DISTRIBUTE RELATIONAL DATABASE SERVICE,簡(jiǎn)稱DRDS)是一種水平拆分、可平滑擴(kuò)縮容、讀寫分離的在線分布式數(shù)據(jù)庫(kù)服務(wù)。前身為淘寶TDDL,是近千個(gè)應(yīng)用首選組件,已穩(wěn)定服務(wù)了七年以上。rds/drds-遵守MYSQL原生協(xié)議,跨語(yǔ)言,跨數(shù)據(jù)庫(kù)的通用中間件代理。-基于心跳的自動(dòng)故障切換,支持讀寫分離,支持MYSQL一雙主多從,以及一主多從-有效管理數(shù)據(jù)源連接,基于數(shù)據(jù)分庫(kù),而不是分表的模式。-基于NIO實(shí)現(xiàn),有效管理線程,高并發(fā)
16、問(wèn)題。-支持?jǐn)?shù)據(jù)的多片自動(dòng)路由與聚合,支持SUM,COUNT,MAX等常用的聚合函數(shù)。-支持2表JOIN,甚至基于CALTLET的多表JOIN。-支持通過(guò)全局表,ER關(guān)系的分片策略,實(shí)現(xiàn)了高效的多表JOIN查詢。-支持多租戶方案。-支持分布式事務(wù)(弱XA)-支持全局序列號(hào),解決分布式下的主鍵生成問(wèn)題。-分片規(guī)則豐富,插件化開發(fā),易于擴(kuò)展。-強(qiáng)大的WEB,命令行監(jiān)控。-支持前端作為MYSQ通用代理,后端JDBC方式支持ORACLE、DB2、SQL SERVER 、 MONGODB 、巨杉。-集群基于ZOOKEEPER管理,在線升級(jí),擴(kuò)容,智能優(yōu)化,大數(shù)據(jù)處理(2.0開發(fā)版)。MycatMYCAT
17、架構(gòu)圖MYCAT高效NIO和線程設(shè)計(jì)-邏輯庫(kù)(SCHEMA)-邏輯表(TABLE) - ER 表表 - 非分片表 - 分片表 - 全局表- 分片節(jié)點(diǎn)(DATANODE) -節(jié)點(diǎn)主機(jī)(DATAHOST) -分片規(guī)則(RULE)-全局序列號(hào)(SEQUENCE)-多租戶Mycat概念MYCAT抽象多個(gè)MYQL實(shí)例,對(duì)外提供唯一的訪問(wèn)數(shù)據(jù)源。 邏輯庫(kù)與邏輯表Server.xml mycat orderdb Scema配置 select 1 select 1 MYCAT的路由解決方案在數(shù)據(jù)切分處理中,特別是水平切分中,中間件最終要的兩個(gè)處理過(guò)程就是數(shù)據(jù)的切分、數(shù)據(jù)的聚合。選擇合適的切分規(guī)則,至關(guān)重要,因
18、為它決定了后續(xù)數(shù)據(jù)聚合的難易程度,甚至可以避免跨庫(kù)的數(shù)據(jù)聚合處理。拆分原則:1. 避免或減少跨庫(kù)join。2. 選擇最合適的拆分維度。Mycat拆分表解決方案:-MYCAT 全局表全局表-ER關(guān)系關(guān)系-表拆分表拆分 -拆分維度拆分維度 -主鍵分片vs 非主鍵分片非主鍵分片路由規(guī)則配置Rule.xml user_id func1 1 1024 拆分字段(拆分維度)MYCAT全局表ordershost1ordershost2ordershost3ordershost4insert into orders (xxx)Mycat每個(gè)節(jié)點(diǎn)同時(shí)并發(fā)插入和更新數(shù)據(jù),每個(gè)節(jié)點(diǎn)都可以讀取數(shù)據(jù),提升讀性能的同時(shí)解
19、決跨 節(jié)點(diǎn)Join的效率 ER模型就是將表按照相同拆分規(guī)則,相同拆分值,切分到同一個(gè)分片節(jié)點(diǎn)上,避免出現(xiàn)跨分片的JOIN的一種切分模型??梢耘渲脼楦缸颖恚部梢圆慌渲脼楦缸颖?。ER表及ER關(guān)系模型 -MYCAT數(shù)據(jù)JOIN解決方案全局表技術(shù)獨(dú)創(chuàng)的ER關(guān)系分片基于Catlet的sharejoin兩表自動(dòng)Join模塊復(fù)雜SQL可通過(guò)用戶自定義的Catlet進(jìn)行處理Catlet是Java編寫的一段程序,類似數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程,可以實(shí)現(xiàn)任意復(fù)雜SQL的Join、Group、Order等功能/*!mycat:catlet=demo.catlets.ShareJoin */ select a.*,b.id
20、, as tit from customer a,company b pany_id=b.id;嵌套循環(huán)連接(NESTED LOOPS JOIN)哈希連接(HASH JOIN) 排序合并連接(SORT MERGE JOIN) 常見(jiàn)的join算法:BKA(Batched Key Access)MYCAT高可用讀寫分離和自動(dòng)切換機(jī)制-基于心跳的自動(dòng)切換-Mycat 支持基于MySQL主從復(fù)制狀態(tài)的高級(jí)讀寫分離與主從切換控制機(jī)制。-強(qiáng)制走寫節(jié)點(diǎn)解決讀寫分離時(shí)延問(wèn)題Mycat讀寫分片配置(注意:讀寫節(jié)點(diǎn),主從節(jié)點(diǎn)直接數(shù)據(jù)同步需要數(shù)據(jù)庫(kù)自己同步,mycat不負(fù)責(zé))MyCAT的讀寫分離機(jī)制如
21、下:a.事務(wù)內(nèi)的SQL,默認(rèn)走寫節(jié)點(diǎn),以注釋/*balance*/開頭,則會(huì)根據(jù)balance=“1” 或“2”或“3” 去獲取 .b.自動(dòng)提交的select語(yǔ)句會(huì)走讀節(jié)點(diǎn),并在所有可用讀節(jié)點(diǎn)中間隨機(jī)負(fù)載均衡,默認(rèn)根據(jù)balance=“1” 或“2”或“3” 去獲取,以注釋/*balance*/開頭則會(huì)走寫,解決部分已經(jīng)開啟讀寫分離,但是需要強(qiáng)一致性數(shù)據(jù)實(shí)時(shí)獲取數(shù)據(jù)的場(chǎng)景走寫c. 當(dāng)某個(gè)主節(jié)點(diǎn)宕機(jī),則其全部讀節(jié)點(diǎn)都不再被使用,因?yàn)榇藭r(shí),同步失敗,數(shù)據(jù)已經(jīng)不是最新的,MYCAT會(huì)采用另外一個(gè)主節(jié)點(diǎn)所對(duì)應(yīng)的全部讀節(jié)點(diǎn)來(lái)實(shí)現(xiàn)select負(fù)載均衡。d.當(dāng)所有主節(jié)點(diǎn)都失敗,則為了系統(tǒng)高可用性,自動(dòng)提交的
22、所有select語(yǔ)句仍將提交到全部存活的讀節(jié)點(diǎn)上執(zhí)行,此時(shí)系統(tǒng)的很多頁(yè)面還是能出來(lái)數(shù)據(jù),只是用戶修改或提交會(huì)失敗。MyCAT的讀寫分離的配置如下: select user() dataHost的balance屬性設(shè)置為:0,不開啟讀寫分離機(jī)制1,全部的readHost與stand by writeHost參與select語(yǔ)句的負(fù)載均衡,簡(jiǎn)單的說(shuō),當(dāng)雙主雙從模式(M1-S1,M2-S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語(yǔ)句的負(fù)載均衡。2,所有的readHost與writeHost都參與select語(yǔ)句的負(fù)載均衡,也就是說(shuō),當(dāng)系統(tǒng)的寫操作壓力不大的情況下,所
23、有主機(jī)都可以承擔(dān)負(fù)載均衡。3. 全部的讀節(jié)點(diǎn)參數(shù)讀,寫節(jié)點(diǎn)不參與,如果配置了多個(gè)writerhost,則多個(gè)writerhost下面的readhost參數(shù)讀負(fù)載。Mycat2.0mysqlMycat2.0 -集群處理-自動(dòng)擴(kuò)容-智能優(yōu)化-大數(shù)據(jù)處理mysqlmysqlMycatMycatbalanceZookeeper Regist centerMycatAdmin/web應(yīng)用應(yīng)用MYCAT對(duì)多租戶應(yīng)用的支持MYCAT對(duì)事務(wù)的支持為弱XA,如果業(yè)務(wù)需要嚴(yán)格的強(qiáng)一致性,需要采用事務(wù)補(bǔ)償方案,或者盡量避免跨庫(kù)操作。Mycat事務(wù)支持mycat的事務(wù)處理是,依次輪詢需要處理的分片執(zhí)行對(duì)應(yīng)的Sql,當(dāng)
24、應(yīng)用commit時(shí)在依次輪詢commit。如果中間一個(gè)分片執(zhí)行sql出錯(cuò)全部回滾。但是如果應(yīng)用發(fā)起commit命令,Mycat發(fā)起commit到db成功,但是實(shí)際db未成功時(shí),mycat無(wú)法保證各個(gè)節(jié)點(diǎn)回滾,這就是弱xa。分布式事務(wù)處理-異步化處理-最終一致性Mycat主從及多主配置dataHost的writeType屬性設(shè)置為: writeType=0 默認(rèn)配置。 writeType=1 代表配置多主,mycat會(huì)往所有寫節(jié)點(diǎn),隨機(jī)寫數(shù)據(jù),但是每次只會(huì)寫入一個(gè)節(jié)點(diǎn),此模式下無(wú)讀節(jié)點(diǎn),節(jié)點(diǎn)之間開啟數(shù)據(jù)庫(kù)級(jí)別同步。此配置為mysql高級(jí)級(jí)別使用,因?yàn)槎嘀鲿?huì)帶來(lái)數(shù)據(jù)庫(kù)同步問(wèn)題。 select us
25、er() 基于主從同步的讀寫分離與主從切換1.4 開始支持MySQL 主從復(fù)制狀態(tài)綁定的讀寫分離與主從切換機(jī)制,讀更加安全可靠,配置如下:MyCAT 心跳檢查語(yǔ)句配置為show slave status ,dataHost 上定義兩個(gè)新屬性: switchType=2 與slaveThreshold=100,此時(shí)意味著開啟MySQL 主從復(fù)制狀態(tài)綁定的讀寫分離與切換機(jī)制,Mycat 心跳機(jī)制通過(guò)檢測(cè)show slave status 中的Seconds_Behind_Master, Slave_IO_Running,Slave_SQL_Running 三個(gè)字段來(lái)確定當(dāng)前主從同步的狀態(tài)以及Sec
26、onds_Behind_Master 主從復(fù)制時(shí)延, 當(dāng)Seconds_Behind_MasterslaveThreshold 時(shí),讀寫分離篩選器會(huì)過(guò)濾掉此Slave 機(jī)器,防止讀到很久之前的舊數(shù)據(jù),而當(dāng)主節(jié)點(diǎn)宕機(jī)后,切換邏輯會(huì)檢查Slave 上的Seconds_Behind_Master 是否為0,為0 時(shí)則表示主從同步,可以安全切換,否則不會(huì)切換。switchType 目前有三種選擇: -1 表示不自動(dòng)切換 1 默認(rèn)值,自動(dòng)切換 2 基于MySQL 主從同步的狀態(tài)決定是否切換下面為參考配置: show slave status Mycat高級(jí)特性(注解)MyCat對(duì)自身不支持的Sql語(yǔ)句提
27、供了一種解決方案在要執(zhí)行的SQL語(yǔ)句前添加額外的一段代碼,這樣Sql就能正確執(zhí)行,這段代碼稱之為“注解”。注解的形式是 /*!mycat: sql=Sql語(yǔ)句*/使用時(shí)將=號(hào)后的“Sql語(yǔ)句”替換為需要的Sql語(yǔ)句即可,后面會(huì)提到具體的用法。例子假設(shè)需要執(zhí)行的語(yǔ)句是 Insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黃蓉,10010);鑒于路由分析的原因,MyCat暫不支持這種語(yǔ)句的執(zhí)行,如果一定需要執(zhí)行這種語(yǔ)句,可在這段sql代碼前添加 /*!mycat: sql=select id from persons whe
28、re sharding_id=10010 */語(yǔ)句變?yōu)槿缦滦问郊纯蓤?zhí)行 /*!mycat: sql=select id from persons where sharding_id=10010 */insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黃蓉,10010);原理 MyCat執(zhí)行SQL語(yǔ)句的流程是先進(jìn)行SQL解析處理,解析出分片信息(路由信息)后,然后到該分片對(duì)應(yīng)的物理庫(kù)上去執(zhí)行;若傳入的SQL語(yǔ)句MyCat無(wú)法解析,則MyCat不會(huì)去執(zhí)行;而注解則是告訴MyCat按照注解內(nèi)的SQL(稱之為注解SQL)去進(jìn)行解
29、析處理,解析出分片信息后,將注解后真正要執(zhí)行的SQL語(yǔ)句(稱之為原始SQL)發(fā)送到該分片對(duì)應(yīng)的物理庫(kù)上去執(zhí)行。從上面的原理可以看到,注解只是告訴MyCat到何處去執(zhí)行原始SQL;因而使用注解前,要清楚的知道該原始SQL去哪個(gè)分片執(zhí)行,然后在注解SQL中也指向該分片,這樣才能使用!例子中的sharding_id=10010即是指明分片信息的。需要說(shuō)明的是,若注解SQL沒(méi)有能明確到具體某個(gè)分片,譬如例子中的注解SQL沒(méi)有添加sharding_id=10010這個(gè)條件,則MyCat會(huì)將原始SQL發(fā)送到persons表所在的所有分片上去執(zhí)行去,這樣造成的后果若是插入語(yǔ)句,則在多個(gè)分片上都存在重復(fù)記錄,
30、同樣查詢、更新、刪除操作也會(huì)得到錯(cuò)誤的結(jié)果!解決問(wèn)題MySql不支持的語(yǔ)法結(jié)構(gòu),如insert values(),() insert select等 同一個(gè)實(shí)例內(nèi)的跨庫(kù)關(guān)聯(lián)查詢,如用戶庫(kù)和平臺(tái)庫(kù)內(nèi)的表關(guān)聯(lián) 存儲(chǔ)過(guò)程調(diào)用全局序列號(hào)全局序列號(hào)是MyCAT提供的一個(gè)新功能,為了實(shí)現(xiàn)分庫(kù)分表情況下,表的主鍵是全局唯一,而默認(rèn)的MySQL的自增長(zhǎng)主鍵無(wú)法滿足這個(gè)要求。全局序列號(hào)的語(yǔ)法符合標(biāo)準(zhǔn)SQL規(guī)范,其格式為:next value for MYCATSEQ_GLOBAL其中MYCATSEQ_GLOBAL是序列號(hào)的名字,MyCAT自動(dòng)創(chuàng)建新的序列號(hào),免去了開發(fā)的復(fù)雜度,另外,MyCAT也提供了一個(gè)全局的
31、序列號(hào),名稱為:MYCATSEQ_GLOBAL。注意,注意,MYCATSEQ_必須大寫才能正確識(shí)別。必須大寫才能正確識(shí)別。注意:注意:序列:序列:MYCATSEQ_MYCAT配置:配置:MYCAT=dn1 表為:表為:MYCAT 也就是也就是”表名表名“=序列號(hào)后半部分的名字(序列號(hào)后半部分的名字(MYCATSEQ_xxx 中的中的xxx)目前全局序列號(hào)提供了本地文件跟數(shù)據(jù)庫(kù)模式及本地基于時(shí)間戳算法的三種方式: Insert table t_node(name) values(testname);Demo:http:/ 監(jiān)控MyCAT 自身有類似其他數(shù)據(jù)庫(kù)的管理監(jiān)控方式,可以通過(guò)Mysql 命令行,登錄管理端口(9066)執(zhí)行相應(yīng)的SQL 進(jìn)行管理,也可以通過(guò)jdbc 的方式進(jìn)行遠(yuǎn)程連接管理,本小節(jié)主要講解命令行的管理操作。登錄:目前mycat 有兩個(gè)端口,8066 數(shù)據(jù)端口,9066 管理端口,命令行的登陸是通過(guò)9066 管理端口來(lái)操作,登錄方式類似于mysql 的服務(wù)端登陸。mysql -h -utest
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 19876-2012機(jī)械安全 與人體部位接近速度相關(guān)的安全防護(hù)裝置的定位》專題研究報(bào)告
- 《GB-T 39344-2020空間數(shù)據(jù)與信息傳輸系統(tǒng) 通信操作規(guī)程-1》專題研究報(bào)告
- 《GB-T 10514-2012硝酸磷肥中游離水含量的測(cè)定 烘箱法》專題研究報(bào)告
- 《儲(chǔ)能材料與器件分析測(cè)試技術(shù)》課件-SEI膜
- 《寵物鑒賞》課件-另類寵物之嚙齒類寵物
- Tiamo-basical-configuration參考資料說(shuō)明
- 月嫂育兒技能培訓(xùn)協(xié)議
- 智能家居醫(yī)修師崗位招聘考試試卷及答案
- 種子行業(yè)有機(jī)種子研發(fā)工程師崗位招聘考試試卷及答案
- 2026醫(yī)院護(hù)理部工作計(jì)劃范文(6篇)
- 公司投標(biāo)知識(shí)培訓(xùn)內(nèi)容課件
- 外墻真石漆專項(xiàng)施工方案
- 信息安全供應(yīng)商培訓(xùn)課件
- 七年級(jí)數(shù)學(xué)數(shù)軸上動(dòng)點(diǎn)應(yīng)用題
- 自主導(dǎo)航移動(dòng)機(jī)器人 (AMR) 產(chǎn)業(yè)發(fā)展藍(lán)皮書 (2023 版)-部分1
- 典型事故與應(yīng)急救援案例分析
- 數(shù)字鄉(xiāng)村綜合解決方案
- 豬肉推廣活動(dòng)方案
- 電工職業(yè)道德課件教學(xué)
- 學(xué)堂在線 雨課堂 生活英語(yǔ)聽說(shuō) 期末復(fù)習(xí)題答案
- 第十四屆全國(guó)交通運(yùn)輸行業(yè)“大象科技杯”城市軌道交通行車調(diào)度員(職工組)理論知識(shí)競(jìng)賽題庫(kù)(1400道)
評(píng)論
0/150
提交評(píng)論