Mycat在線視頻培訓(xùn)(概述)_第1頁
Mycat在線視頻培訓(xùn)(概述)_第2頁
Mycat在線視頻培訓(xùn)(概述)_第3頁
Mycat在線視頻培訓(xùn)(概述)_第4頁
Mycat在線視頻培訓(xùn)(概述)_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 MYCATMycat在線視頻培訓(xùn)代碼demo:http:/ Mycat 開源組 -MYCAT 是什么?-MYCAT的前世今生。-MYCAT社區(qū)發(fā)展。-數(shù)據(jù)庫切分及其解決方案。-MYCAT特性及其解決方案。-MYCAT入門介紹。內(nèi)容:MYCAT是什么一個用于MySQL讀寫分離和與數(shù)據(jù)切分的高可用中間件一個模擬為MySQL Server的超級數(shù)據(jù)庫代理一個能平滑擴(kuò)展支持1000億大表的分布式數(shù)據(jù)庫系統(tǒng)一個可管控多種關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫路由器MYCAT之前世今生2013年阿里的Cobar在某大型項目中使用過程中發(fā)現(xiàn)存在一些比較嚴(yán)重的問題,于是第一代改良版Mycat誕生。Mycat開源以后,一些Cob

2、ar的用戶參與了Mycat的開發(fā),最終Mycat發(fā)展成為一個由眾多軟件公司的實(shí)力派架構(gòu)師和資深開發(fā)人員維護(hù)的社區(qū)型開源軟件。2014年Mycat首次在上海的中華架構(gòu)師大會上對外宣講,引發(fā)圍觀,更多的人參與進(jìn)來,隨后越來越多的項目采用了Mycat2015年7月為止,Mycat項目總共有16個Committer,其中核心參與者的年薪總額超過200萬2015年5月,由核心參與者們一起編寫的第一本官方權(quán)威指南Mycat權(quán)威指南電子版發(fā)布,累計超過500本,成為開源項目中的首創(chuàng)。截至2015年7月,超過100個項目采用Mycat,涵蓋銀行、電信、電子商務(wù)、物流、移動應(yīng)用、O2O的眾多領(lǐng)域和公司。截至20

3、14年7月,Mycat官方QQ群(106088787)已經(jīng)超過2700人,大多數(shù)為資深I(lǐng)T工程師、架構(gòu)師、DBA、以及一些CXO和高端獵頭,成為國內(nèi)具有影響力的高端IT專業(yè)群Mycat社區(qū)首次提出BigSQL的概念,并逐步將大數(shù)據(jù)和實(shí)時計算等先進(jìn)技術(shù)引入到Mycat里,從而吸引和聚集了一大批業(yè)內(nèi)大數(shù)據(jù)和云計算方面的資深工程師,Mycat社區(qū)成為名副其實(shí)的國內(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、項目Cobar而來,它有過大量的大規(guī)模生產(chǎn)案例社區(qū)非常活躍,維護(hù)者的水平很高,重大Bug都24小時修復(fù)目前的生產(chǎn)案例是開源項目中為數(shù)最多的,而且很多是大型項目Mycat的版本分為長期支持版本和當(dāng)前最新版本兩種,前者出現(xiàn)重大Bug后,還會及時修復(fù),解決了生產(chǎn)中應(yīng)用的后顧之憂Mycat的資料非常全,包括志愿者提供的資料,用戶分享的經(jīng)驗資料,以及官方定期更新的Mycat權(quán)威指南,絕大多數(shù)技術(shù)問題,都可以通過文檔和社區(qū)交流來解決如果需要專業(yè)技術(shù)支持服務(wù),也可以跟Mycat社區(qū)交流,通過贊助開源項目的方式,名利雙收,一舉兩得。何為數(shù)據(jù)(系統(tǒng))切分? 簡單來說,就是指通過某種特定的條件,按照某個維度,將我

5、們存放在同一個數(shù)據(jù)庫中的數(shù)據(jù)分散存放到多個數(shù)據(jù)庫(主機(jī))上面以達(dá)到分散單庫(主機(jī))負(fù)載的效果。 切分模式:A.垂直(縱向)切分。B.水平切分。系統(tǒng)切分及其解決方案一個數(shù)據(jù)庫由很多表的構(gòu)成,每個表對應(yīng)著不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進(jìn)行分類,分布到不同的數(shù)據(jù)庫上面,這樣也就將數(shù)據(jù)或者說壓力分擔(dān)到不同的庫上面,如下圖:優(yōu)點(diǎn): -拆分后業(yè)務(wù)清晰,拆分規(guī)則明確。 -系統(tǒng)之間整合或擴(kuò)展容易。 -數(shù)據(jù)維護(hù)簡單。缺點(diǎn): -部分業(yè)務(wù)表無法JOIN,只能通過接口方式解決,提高了系統(tǒng)復(fù)雜度。 -受每種業(yè)務(wù)不同的限制存在單庫性能瓶頸,不易數(shù)據(jù)擴(kuò)展跟性能提高。 -事務(wù)處理復(fù)雜。 垂直拆分相對于垂直拆分,水平拆分

6、不是將表的數(shù)據(jù)做分類,而是按照某個字段的某種規(guī)則來分散到多個庫之中,每個表中包含一部分?jǐn)?shù)據(jù)。簡單來說,我們可以將數(shù)據(jù)的水平切分理解為是按照數(shù)據(jù)行的切分,就是將表中的某些行切分到一個數(shù)據(jù)庫,而另外的某些行又切分到其他的數(shù)據(jù)庫中,主要有分表,分庫兩種模式,如圖:優(yōu)點(diǎn): 不存在單庫大數(shù)據(jù),高并發(fā)的性能瓶頸。 對應(yīng)用透明,應(yīng)用端改造較少。 按照合理拆分規(guī)則拆分,JOIN操作基本避免跨庫。 提高了系統(tǒng)的穩(wěn)定性跟負(fù)載能力。缺點(diǎn): 拆分規(guī)則難以抽象。 分片事務(wù)一致性難以解決。 數(shù)據(jù)多次擴(kuò)展難度跟維護(hù)量極大。 跨庫JOIN性能較差。 水平切分前面講了垂直切分跟水平切分的不同跟優(yōu)缺點(diǎn),會發(fā)現(xiàn)每種切分方式都有缺點(diǎn)

7、,但共同的特點(diǎn)缺點(diǎn)有:-引入分布式事務(wù)的問題。-跨節(jié)點(diǎn)JOIN 的問題。-跨節(jié)點(diǎn)合并排序分頁問題。針對數(shù)據(jù)源管理,目前主要有兩種思路:A. 客戶端模式,在每個應(yīng)用程序模塊中配置管理自己需要的一個(或者多個)數(shù)據(jù)源,直接訪問各個數(shù)據(jù)庫,在模塊內(nèi)完成數(shù)據(jù)的整合; 優(yōu)點(diǎn):相對簡單,無性能損耗。 缺點(diǎn):不夠通用,數(shù)據(jù)庫連接的處理復(fù)雜,對業(yè)務(wù)不夠透明,處理復(fù)雜。B. 通過中間代理層來統(tǒng)一管理所有的數(shù)據(jù)源,后端數(shù)據(jù)庫集群對前端應(yīng)用程序透明; 優(yōu)點(diǎn):通用,對應(yīng)用透明,改造少。 缺點(diǎn):實(shí)現(xiàn)難度大,有二次轉(zhuǎn)發(fā)性能損失。切分原則:-盡量不切分,架構(gòu)是進(jìn)化而來,不是一蹴而就。-最大可能的找到最合適的切分維度。-由于

8、數(shù)據(jù)庫中間件對數(shù)據(jù)JOIN 實(shí)現(xiàn)的優(yōu)劣難以把握,而且實(shí)現(xiàn)高性能難度極大,業(yè)務(wù)讀取 盡量少使用多表JOIN-盡量通過數(shù)據(jù)冗余,分組避免數(shù)據(jù)垮庫多表JOIN。-盡量避免分布式事務(wù)。-單表切分?jǐn)?shù)據(jù)1000萬以內(nèi)。切分的處理難點(diǎn): -360 ATLAS-ALIBABA COBAR -MYCAT-TDDL-HEISENBERG-OCEANUS-VITESS-ONEPROXY 開源的切分方案TLAS是由 QIHOO 360, WEB平臺部基礎(chǔ)架構(gòu)團(tuán)隊開發(fā)維護(hù)的一個基于MYSQL協(xié)議的數(shù)據(jù)中間層項目。它是在MYSQL-PROXY 0.8.2版本的基礎(chǔ)上,對其進(jìn)行了優(yōu)化,增加了一些新的功能特性。360內(nèi)部使用

9、ATLAS運(yùn)行的MYSQL業(yè)務(wù),每天承載的讀寫請求數(shù)達(dá)幾十億條。主要功能:主要功能:* 讀寫分離* 從庫負(fù)載均衡* IP過濾* SQL語句黑白名單* 自動分表360 AtlasCOBAR是阿里巴巴(B2B)部門開發(fā)的一種關(guān)系型數(shù)據(jù)的分布式處理系統(tǒng),它可以在分布式的環(huán)境下看上去像傳統(tǒng)數(shù)據(jù)庫一樣為您提供海量數(shù)據(jù)服務(wù). COBAR的分布式主要是通過將表放入不同的庫來實(shí)現(xiàn):1. COBAR支持將一張表水平拆分成多份分別放入不同的庫來實(shí)現(xiàn)表的水平拆分2. COBAR也支持將不同的表放入不同的庫3. 多數(shù)情況下,用戶會將以上兩種方式混合使用這里需要強(qiáng)調(diào)的是,COBAR不支持將一張表,例如TEST表拆分成T

10、EST_1, TEST_2, TEST_3.放在同一個庫中,必須將拆分后的表分別放入不同的庫來實(shí)現(xiàn)分布式。HA:在用戶配置了MYSQL心跳的情況下,COBAR可以自動向后端連接的MYSQL發(fā)送心跳,判斷MYSQL運(yùn)行狀況,一旦運(yùn)行出現(xiàn)異常,COBAR可以自動切換到備機(jī)工作。但需要強(qiáng)調(diào)的是:1. COBAR的主備切換有兩種觸發(fā)方式,一種是用戶手動觸發(fā),一種是COBAR的心跳語句檢測到異常后自動觸發(fā)。那么,當(dāng)心跳檢測到主機(jī)異常,切換到備機(jī),如果主機(jī)恢復(fù)了,需要用戶手動切回主機(jī)工作,COBAR不會在主機(jī)恢復(fù)時自動切換回主機(jī),除非備機(jī)的心跳也返回異常。2. COBAR只檢查MYSQL主備異常,不關(guān)心主

11、備之間的數(shù)據(jù)同步,因此用戶需要在使用COBAR之前在MYSQL主備上配置雙向同步,詳情可以參閱MYSQL參考手冊。其次,我們也需要注意COBAR的功能約束:1) 不支持跨庫情況下的JOIN、分頁、排序、子查詢操作。2) SET語句執(zhí)行會被忽略,事務(wù)和字符集設(shè)置除外。3) 分庫情況下,INSERT語句必須包含拆分字段列名。4) 分庫情況下,UPDATE語句不能更新拆分字段的值。5) 不支持SAVEPOINT操作。6) 暫時只支持MYSQL數(shù)據(jù)節(jié)點(diǎn)。alibaba cobar淘寶根據(jù)自己的業(yè)務(wù)特點(diǎn)開發(fā)了TDDL(TAOBAO DISTRIBUTED DATA LAYER 外號:頭都大了 )框架,主

12、要解決了分庫分表對應(yīng)用的透明化以及異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)復(fù)制,它是一個基于集中式配置的 JDBC DATASOURCE實(shí)現(xiàn),具有主備,讀寫分離,動態(tài)數(shù)據(jù)庫配置等功能。TDDL所處的位置(TDDL通用數(shù)據(jù)訪問層,部署在客戶端的JAR包,用于將用戶的SQL路由到指定的數(shù)據(jù)庫中). 1.數(shù)據(jù)庫主備和動態(tài)切換2.帶權(quán)重的讀寫分離3.單線程讀重試4.集中式數(shù)據(jù)源信息管理和動態(tài)變更5.剝離的穩(wěn)定JBOSS數(shù)據(jù)源6.支持MYSQL和ORACLE數(shù)據(jù)庫7.基于JDBC規(guī)范,很容易擴(kuò)展支持實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)源8.無SERVER,CLIENT-JAR形式存在,應(yīng)用直連數(shù)據(jù)庫9.讀寫次數(shù),并發(fā)度流程控制,動態(tài)變更

13、10.可分析的日志打印,日志流控,動態(tài)變更TDDL強(qiáng)大好用的MYSQL分庫分表中間件,由百度員工個人編寫。分庫分表與應(yīng)用脫離,分庫表如同使用單庫表一樣減少DB 連接數(shù)壓力熱重啟配置可水平擴(kuò)容遵守MYSQL原生協(xié)議無語言限制,MYSQLCLIENT,C,JAVA等都可以使用HEISENBERG服務(wù)器通過管理命令可以查看,如連接數(shù),線程池,結(jié)點(diǎn)等,并可以調(diào)整heisenberg58 OCEANUS致力于打造一個功能簡單、可依賴、易于上手、易于擴(kuò)展、易于集成的解決方案,甚至是平臺化系統(tǒng)。擁抱開源,提供各類插件機(jī)制集成其他開源項目,新手可以在幾分鐘內(nèi)上手編程,分庫分表邏輯不再與業(yè)務(wù)緊密耦合,擴(kuò)容有標(biāo)準(zhǔn)

14、模式,減少意外錯誤的發(fā)生 DATANODE:數(shù)據(jù)源節(jié)點(diǎn)。為一個數(shù)據(jù)源命名,配置鏈接屬性、報警實(shí)現(xiàn)NAMENODE:數(shù)據(jù)源的簇。為一組數(shù)據(jù)源命名,指定這組數(shù)據(jù)源的負(fù)載方式、訪問模式、權(quán)重TABLE:映射表。匹配解析SQL中的TABLE名稱,命中TABLE標(biāo)簽的NAME屬性值后,會執(zhí)行約定的路由邏輯BEAN:實(shí)體。由其他標(biāo)簽引用,實(shí)體類必須有無參的構(gòu)造函數(shù)TRACKER:監(jiān)控埋點(diǎn)。涉及到計算和IO的功能點(diǎn)都有監(jiān)控點(diǎn),自定義一個埋點(diǎn)實(shí)現(xiàn)類,當(dāng)功能耗時超出預(yù)期時會執(zhí)行其中的回調(diào)函數(shù),便于監(jiān)控和優(yōu)化系統(tǒng)Oceanus谷歌開發(fā)的數(shù)據(jù)庫中間件,集群基于ZOOKEEPER管理,通過RPC方式進(jìn)行數(shù)據(jù)處理,總體

15、分為,SERVER,COMMAND LINE,GUI監(jiān)控 3部分。vitess分布式關(guān)系型數(shù)據(jù)庫服務(wù)DRDS阿里分布式關(guān)系型數(shù)據(jù)庫服務(wù)(DISTRIBUTE RELATIONAL DATABASE SERVICE,簡稱DRDS)是一種水平拆分、可平滑擴(kuò)縮容、讀寫分離的在線分布式數(shù)據(jù)庫服務(wù)。前身為淘寶TDDL,是近千個應(yīng)用首選組件,已穩(wěn)定服務(wù)了七年以上。rds/drds-遵守MYSQL原生協(xié)議,跨語言,跨數(shù)據(jù)庫的通用中間件代理。-基于心跳的自動故障切換,支持讀寫分離,支持MYSQL一雙主多從,以及一主多從-有效管理數(shù)據(jù)源連接,基于數(shù)據(jù)分庫,而不是分表的模式。-基于NIO實(shí)現(xiàn),有效管理線程,高并發(fā)

16、問題。-支持?jǐn)?shù)據(jù)的多片自動路由與聚合,支持SUM,COUNT,MAX等常用的聚合函數(shù)。-支持2表JOIN,甚至基于CALTLET的多表JOIN。-支持通過全局表,ER關(guān)系的分片策略,實(shí)現(xiàn)了高效的多表JOIN查詢。-支持多租戶方案。-支持分布式事務(wù)(弱XA)-支持全局序列號,解決分布式下的主鍵生成問題。-分片規(guī)則豐富,插件化開發(fā),易于擴(kuò)展。-強(qiáng)大的WEB,命令行監(jiān)控。-支持前端作為MYSQ通用代理,后端JDBC方式支持ORACLE、DB2、SQL SERVER 、 MONGODB 、巨杉。-集群基于ZOOKEEPER管理,在線升級,擴(kuò)容,智能優(yōu)化,大數(shù)據(jù)處理(2.0開發(fā)版)。MycatMYCAT

17、架構(gòu)圖MYCAT高效NIO和線程設(shè)計-邏輯庫(SCHEMA)-邏輯表(TABLE) - ER 表表 - 非分片表 - 分片表 - 全局表- 分片節(jié)點(diǎn)(DATANODE) -節(jié)點(diǎn)主機(jī)(DATAHOST) -分片規(guī)則(RULE)-全局序列號(SEQUENCE)-多租戶Mycat概念MYCAT抽象多個MYQL實(shí)例,對外提供唯一的訪問數(shù)據(jù)源。 邏輯庫與邏輯表Server.xml mycat orderdb Scema配置 select 1 select 1 MYCAT的路由解決方案在數(shù)據(jù)切分處理中,特別是水平切分中,中間件最終要的兩個處理過程就是數(shù)據(jù)的切分、數(shù)據(jù)的聚合。選擇合適的切分規(guī)則,至關(guān)重要,因

18、為它決定了后續(xù)數(shù)據(jù)聚合的難易程度,甚至可以避免跨庫的數(shù)據(jù)聚合處理。拆分原則:1. 避免或減少跨庫join。2. 選擇最合適的拆分維度。Mycat拆分表解決方案:-MYCAT 全局表全局表-ER關(guān)系關(guān)系-表拆分表拆分 -拆分維度拆分維度 -主鍵分片vs 非主鍵分片非主鍵分片路由規(guī)則配置Rule.xml user_id func1 1 1024 拆分字段(拆分維度)MYCAT全局表ordershost1ordershost2ordershost3ordershost4insert into orders (xxx)Mycat每個節(jié)點(diǎn)同時并發(fā)插入和更新數(shù)據(jù),每個節(jié)點(diǎn)都可以讀取數(shù)據(jù),提升讀性能的同時解

19、決跨 節(jié)點(diǎn)Join的效率 ER模型就是將表按照相同拆分規(guī)則,相同拆分值,切分到同一個分片節(jié)點(diǎn)上,避免出現(xiàn)跨分片的JOIN的一種切分模型??梢耘渲脼楦缸颖?,也可以不配置為父子表。ER表及ER關(guān)系模型 -MYCAT數(shù)據(jù)JOIN解決方案全局表技術(shù)獨(dú)創(chuàng)的ER關(guān)系分片基于Catlet的sharejoin兩表自動Join模塊復(fù)雜SQL可通過用戶自定義的Catlet進(jìn)行處理Catlet是Java編寫的一段程序,類似數(shù)據(jù)庫中的存儲過程,可以實(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) 常見的join算法:BKA(Batched Key Access)MYCAT高可用讀寫分離和自動切換機(jī)制-基于心跳的自動切換-Mycat 支持基于MySQL主從復(fù)制狀態(tài)的高級讀寫分離與主從切換控制機(jī)制。-強(qiáng)制走寫節(jié)點(diǎn)解決讀寫分離時延問題Mycat讀寫分片配置(注意:讀寫節(jié)點(diǎn),主從節(jié)點(diǎn)直接數(shù)據(jù)同步需要數(shù)據(jù)庫自己同步,mycat不負(fù)責(zé))MyCAT的讀寫分離機(jī)制如

21、下:a.事務(wù)內(nèi)的SQL,默認(rèn)走寫節(jié)點(diǎn),以注釋/*balance*/開頭,則會根據(jù)balance=“1” 或“2”或“3” 去獲取 .b.自動提交的select語句會走讀節(jié)點(diǎn),并在所有可用讀節(jié)點(diǎn)中間隨機(jī)負(fù)載均衡,默認(rèn)根據(jù)balance=“1” 或“2”或“3” 去獲取,以注釋/*balance*/開頭則會走寫,解決部分已經(jīng)開啟讀寫分離,但是需要強(qiáng)一致性數(shù)據(jù)實(shí)時獲取數(shù)據(jù)的場景走寫c. 當(dāng)某個主節(jié)點(diǎn)宕機(jī),則其全部讀節(jié)點(diǎn)都不再被使用,因為此時,同步失敗,數(shù)據(jù)已經(jīng)不是最新的,MYCAT會采用另外一個主節(jié)點(diǎn)所對應(yīng)的全部讀節(jié)點(diǎn)來實(shí)現(xiàn)select負(fù)載均衡。d.當(dāng)所有主節(jié)點(diǎn)都失敗,則為了系統(tǒng)高可用性,自動提交的

22、所有select語句仍將提交到全部存活的讀節(jié)點(diǎn)上執(zhí)行,此時系統(tǒng)的很多頁面還是能出來數(shù)據(jù),只是用戶修改或提交會失敗。MyCAT的讀寫分離的配置如下: select user() dataHost的balance屬性設(shè)置為:0,不開啟讀寫分離機(jī)制1,全部的readHost與stand by writeHost參與select語句的負(fù)載均衡,簡單的說,當(dāng)雙主雙從模式(M1-S1,M2-S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負(fù)載均衡。2,所有的readHost與writeHost都參與select語句的負(fù)載均衡,也就是說,當(dāng)系統(tǒng)的寫操作壓力不大的情況下,所

23、有主機(jī)都可以承擔(dān)負(fù)載均衡。3. 全部的讀節(jié)點(diǎn)參數(shù)讀,寫節(jié)點(diǎn)不參與,如果配置了多個writerhost,則多個writerhost下面的readhost參數(shù)讀負(fù)載。Mycat2.0mysqlMycat2.0 -集群處理-自動擴(kuò)容-智能優(yōu)化-大數(shù)據(jù)處理mysqlmysqlMycatMycatbalanceZookeeper Regist centerMycatAdmin/web應(yīng)用應(yīng)用MYCAT對多租戶應(yīng)用的支持MYCAT對事務(wù)的支持為弱XA,如果業(yè)務(wù)需要嚴(yán)格的強(qiáng)一致性,需要采用事務(wù)補(bǔ)償方案,或者盡量避免跨庫操作。Mycat事務(wù)支持mycat的事務(wù)處理是,依次輪詢需要處理的分片執(zhí)行對應(yīng)的Sql,當(dāng)

24、應(yīng)用commit時在依次輪詢commit。如果中間一個分片執(zhí)行sql出錯全部回滾。但是如果應(yīng)用發(fā)起commit命令,Mycat發(fā)起commit到db成功,但是實(shí)際db未成功時,mycat無法保證各個節(jié)點(diǎn)回滾,這就是弱xa。分布式事務(wù)處理-異步化處理-最終一致性Mycat主從及多主配置dataHost的writeType屬性設(shè)置為: writeType=0 默認(rèn)配置。 writeType=1 代表配置多主,mycat會往所有寫節(jié)點(diǎn),隨機(jī)寫數(shù)據(jù),但是每次只會寫入一個節(jié)點(diǎn),此模式下無讀節(jié)點(diǎn),節(jié)點(diǎn)之間開啟數(shù)據(jù)庫級別同步。此配置為mysql高級級別使用,因為多主會帶來數(shù)據(jù)庫同步問題。 select us

25、er() 基于主從同步的讀寫分離與主從切換1.4 開始支持MySQL 主從復(fù)制狀態(tài)綁定的讀寫分離與主從切換機(jī)制,讀更加安全可靠,配置如下:MyCAT 心跳檢查語句配置為show slave status ,dataHost 上定義兩個新屬性: switchType=2 與slaveThreshold=100,此時意味著開啟MySQL 主從復(fù)制狀態(tài)綁定的讀寫分離與切換機(jī)制,Mycat 心跳機(jī)制通過檢測show slave status 中的Seconds_Behind_Master, Slave_IO_Running,Slave_SQL_Running 三個字段來確定當(dāng)前主從同步的狀態(tài)以及Sec

26、onds_Behind_Master 主從復(fù)制時延, 當(dāng)Seconds_Behind_MasterslaveThreshold 時,讀寫分離篩選器會過濾掉此Slave 機(jī)器,防止讀到很久之前的舊數(shù)據(jù),而當(dāng)主節(jié)點(diǎn)宕機(jī)后,切換邏輯會檢查Slave 上的Seconds_Behind_Master 是否為0,為0 時則表示主從同步,可以安全切換,否則不會切換。switchType 目前有三種選擇: -1 表示不自動切換 1 默認(rèn)值,自動切換 2 基于MySQL 主從同步的狀態(tài)決定是否切換下面為參考配置: show slave status Mycat高級特性(注解)MyCat對自身不支持的Sql語句提

27、供了一種解決方案在要執(zhí)行的SQL語句前添加額外的一段代碼,這樣Sql就能正確執(zhí)行,這段代碼稱之為“注解”。注解的形式是 /*!mycat: sql=Sql語句*/使用時將=號后的“Sql語句”替換為需要的Sql語句即可,后面會提到具體的用法。例子假設(shè)需要執(zhí)行的語句是 Insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黃蓉,10010);鑒于路由分析的原因,MyCat暫不支持這種語句的執(zhí)行,如果一定需要執(zhí)行這種語句,可在這段sql代碼前添加 /*!mycat: sql=select id from persons whe

28、re sharding_id=10010 */語句變?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語句的流程是先進(jìn)行SQL解析處理,解析出分片信息(路由信息)后,然后到該分片對應(yīng)的物理庫上去執(zhí)行;若傳入的SQL語句MyCat無法解析,則MyCat不會去執(zhí)行;而注解則是告訴MyCat按照注解內(nèi)的SQL(稱之為注解SQL)去進(jìn)行解

29、析處理,解析出分片信息后,將注解后真正要執(zhí)行的SQL語句(稱之為原始SQL)發(fā)送到該分片對應(yīng)的物理庫上去執(zhí)行。從上面的原理可以看到,注解只是告訴MyCat到何處去執(zhí)行原始SQL;因而使用注解前,要清楚的知道該原始SQL去哪個分片執(zhí)行,然后在注解SQL中也指向該分片,這樣才能使用!例子中的sharding_id=10010即是指明分片信息的。需要說明的是,若注解SQL沒有能明確到具體某個分片,譬如例子中的注解SQL沒有添加sharding_id=10010這個條件,則MyCat會將原始SQL發(fā)送到persons表所在的所有分片上去執(zhí)行去,這樣造成的后果若是插入語句,則在多個分片上都存在重復(fù)記錄,

30、同樣查詢、更新、刪除操作也會得到錯誤的結(jié)果!解決問題MySql不支持的語法結(jié)構(gòu),如insert values(),() insert select等 同一個實(shí)例內(nèi)的跨庫關(guān)聯(lián)查詢,如用戶庫和平臺庫內(nèi)的表關(guān)聯(lián) 存儲過程調(diào)用全局序列號全局序列號是MyCAT提供的一個新功能,為了實(shí)現(xiàn)分庫分表情況下,表的主鍵是全局唯一,而默認(rèn)的MySQL的自增長主鍵無法滿足這個要求。全局序列號的語法符合標(biāo)準(zhǔn)SQL規(guī)范,其格式為:next value for MYCATSEQ_GLOBAL其中MYCATSEQ_GLOBAL是序列號的名字,MyCAT自動創(chuàng)建新的序列號,免去了開發(fā)的復(fù)雜度,另外,MyCAT也提供了一個全局的

31、序列號,名稱為:MYCATSEQ_GLOBAL。注意,注意,MYCATSEQ_必須大寫才能正確識別。必須大寫才能正確識別。注意:注意:序列:序列:MYCATSEQ_MYCAT配置:配置:MYCAT=dn1 表為:表為:MYCAT 也就是也就是”表名表名“=序列號后半部分的名字(序列號后半部分的名字(MYCATSEQ_xxx 中的中的xxx)目前全局序列號提供了本地文件跟數(shù)據(jù)庫模式及本地基于時間戳算法的三種方式: Insert table t_node(name) values(testname);Demo:http:/ 監(jiān)控MyCAT 自身有類似其他數(shù)據(jù)庫的管理監(jiān)控方式,可以通過Mysql 命令行,登錄管理端口(9066)執(zhí)行相應(yīng)的SQL 進(jìn)行管理,也可以通過jdbc 的方式進(jìn)行遠(yuǎn)程連接管理,本小節(jié)主要講解命令行的管理操作。登錄:目前mycat 有兩個端口,8066 數(shù)據(jù)端口,9066 管理端口,命令行的登陸是通過9066 管理端口來操作,登錄方式類似于mysql 的服務(wù)端登陸。mysql -h -utest

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論