国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MyCat介紹與配置(精)


Mycat 前生今世
  1. 如果我有一個(gè)32核心的服務(wù)器,我就可以實(shí)現(xiàn)1個(gè)億的數(shù)據(jù)分片,我有32核心的服務(wù)器么?沒有,所以我至今無法實(shí)現(xiàn)1個(gè)億的數(shù)據(jù)庫(kù)分片。---Mycat's Plan
Mycat 簡(jiǎn)介

Mycat是什么?

  從定義和分類來看,它是一個(gè)開源的分布式數(shù)據(jù)庫(kù)系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的Server,前端用戶可以把它看做是一個(gè)數(shù)據(jù)庫(kù)代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生(Native)協(xié)議與多個(gè)MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫(kù)服務(wù)器通信,其核心功能是分庫(kù)分表,即將一個(gè)大表水平分割為N個(gè)小表,存儲(chǔ)在后端MySQL服務(wù)器里或者其他數(shù)據(jù)庫(kù)里。
  Mycat發(fā)展到目前版本,已經(jīng)不在是一個(gè)單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數(shù)據(jù)庫(kù),也支持MongoDB這種新型NOSQL方式的存儲(chǔ),未來還會(huì)支持更多類型的存儲(chǔ)。而在最終用戶看來,無論是那種存儲(chǔ)方式,在Mycat里,都是一個(gè)傳統(tǒng)的數(shù)據(jù)庫(kù)表,支持標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的操作,這樣一來,對(duì)前端業(yè)務(wù)系統(tǒng)來說,可以大幅度降低開發(fā)難度,提升開發(fā)速度,在測(cè)試階段,可以將一表定義為任何一種Mycat支持的存儲(chǔ)方式,比如MySQL的MyASM表、內(nèi)存表、或者M(jìn)ongoDB、LeveIDB以及號(hào)稱是世界上最快的內(nèi)存數(shù)據(jù)庫(kù)MemSQL上。

    試想一下,用戶表存放在MemSQL上,大量讀頻率遠(yuǎn)超過寫頻率的數(shù)據(jù)如訂單的快照數(shù)據(jù)存放于InnoDB中,一些日志數(shù)據(jù)存放于MongoDB中,而且還能把Oracle的表跟MySQL的表做關(guān)聯(lián)查詢,你是否有一種不能呼吸的感覺?而未來,還能通過Mycat自動(dòng)將一些計(jì)算分析后的數(shù)據(jù)灌入到Hadoop中,并能用Mycat+Storm/Spark Stream引擎做大規(guī)模數(shù)據(jù)分析,看到這里。

對(duì)于DBA來說,可以這么理解Mycat:

  Mycat就是MySQL Server,而Mycat后面連接的MySQL Server,就好象是MySQL的存儲(chǔ)引擎,如InnoDB,MyISAM等,因此,Mycat本身并不存儲(chǔ)數(shù)據(jù),數(shù)據(jù)是在后端的MySQL上存儲(chǔ)的,因此數(shù)據(jù)可靠性以及事務(wù)等都是MySQL保證的,簡(jiǎn)單的說,Mycat就是MySQL最佳伴侶,它在一定程度上讓MySQL擁有了能跟Oracle PK的能力。

對(duì)于軟件工程師來說,可以這么理解Mycat:

   Mycat就是一個(gè)近似等于MySQL的數(shù)據(jù)庫(kù)服務(wù)器,你可以用連接MySQL的方式去連接Mycat(除了端口不同,默認(rèn)的Mycat端口是8066而非MySQL的3306,因此需要在連接字符串上增加端口信息),大多數(shù)情況下,可以用你熟悉的對(duì)象映射框架使用Mycat,但建議對(duì)于分片表,盡量使用基礎(chǔ)的SQL語句,因?yàn)檫@樣能達(dá)到最佳性能,特別是幾千萬甚至幾百億條記錄的情況下。

對(duì)于架構(gòu)師來說,可以這么理解Mycat:

Mycat是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)中間件,不僅僅可以用作讀寫分離、以及分表分庫(kù)、容災(zāi)備份,而且可以用于多租戶應(yīng)用開發(fā)、云平臺(tái)基礎(chǔ)設(shè)施、讓你的架構(gòu)具備很強(qiáng)的適應(yīng)性和靈活性,借助于即將發(fā)布的Mycat智能優(yōu)化模塊,系統(tǒng)的數(shù)據(jù)訪問瓶頸和熱點(diǎn)一目了然,根據(jù)這些統(tǒng)計(jì)分析數(shù)據(jù),你可以自動(dòng)或手工調(diào)整后端存儲(chǔ),將不同的表映射到不同存儲(chǔ)引擎上,而整個(gè)應(yīng)用的代碼一行也不用改變。  

    當(dāng)前是個(gè)大數(shù)據(jù)的時(shí)代,但究竟怎樣規(guī)模的數(shù)據(jù)是和數(shù)據(jù)庫(kù)系統(tǒng)呢?對(duì)此,國(guó)外有一個(gè)數(shù)據(jù)庫(kù)領(lǐng)域的權(quán)威人士說了一個(gè)結(jié)論:干億以下的數(shù)據(jù)規(guī)模仍然是數(shù)據(jù)庫(kù)領(lǐng)域的專長(zhǎng),而Hadoop等這種系統(tǒng),更適合的是干億以上的規(guī)模,所以,Mycat適合1000億條以下的單表規(guī)模,如果你的數(shù)據(jù)超過了這個(gè)規(guī)模,請(qǐng)投靠Mycat Plus吧!


Mycat原理

Mycat的原理并不復(fù)雜,復(fù)雜的是代碼,如果代碼也不復(fù)雜,那么早就成為一個(gè)傳說了。
    Mycat的原理中最重要的一個(gè)動(dòng)詞是“攔截”,它攔截了用戶發(fā)送過來的SQL語句,首先對(duì)SQL語句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發(fā)往后端的真實(shí)數(shù)據(jù)庫(kù),并將返回的結(jié)果做適當(dāng)?shù)奶幚?,最終再返回給用戶。
    上述圖片里,Orders表被分為三個(gè)分片datanode(簡(jiǎn)稱dn),這三個(gè)分片是分布在兩臺(tái)MySQL Server上(DataHost),即datanode=database@datahost方式,因此你可以用一臺(tái)到N臺(tái)服務(wù)器來分片,分片規(guī)則為(sharding rule)典型的字符串枚舉分片規(guī)則,一個(gè)規(guī)則的定義是分片字段(sharding column)+分片函數(shù)(rule function),這里的分片字段為rov而分片函數(shù)為字符串枚舉方式。
    當(dāng)Mycat收到一個(gè)SQL時(shí),會(huì)先解析這個(gè)SQL,查找涉及到的表,然后看此表的定義,如果有分片規(guī)則,則獲取到SQL里分片字段的值,并匹配分片函數(shù),得到該QL對(duì)應(yīng)的分片列表,然后將SQL發(fā)往這些分片去執(zhí)行,最后收集和處理所有分片返回的結(jié)果數(shù)據(jù),并輸出到客戶端。以select * from Orders where prov=?語句為例,查到prov=wuhan,按照分片函數(shù),wuhan返回
dn1,于是SQL就發(fā)給了MySQL1,去取DB1上的查詢結(jié)果,并返回給用戶。
    如果上述SQL改為elect * from Orders where prov in (‘wuhan’,‘beijing’),那么,SQL就會(huì)發(fā)給ySQL1與MySQL2去執(zhí)行,然后結(jié)果集合并后輸出給用戶。但通常業(yè)務(wù)中我們的SQL會(huì)有Order By 以及Limit翻頁(yè)語法,此時(shí)就涉及到結(jié)果集在Mycat端的二次處理,這部分的代碼也比較復(fù)雜,而最復(fù)雜的則屬兩個(gè)表的Jion問題,為此,Mycat提出了創(chuàng)新性的ER分片、全局表、HBT(Human Brain Tech)人工智能的Catlet、以及結(jié)合Storm/Spark引擎等十八般武藝的解決辦法,從而成為目前業(yè)界最強(qiáng)大的方案,這就是開源的力量!

應(yīng)用場(chǎng)景

Mycat發(fā)展到現(xiàn)在,適用的場(chǎng)景已經(jīng)很豐富,而且不斷有新用戶給出新的創(chuàng)新性的方案,以下是幾個(gè)典型的應(yīng)用場(chǎng)景:
  a.單純的讀寫分離,此時(shí)配置最為簡(jiǎn)單,支持讀寫分離,主從切換
  b.分表分庫(kù),對(duì)于超過1〇〇〇萬的表進(jìn)行分片,最大支持1 〇〇〇億的單表分片
  c.多租戶應(yīng)用,每個(gè)應(yīng)用一個(gè)庫(kù),但應(yīng)用程序只連接Mycat,從而不改造程序本身,實(shí)現(xiàn)多租戶化
  d.報(bào)表系統(tǒng),借助于Mycat的分表能力,處理大規(guī)模報(bào)表的統(tǒng)計(jì)
  e.代替Hbase,分析大數(shù)據(jù)
  f.作為海量數(shù)據(jù)實(shí)時(shí)查詢的一種簡(jiǎn)單有效方案,比如 1〇〇億條頻繁查詢的記錄需要在3秒內(nèi)查詢出來結(jié)果, 除了基于主鍵的查詢,還可能存在范圍查詢或其他屬性查詢,此時(shí)Mycat可能是最簡(jiǎn)單有效的選擇
—單純的讀寫分離,此時(shí)配置最為簡(jiǎn)單,支持讀寫分離,主從切換分表分庫(kù),對(duì)于超過000萬的表進(jìn)行分片,最大支持1000億的單表分片
多租戶應(yīng)用,每個(gè)應(yīng)用一個(gè)庫(kù),但應(yīng)用程序只連接Mycat,從而不改造程序本身,實(shí)現(xiàn)多租戶化
報(bào)表系統(tǒng),借助于Mycat的分表能力,處理大規(guī)模報(bào)表的統(tǒng)計(jì)替代Hbase,分析大數(shù)據(jù),作為海量數(shù)據(jù)實(shí)時(shí)查詢的一種簡(jiǎn)單有效方案,比如100億條頻繁查詢的記錄需要在3秒內(nèi)查詢出來結(jié)果,除了基于主鍵的查詢,還可能存在范圍查詢或其他屬性查詢,此時(shí)ycat可能是最簡(jiǎn)單有效的選擇  

Mycat長(zhǎng)期路線圖

    強(qiáng)化分布式數(shù)據(jù)庫(kù)中間件的方面的功能,使之具備豐富的插件、強(qiáng)大的數(shù)據(jù)庫(kù)智能優(yōu)化功能、全面的系統(tǒng)監(jiān)控能力、以及方便的數(shù)據(jù)運(yùn)維工具,實(shí)現(xiàn)在線數(shù)據(jù)擴(kuò)容、遷移等高級(jí)功能進(jìn)一步挺進(jìn)大數(shù)據(jù)計(jì)算領(lǐng)域,深度結(jié)合Spark Stream和Storm等分布式實(shí)時(shí)流引擎,能夠完成快速的巨表關(guān)聯(lián)、排序、分組聚合等 OLAP方向的能力,并集成一些熱門常用的實(shí)時(shí)分析算法,讓工程師以及DBA們更容易用Mycat實(shí)現(xiàn)一些高級(jí)數(shù)據(jù)分析處理功能。
   不斷強(qiáng)化Mycat開源社區(qū)的技術(shù)水平,吸引更多的IT技術(shù)專家,使得Mycat社區(qū)成為中國(guó)的Apache,并將Mycat推到Apache基金會(huì),成為國(guó)內(nèi)頂尖開源項(xiàng)目,最終能夠讓一部分志愿者成為專職的Mycat開發(fā)者,榮耀跟實(shí)力一起提升。
依托Mycat社區(qū),聚集100個(gè)CXO級(jí)別的精英,眾籌建設(shè)親親山莊,Mycat社區(qū)+親親山莊=中國(guó)最大IT O2O社區(qū)
Mycat中的概念

數(shù)據(jù)庫(kù)中間件

前面講了Mycat是一個(gè)開源的分布式數(shù)據(jù)庫(kù)系統(tǒng),但是由于真正的數(shù)據(jù)庫(kù)需要存儲(chǔ)引擎,而Mycat并沒有存儲(chǔ)引擎,所以并不是完全意義的分布式數(shù)據(jù)庫(kù)系統(tǒng)。
那么Mycat是什么?Mycat是數(shù)據(jù)庫(kù)中間件,就是介于數(shù)據(jù)庫(kù)與應(yīng)用之間,進(jìn)行數(shù)據(jù)處理與交互的中間服務(wù)。由于前面講的對(duì)數(shù)據(jù)進(jìn)行分片處理之后,從原有的一個(gè)庫(kù),被切分為多個(gè)分片數(shù)據(jù)庫(kù),所有的分片數(shù)據(jù)庫(kù)集群構(gòu)成了整個(gè)完整的數(shù)據(jù)庫(kù)存儲(chǔ)。
  如上圖所表示,數(shù)據(jù)被分到多個(gè)分片數(shù)據(jù)庫(kù)后,應(yīng)用如果需要讀取數(shù)據(jù),就要需要處理多個(gè)數(shù)據(jù)源的數(shù)據(jù)。如果沒有數(shù)據(jù)庫(kù)中間件,那么應(yīng)用將直接面對(duì)分片集群,數(shù)據(jù)源切換、事務(wù)處理、數(shù)據(jù)聚合都需要應(yīng)用直接處理,原本該是專注于業(yè)務(wù)的應(yīng)用,將會(huì)花大量的工作來處理分片后的問題,最重要的是每個(gè)應(yīng)用處理將是完全的重復(fù)造輪子。
  所以有了數(shù)據(jù)庫(kù)中間件,應(yīng)用只需要集中與業(yè)務(wù)處理,大量的通用的數(shù)據(jù)聚合,事務(wù),數(shù)據(jù)源切換都由中間件來處理,中間件的性能與處理能力將直接決定應(yīng)用的讀寫性能,所以一款好的數(shù)據(jù)庫(kù)中間件至關(guān)重要。  

邏輯庫(kù)(schema)

    通常對(duì)實(shí)際應(yīng)用來說,并不需要知道中間件的存在,開發(fā)人員只需要知道數(shù)據(jù)庫(kù)的概念,所以數(shù)據(jù)庫(kù)中間件可以被看做是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)集群構(gòu)成的邏輯庫(kù)。

    在云計(jì)算時(shí)代,數(shù)據(jù)庫(kù)中間件可以以多租戶的形式給一個(gè)或多個(gè)應(yīng)用提供服務(wù),每個(gè)應(yīng)用訪問的可能是一個(gè)獨(dú)立或者是共享的物理庫(kù),常見的如阿里云數(shù)據(jù)庫(kù)服務(wù)器RDS。

    

邏輯表(table)

    既然有邏輯庫(kù),那么就會(huì)有邏輯表,分布式數(shù)據(jù)庫(kù)中,對(duì)應(yīng)用來說,讀寫數(shù)據(jù)的表就是邏輯表。邏輯表,可 以是數(shù)據(jù)切分后,分布在一個(gè)或多個(gè)分片庫(kù)中,也可以不做數(shù)據(jù)切分,不分片,只有一個(gè)表構(gòu)成。


分片表

  分片表,是指那些原有的很大數(shù)據(jù)的表,需要切分到多個(gè)數(shù)據(jù)庫(kù)的表,這樣,每個(gè)分片都有一部分?jǐn)?shù)據(jù),所 有分片構(gòu)成了完整的數(shù)據(jù)
  例如在mycat配置中的t_node就屬于分片表,數(shù)據(jù)按照規(guī)則被分到dn1,dn2兩個(gè)分片節(jié)點(diǎn)(dataNode) 上。
  1. <table name=nt_noden primaryKey=nvidn autoincrement=ntruen dataNode=ndn1,dn2n rule=nrule1n />

非分片表

  一個(gè)數(shù)據(jù)庫(kù)中并不是所有的表都很大,某些表是可以不用進(jìn)行切分的,非分片是相對(duì)分片表來說的,就是那 些不需要進(jìn)行數(shù)據(jù)切分的表。
  如下配置中t_node ,只存在于分片節(jié)點(diǎn)(dataNode ) dn1上。
  1. <table name=nt_noden primaryKey=nvidn autoincrement=ntruen dataNode=ndn1" />

ER 表

    關(guān)系型數(shù)據(jù)庫(kù)是基于實(shí)體關(guān)系模型(Entity-Relationship Model)之上,通過其描述了真實(shí)世界中事物與關(guān) 系,Mycat中的ER表即是來源于此。根據(jù)這一思路,提出了基于E-R關(guān)系的數(shù)捤分片策略,子表的記錄與所關(guān) 聯(lián)的父表記錄存放在同一個(gè)數(shù)據(jù)分片上,即子表依賴于父表,通過表分組(Table Group )保證數(shù)據(jù)Join不會(huì)跨庫(kù)操作。
    表分組(Table Group )是解決跨分片數(shù)據(jù)join的一種很好的思路,也是數(shù)據(jù)切分規(guī)劃的重要一條規(guī)則。

全局表

  一個(gè)真實(shí)的業(yè)務(wù)系統(tǒng)中,往往存在大量的類似字典表的表,這些表基本上很少變動(dòng),字典表具有以下幾個(gè)特性:
1.變動(dòng)不頻繁
2.數(shù)據(jù)量總體變化不大
3.數(shù)據(jù)規(guī)模不大,很少有超過數(shù)十萬條記錄。

分片節(jié)點(diǎn)(dataNode)

  數(shù)據(jù)切分后,一個(gè)大表被分到不同的分片數(shù)據(jù)庫(kù)上面,每個(gè)表分片所在的數(shù)據(jù)庫(kù)就是分片節(jié)點(diǎn) (dataNode )。
節(jié)點(diǎn)主機(jī)(dataHost)
  數(shù)據(jù)切分后,每個(gè)分片節(jié)點(diǎn)(dataNode )不一定都會(huì)獨(dú)占一臺(tái)機(jī)器,同一機(jī)器上面可以有多個(gè)分片數(shù)據(jù)庫(kù), 這樣一個(gè)或多個(gè)分片節(jié)點(diǎn)(dataNode )所在的機(jī)器就是節(jié)點(diǎn)主機(jī)(dataHost),為了規(guī)避單節(jié)點(diǎn)主機(jī)并發(fā)數(shù)限 制,盡量將讀寫壓力高的分片節(jié)點(diǎn)(dataNode )均衡的放在不同的節(jié)點(diǎn)主機(jī)(dataHost )。
分片規(guī)則(rule)

  前面講了數(shù)據(jù)切分,1個(gè)大表被分成若干個(gè)分片表,就需要一定的規(guī)則,這樣按照某種業(yè)務(wù)規(guī)則把數(shù)據(jù)分到 某個(gè)分片的規(guī)則就是分片規(guī)則,數(shù)據(jù)切分選擇合適的分片規(guī)則非常重要,將極大的避免后續(xù)數(shù)據(jù)處理的難度。

多租戶

多租戶技術(shù)或稱多重租賃技術(shù),是一種軟件架構(gòu)技術(shù),它是在探討與實(shí)現(xiàn)如何于多用戶的環(huán)境下共用相同的系統(tǒng)或程序組件,并且仍可確保各用戶間數(shù)據(jù)的隔離性。在云計(jì)算時(shí)代,多租戶技術(shù)在共用的數(shù)據(jù)中心以單一系統(tǒng)架構(gòu)與服務(wù)提供多數(shù)客戶端相同甚至可定制化的服務(wù),并且仍然可以保障客戶的數(shù)據(jù)隔離。目前各種各樣的云計(jì)算服務(wù)就是這類技術(shù)范疇,例如阿里云數(shù)據(jù)庫(kù)服務(wù)(RDS )、阿里云服務(wù)器(ECS)等等。
多租戶在數(shù)據(jù)存儲(chǔ)上存在三種主要的方案,分別是:

1.1 獨(dú)立數(shù)據(jù)庫(kù)

這是第一種方案,即一個(gè)租戶一個(gè)數(shù)據(jù)庫(kù),這種方案的用戶數(shù)據(jù)隔離級(jí)別最高,安全性最好,但成本也高。 
優(yōu)點(diǎn):
1、為不同的租戶提供獨(dú)立的數(shù)據(jù)庫(kù),有助于簡(jiǎn)化數(shù)據(jù)模型的擴(kuò)展設(shè)計(jì),滿足不同租戶的獨(dú)特需求;
2、如果出現(xiàn)故障,恢復(fù)數(shù)據(jù)比較簡(jiǎn)單。
缺點(diǎn):
1、增大了數(shù)據(jù)庫(kù)的安裝數(shù)量,隨之帶來維護(hù)成本和購(gòu)置成本的增加。
    這種方案與傳統(tǒng)的一個(gè)客戶、一套數(shù)據(jù)、一套部署類似,差別只在于軟件統(tǒng)一部署在運(yùn)營(yíng)商那里。如果面對(duì)的是銀行、醫(yī)院等需要非常高數(shù)據(jù)隔離級(jí)別的租戶,可以選擇這種模式,提高租用的定價(jià)。如果定價(jià)較低,產(chǎn)品 走低價(jià)路線,這種方案一般對(duì)運(yùn)營(yíng)商來說是無法承受的。

1.2共享數(shù)據(jù)庫(kù),隔離數(shù)據(jù)架構(gòu)

這是第二種方案,即多個(gè)或所有租戶共享Database,但是每個(gè)租戶一個(gè)Schema。
優(yōu)點(diǎn):
1、為安全性要求較高的租戶提供了一定程度的邏輯數(shù)據(jù)隔離,并不是完全隔離;每個(gè)數(shù)據(jù)庫(kù)可以支持更多的租戶數(shù)量。
缺點(diǎn):
1、如果出現(xiàn)故障,數(shù)據(jù)恢復(fù)比較困難,因?yàn)榛謴?fù)數(shù)據(jù)庫(kù)將牽扯到其它租戶的數(shù)據(jù)
2、如果需要跨租戶統(tǒng)計(jì)數(shù)據(jù),存在一定困難。

共享數(shù)據(jù)庫(kù),共享數(shù)據(jù)架構(gòu)

這是第三種方案,即租戶共享同一個(gè)Database、同一個(gè)Schema,但在表中通過TenantID區(qū)分租戶的數(shù)據(jù)。這是共享程度最高、隔離級(jí)別最低的模式。
優(yōu)點(diǎn):
1、三種方案比較,第三種方案的維護(hù)和購(gòu)置成本最低,允許每個(gè)數(shù)據(jù)庫(kù)支持的租戶數(shù)量最多。
缺點(diǎn):
1、隔離級(jí)別最低,安全性最低,需要在設(shè)計(jì)開發(fā)時(shí)加大對(duì)安全的開發(fā)量;
2、數(shù)據(jù)備份和恢復(fù)最困難,需要逐表逐條備份和還原。
3、如果希望以最少的服務(wù)器為最多的租戶提供服務(wù),并且租戶接受以犧牲隔離級(jí)別換取降低成本,這種方案最適合
官方網(wǎng)站:http://www.mycat.org.cn/

何為數(shù)據(jù)切分?

簡(jiǎn)單來說,就是指通過某種特定的條件,將我們存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主 機(jī))上面,以達(dá)到分散單臺(tái)設(shè)備負(fù)載的效果。

數(shù)據(jù)的切分(Sharding )根據(jù)其切分規(guī)則的類型,可以分為兩種切分模式。一種是按照不同的表(或者 Schema )來切分到不同的數(shù)據(jù)庫(kù)(主機(jī))之上,這種切可以稱之為數(shù)據(jù)的垂直(縱向)切分;另外一種則是根據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個(gè)表中的數(shù)據(jù)按照某種條件拆分到多臺(tái)數(shù)據(jù)庫(kù)(主機(jī))上面,這種切分稱之為數(shù)據(jù)的水平(橫向)切分。

垂直切分的最大特點(diǎn)就是規(guī)則簡(jiǎn)單,實(shí)施也更為方便,尤其適合各業(yè)務(wù)之間的耦合度非常低,相互影響很小,業(yè)務(wù)邏輯非常清晰的系統(tǒng)。在這種系統(tǒng)中,可以很容易做到將不同業(yè)務(wù)模塊所使用的表分拆到不同的數(shù)據(jù)庫(kù)中。根據(jù)不同的表來進(jìn)行拆分,對(duì)應(yīng)用程序的影響也更小,拆分規(guī)則也會(huì)比較簡(jiǎn)單清晰。

水平切分于垂直切分相比,相對(duì)來說稍微復(fù)雜一些。因?yàn)橐獙⑼粋€(gè)表中的不同數(shù)據(jù)拆分到不同的據(jù)庫(kù)中,對(duì)于應(yīng)用程序來說,拆分規(guī)則本身就較根據(jù)表名來拆分更為復(fù)雜,后期的數(shù)據(jù)維護(hù)也會(huì)更為復(fù)雜一些。

垂直切分

一個(gè)數(shù)據(jù)庫(kù)由很多表的構(gòu)成,每個(gè)表對(duì)應(yīng)著不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進(jìn)行分類,分布到不同 的數(shù)據(jù)庫(kù)上面,這樣也就將數(shù)據(jù)或者說壓力分擔(dān)到不同的庫(kù)上面,如下圖:

    一個(gè)架構(gòu)設(shè)計(jì)較好的應(yīng)用系統(tǒng),其總體功能肯定是由很多個(gè)功能模塊所組成的,而每一個(gè)功能模塊所需要的 數(shù)據(jù)對(duì)應(yīng)到數(shù)據(jù)庫(kù)中就是一個(gè)或者多個(gè)表。而在架構(gòu)設(shè)計(jì)中,各個(gè)功能模塊相互之間的交互點(diǎn)越統(tǒng)一越少,系統(tǒng) 的耦合度就越低,系統(tǒng)各個(gè)模塊的維護(hù)性以及擴(kuò)展性也就越好。這樣的系統(tǒng),實(shí)現(xiàn)數(shù)據(jù)的垂直切分也就越容易。
      但是往往系統(tǒng)之有些表難以做到完全的獨(dú)立,存在這擴(kuò)庫(kù)join的情況,對(duì)于這類的表,就需要去做平衡,是數(shù)據(jù)庫(kù)讓步業(yè)務(wù),共用一個(gè)數(shù)據(jù)源,還是分成多個(gè)庫(kù),業(yè)務(wù)之間通過接口來做調(diào)用。在系統(tǒng)初期,數(shù)據(jù)量比較少,或者資源有限的情況下,會(huì)選擇共用數(shù)據(jù)源,但是當(dāng)數(shù)據(jù)發(fā)展到了一定的規(guī)模,負(fù)載很大的情況,就需要必須去做分割。
  一般來講業(yè)務(wù)存在著復(fù)雜join的場(chǎng)景是難以切分的,往往業(yè)務(wù)獨(dú)立的易于切分。如何切分,切分到何種 程度是考驗(yàn)技術(shù)架構(gòu)的一個(gè)難題。

下面來分析下垂直切分的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):
  1. 拆分后業(yè)務(wù)清晰,拆分規(guī)則明確。
  2. 系統(tǒng)之間整合或擴(kuò)展容易。
  3. 數(shù)據(jù)維護(hù)簡(jiǎn)單。
缺點(diǎn):
  1. 部分業(yè)務(wù)表無法join ,只能通過接口方式解決,提高了系統(tǒng)復(fù)雜度。
  2. 受每種業(yè)務(wù)不同的限制存在單庫(kù)性能瓶頸,不易擴(kuò)展跟性能提高。
  3. 事務(wù)處理復(fù)雜。由于垂直切分是按照業(yè)務(wù)的分類將表分散到不同的庫(kù),所以有些業(yè)務(wù)表會(huì)過于龐大,存在單庫(kù)讀寫與存儲(chǔ)瓶頸,所以就需要水平拆分來做解決。

水平切分

    相對(duì)于垂直拆分,水平拆分不是將表做分類,而是按照某個(gè)字段的某種規(guī)則來分散到多個(gè)庫(kù)之中,每個(gè)表中包含一部分?jǐn)?shù)據(jù)。簡(jiǎn)單來說,我們可以將數(shù)據(jù)的水平切分理解為是按照數(shù)據(jù)行的切分,就是將表中的某些行切分 到一個(gè)數(shù)據(jù)庫(kù),而另外的某些行又切分到其他的數(shù)據(jù)庫(kù)中,如圖:
    拆分?jǐn)?shù)據(jù)就需要定義分片規(guī)則。關(guān)系型數(shù)據(jù)庫(kù)是行列的二維模型,拆分的第一原則是找到拆分維度。比如: 從會(huì)員的角度來分析,商戶訂單交易類系統(tǒng)中查詢會(huì)員某天期某個(gè)訂單,那么就需要按照會(huì)員結(jié)合日期來拆分,不同的數(shù)據(jù)按照會(huì)員ID做分組,這樣所有的數(shù)據(jù)查詢join都會(huì)在單庫(kù)內(nèi)解決;如果從商戶的角度來講,要查詢某個(gè)商家某天所有的訂單數(shù),就需要按照商戶ID做拆分;但是如果系統(tǒng)既想按會(huì)員拆分,又想按商家數(shù)據(jù),則會(huì)有一定的困難。如何找到合適的分片規(guī)則需要綜合考慮衡量。

幾種典型的分片規(guī)則包括:

  a.按照用戶ID求模,將數(shù)據(jù)分散到不同的數(shù)據(jù)庫(kù),具有相同數(shù)據(jù)用戶的數(shù)據(jù)都被分散一個(gè)庫(kù)中。
  b.按照日期,將不同月甚至日的數(shù)據(jù)分散到不同的庫(kù)中。
  c.按照某個(gè)特定的字段求模,或者根據(jù)特定范圍段分散到不同的庫(kù)中。

如圖,切分原則都是根據(jù)業(yè)務(wù)找到適合的切分規(guī)則分散到不同的庫(kù),下面用用戶 ID 求模舉例:

既然數(shù)據(jù)做了拆分有優(yōu)點(diǎn)也就優(yōu)缺點(diǎn)。
優(yōu)點(diǎn):
A.拆分規(guī)則抽象好,join 操作基本可以數(shù)據(jù)庫(kù)做
B.不存在單庫(kù)大數(shù)據(jù),高并發(fā)的性能瓶頸。
C.應(yīng)用端改造較少。
D.提高了系統(tǒng)的穩(wěn)定性跟負(fù)載能力。
缺點(diǎn):
a.拆分規(guī)則難以抽象。
b.分片亊務(wù)一致性難以解決。
c.數(shù)捤多次擴(kuò)展難度跟維護(hù)量極大。
d.跨庫(kù) join 性能較差。

前面講了垂直切分跟水平切分的不同跟優(yōu)缺點(diǎn),會(huì)發(fā)現(xiàn)每種切分都有缺點(diǎn),但共同的特點(diǎn)缺點(diǎn)有:

1.引入分布式亊務(wù)的問題。
2.跨節(jié)點(diǎn) Join 的問題。
3.跨節(jié)點(diǎn)合并排序分頁(yè)問題。
4.多數(shù)據(jù)源管理問題。

針對(duì)數(shù)據(jù)源管理,目前主要有兩種思路:

  A. 客戶端模式,在每個(gè)應(yīng)用程序模塊中配置管理自己需要的一個(gè)(或者多個(gè))數(shù)據(jù)源,直接訪問各個(gè)數(shù)據(jù)庫(kù),在模塊內(nèi)完成數(shù)據(jù)的整合;
  B. 通過中間代理層來統(tǒng)一管理所有的數(shù)據(jù)源,后端數(shù)據(jù)庫(kù)集群對(duì)前端應(yīng)用程序透明;

可能 90%以上的人在面對(duì)上面這兩種解決思路的時(shí)候都會(huì)傾向于選擇第二種,尤其是系統(tǒng)不斷變得龐大復(fù)雜的時(shí)候。確實(shí),這是一個(gè)非常正確的選擇,雖然短期內(nèi)需要付出的成本可能會(huì)相對(duì)更大一些,但是對(duì)整個(gè)系統(tǒng)的擴(kuò)展性來講,是非常有幫助的數(shù)據(jù)切分的原則:

數(shù)據(jù)切分的原則:

第一原則:能不切分盡量不要切分。
第二原則:如果要切分一定要選擇合適的切分規(guī)則,提前規(guī)劃好。
第三原則:數(shù)據(jù)切分盡量通過數(shù)據(jù)冗余或者表分組(Table Group)來降低跨庫(kù) Join 的可能。
第四原則:由于數(shù)據(jù)庫(kù)中間件對(duì)數(shù)據(jù) Join 實(shí)現(xiàn)的優(yōu)劣難以把握,而且實(shí)現(xiàn)高性能難度極大,業(yè)務(wù)讀取盡量少使用多表 Join。
安裝Mycat

安裝Mycat

  1. wget  https://github.com/MyCATApache/Mycat-download/raw/master/1.5-RELEASE/Mycat-server-1.5.1-RELEASE-20160622153300-linux.tar.gz
  2. tar zxf Mycat-server-1.5.1-RELEASE-20160622153300-linux.tar.gz
  3. mv mycat  /application/
  4. echo "export PATH=/application/mycat/bin:$PATH">>/etc/profile
  5. source /etc/profile
  6. echo $PATH

下載安裝JDK

  1. wget http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.rpm
  2. rpm -ivh jdk-8u91-linux-x64.rpm

配置環(huán)境變量

  1. echo "export JAVA_HOME=/usr/java/jdk1.8.0_91/"   >>/etc/profile
  2. echo "export PATH=$JAVA_HOME/bin:/application/mycat/bin/:$PATH">>/etc/profile
  3. echo "export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar">>/etc/profile
  4. source  /etc/profile
  5. [root@Linuxdemo3 ~]# java -version
  6. java version "1.8.0_91"
  7. Java(TM) SE RuntimeEnvironment(build 1.8.0_91-b14)
  8. JavaHotSpot(TM)64-BitServer VM (build 25.91-b14, mixed mode)

創(chuàng)建管理用戶

  1. 主庫(kù)上對(duì)rep和rep_r用戶授權(quán)如下:
  2. 用戶:rep  密碼:oldboy 端口:3306
  3. 權(quán)限:all
  4. 命令:
  5. grant replication slave on test.* to 'rep'@'10.0.0.%' identified by 'oldboy';
  6. grant replication slave on test.* to 'rep_r'@'10.0.0.%' identified by 'oldboy';
  7. flush privileges;
  8. 注:為了方便下面的主從切換,兩個(gè)用戶都授予了所有的權(quán)限,生產(chǎn)環(huán)境盡量不要這樣子授權(quán)!
修改mycat配置文件
  1. [root@Linuxdemo3 mycat]# pwd
  2. /application/mycat
  3. [root@Linuxdemo3 mycat]# ll
  4. total 24
  5. drwxr-xr-x 2 root root 4096Jul  403:13 bin
  6. drwxrwxrwx 2 root root 4096Dec13  2015 catlet
  7. drwxrwxrwx 2 root root 4096Jul  403:13 conf
  8. drwxr-xr-x 2 root root 4096Jul  403:13 lib
  9. drwxrwxrwx 2 root root 4096Dec13  2015 logs
  10. -rwxrwxrwx 1 root root  219Jun2215:33 version.txt
目錄解釋如下:
1.bin程序目錄,存放了 window版本和linux版本,除了提供封裝服務(wù)的版本之外,也提供了 nowrap的 shell腳本命令,方便大家選擇和修改,進(jìn)入到bin目錄:
2.Linux 下運(yùn)行:./mycat console,首先要 chmod +x *
注:mycat 支持的命令{ console | start | stop | restart | status | dump }
3.conf目錄下存放配置文件,其中:
4.server.xm丨是Mycat服務(wù)器參數(shù)調(diào)整和用戶授權(quán)的配置文件,
5.schema.xm丨是邏 輯庫(kù)定義和表仌及分片定義的配置文件,
6.rule.xml是分片規(guī)則的配置文件,分片規(guī)則的具體一些參數(shù)信息單獨(dú)存 放為文件,也在這個(gè)目錄下,配置文件修改,需要重啟Mycat或者通過9066端口 reload. 
7.lib目錄下主要存放mycat依賴的一些jar文件.
9.日志存放在logs/mycat.log中,每天一個(gè)文件,日志的配置是在conf/log4j.xml中,根據(jù)自己的需要,可 以調(diào)整輸出級(jí)別為debug , debug級(jí)別下,會(huì)輸出更多的信息,方便排查問題
注意:Linux下部署安裝MySQL ,默認(rèn)不忽略表名大小寫,需要手動(dòng)到/etc/my.cnf下配置 lower_case_table_names=1使Linux環(huán)境下MySQL忽略表名大小寫,否則使用MyCAT的時(shí)候會(huì)提示找不到 表的

修改server.xml文件

  1. [root@Linuxdemo3 conf]#  vim server.xml
  2.         </system>
  3.         <user name="rep">
  4.                 <property name="password">oldboy</property>
  5.                 <property name="schemas">test</property>
  6.         </user>
  7.         <user name="rep_r">
  8.                 <property name="password">oldboy</property>
  9.                 <property name="schemas"> test</property>
  10.                 <property name="readOnly">true</property>
  11.         </user>
注意:
1、這里配置的是可以連接主庫(kù)的兩個(gè)用戶
用戶:rep   密碼:oldboy 給予此用戶test數(shù)據(jù)庫(kù)增刪改查的權(quán)限。   
用戶:rep_r 密碼:oldboy 給予此用戶test數(shù)據(jù)庫(kù)讀的權(quán)限。  
2、這里的test,不一定是你數(shù)據(jù)庫(kù)上的真實(shí)庫(kù)名,可以任意指定,只要接下來和schema.xml的配置文件的庫(kù)名統(tǒng)一即可。

修改schema.xml文件

  1. [root@Linuxdemo3 conf]#  vim schema.xml
  2. <?xml version="1.0"?>
  3. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  4. <mycat:schema xmlns:mycat="http://org.opencloudb/">
  5.         <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  6.         </schema>
  7.         <dataNode name="dn1" dataHost="localhost1" database="test"/>
  8.         <dataNode name="dn2" dataHost="localhost1" database=" test "/>
  9.         <dataNode name="dn3" dataHost="localhost1" database=" test "/>
  10.         <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  11.                 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
  12.                 <heartbeat>select user()</heartbeat>
  13.                 <writeHost host="hostM1" url="10.0.0.202:3306" user="rep"
  14.                         password="oldboy">
  15.                 </writeHost>
  16.                  <readHost host="hostS1" url="10.0.0.202:3307" user="rep_r"
  17.                         password="oldboy"/>
  18.                  </readHost>
  19.                  </dataHost>             
  20. </mycat:schema>
(1)<schema name=”test” checkSQLschema=”false” sqlMaxLimit=”100″ dataNode=”dn1″>
這里的oldboy就是我們所宣稱的數(shù)據(jù)庫(kù)名稱,必須和server.xml中的用戶指定的數(shù)據(jù)庫(kù)名稱一致。添加一個(gè)dataNode=”dn1”,是指定了我們這個(gè)庫(kù)只有在dn1上,沒有分庫(kù)。
(2) <dataNode name=”dn1″ dataHost=”localhost1″ database=”test” />
這里只需要改database的名字,db1就是你真是的數(shù)據(jù)庫(kù)上的數(shù)據(jù)庫(kù)名,可根據(jù)自己的數(shù)據(jù)庫(kù)名稱修改。
(3) 
  1. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  2.                 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

需要配置的位置:

  1. balance="1"   writeType="0"   switchType="1"

balance

1、balance=0  不開啟讀寫分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的writehost了 .
2、balance=1  全部的readhost與stand by writeHost 參與select語句的負(fù)載均衡。簡(jiǎn)單的說,雙主雙從模式(M1àS1,M2àS2,并且M1和M2互為主備),正常情況下,M1,S1,S2都參與select語句的復(fù)雜均衡。
3、balance=2  所有讀操作都隨機(jī)的在readhost和writehost上分發(fā)

writeType 

負(fù)載均衡類型,目前的取值有3種:
1、writeType=”0″, 所有寫操作發(fā)送到配置的第一個(gè)writeHost。
2、writeType=”1″,所有寫操作都隨機(jī)的發(fā)送到配置的writeHost。
3、writeType=”2″,不執(zhí)行寫操作。

switchType 

1、switchType=-1 表示不自動(dòng)切換
2、switchType=1 默認(rèn)值,自動(dòng)切換
3、switchType=2 基于MySQL 主從同步的狀態(tài)決定是否切換
(4)
  1. <writeHost host="hostM1" url="10.0.0.202:3306" user="rep"
  2.                         password="oldboy">
  3.                         <!-- can have multi read hosts -->
  4.                 <readHost host="hostS1" url="10.0.0.202:3306" user="rep_r"
  5.                         password="oldboy"/>
注意:
這里配置的是讀寫服務(wù)器的IP地址和端口訪問,訪問的用戶名和密碼;而且一定要先在客戶端測(cè)試OK了以后在進(jìn)行配置。

啟動(dòng)Mycat

  1. [root@Linuxdemo3 conf]#/application/mycat/bin/mycat start
  2. StartingMycat-server...
  3. [root@Linuxdemo3 logs]#
出現(xiàn)這個(gè)界面表示mycat已經(jīng)成功啟動(dòng)了,如果出現(xiàn)錯(cuò)誤的話請(qǐng)查看日志wrapper.log
 讀寫分離測(cè)試1、在客戶端連接mysql主庫(kù)服務(wù)器:
  1. mysql -urep -poldboy -h10.0.0.202 -P8066
  2. mysql> explain create table company(id int not null primary key,name varchar(100));
  3. +-----------+---------------------------------------------------------------------+
  4. | DATA_NODE | SQL                                                                 |
  5. +-----------+---------------------------------------------------------------------+
  6. | dn1       | create table company(id int not null primary key,name varchar(100)) |
  7. | dn2       | create table company(id int not null primary key,name varchar(100)) |
  8. | dn3       | create table company(id int not null primary key,name varchar(100)) |
  9. +-----------+---------------------------------------------------------------------+
  10. 3 rows in set (0.06 sec)
  11.  
  12. mysql> create table company(id int not null primary key,name varchar(100));
  13. Query OK, 0 rows affected (1.82 sec)
  14.  
  15. mysql> explain insert into company(id, name) values (100, 'abc');
  16. +-----------+---------------------------------------------------+
  17. | DATA_NODE | SQL                                               |
  18. +-----------+---------------------------------------------------+
  19. | dn1       | insert into company(id, name) values (100, 'abc') |
  20. | dn2       | insert into company(id, name) values (100, 'abc') |
  21. | dn3       | insert into company(id, name) values (100, 'abc') |
  22. +-----------+---------------------------------------------------+
  23. 3 rows in set (0.00 sec)
  24.  
  25. mysql> insert into company(id, name) values (100, 'abc');
  26. Query OK, 1 row affected (0.24 sec)

查看日志

日志中有如下信息

分別在主從庫(kù)中執(zhí)行以下命令:

  1. mysql> select * from company where id =100;
  2. +-----+------+
  3. | id  | name |
  4. +-----+------+
  5. |100| abc  |
  6. +-----+------+
  7. 1 row in set(0.00 sec)
日志中有如下
在從庫(kù)中執(zhí)行insert命令會(huì)得到以下錯(cuò)誤:
  1. mysql> insert into company(id, name) values (4,'abcwq');        
  2. ERROR 1495(HY000):User readonly
  3. #從庫(kù)只讀
從上面的測(cè)試中可以看出來,向數(shù)據(jù)庫(kù)中讀寫數(shù)據(jù),走的是不同的數(shù)據(jù)庫(kù),證明,讀寫分離測(cè)試成功!

主從切換測(cè)試

將schema.xml文件做如下修改:

  1. [root@Linuxdemo3 conf]#  vim schema.xml
  2. <?xml version="1.0"?>
  3. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  4. <mycat:schema xmlns:mycat="http://org.opencloudb/">
  5.         <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  6.         </schema>
  7.         <dataNode name="dn1" dataHost="localhost1" database="test"/>
  8.         <dataNode name="dn2" dataHost="localhost1" database=" test "/>
  9.         <dataNode name="dn3" dataHost="localhost1" database=" test "/>
  10.         <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  11.                 writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
  12.                 <heartbeat>show slave status</heartbeat>
  13.                 <writeHost host="hostM1" url="10.0.0.202:3306" user="rep"
  14.                         password="oldboy">
  15.                 </writeHost>
  16.                  <readHost host="hostS1" url="10.0.0.202:3307" user="rep_r"
  17.                         password="oldboy"/>
  18.                  </readHost>
  19. <writeHost host="hostM2" url="10.0.0.202:3307" user="rep"
  20.                         password="oldboy">
  21.                 </writeHost>
  22.                  </dataHost>             
  23. </mycat:schema>

重啟mycat服務(wù)

  1. [root@Linuxdemo2 conf]#/application/mycat/bin/mycat restart
  2. StoppingMycat-server...
  3. StoppedMycat-server.
  4. StartingMycat-server...
此時(shí),停止主庫(kù),再進(jìn)行測(cè)試,會(huì)發(fā)現(xiàn)mycat服務(wù)依然可以正常讀寫數(shù)據(jù)庫(kù)。mysql已切換到從庫(kù)。
  1. [root@Linuxdemo2 conf]#/data/3306/mysql stop

Mycat-Web

    MyCAT-WEB就是基于mycat的一個(gè)性能監(jiān)控工具,方便大家更有效的使用mycat管理mycat監(jiān)控mycat,讓大家的mycat工作更加高效。mycat-web的運(yùn)行依賴 zookpeer 所以事先要安裝好。 
    Zookeeper 作為一個(gè)分布式的服務(wù)框架,主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題, 它能提供基于類似于文件系統(tǒng)的目錄節(jié)點(diǎn)樹方式的數(shù)據(jù)存儲(chǔ),但是 Zookeeper 并不是用來專門存儲(chǔ)數(shù)據(jù)的,它的作用主要是用來維護(hù)和監(jiān)控你存儲(chǔ)的數(shù)據(jù)的狀態(tài)變化,通過監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,從而可以達(dá)到基于數(shù)據(jù)的集群管理。 
    ZooKeeper是一個(gè)開源的分布式的,為分布式應(yīng)用提供協(xié)調(diào)服務(wù)的Apache項(xiàng)目。ZooKeeper提供一個(gè)簡(jiǎn)單的原語集合,以便于分布式應(yīng)用可以在它之上構(gòu)建更高層次的同步服務(wù)。ZooKeeper的設(shè)計(jì)非常易于編程,它使用的是類似于文件系統(tǒng)那樣的樹形數(shù)據(jù)結(jié)構(gòu)。 

安裝zookpeer 

  1. wget  http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
  2. tar -xzvf  zookeeper-3.4.6.tar.gz 
  3. cd zookeeper-3.4.6/conf
  4. cp zoo_sample.cfg zoo.cfg 
  5. cd zookeeper-3.4.6/bin
  6. ./zkServer.sh start 
  7. 出現(xiàn)一下信息說明啟動(dòng)成功 
  8. JMX enabled by default 
  9. Using config:/usr1/zookeeper/bin/../conf/zoo.cfg 
  10. Starting zookeeper ... STARTED 

安裝mycat-web

  1. wget https://github.com/MyCATApache/Mycat-download/raw/master/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20160617163048-linux.tar.gz
  2. tar zxf Mycat-web-1.0-SNAPSHOT-20160617163048-linux.tar.gz
  3. cd mycat-web/mycat-web/WEB-INF/classes
  4. vim mycat.properties
  5. zookeeper=127.0.0.1:2181
  6. sqlonline.server=10.0.0.202
  7. cd mycat-web
  8. #將start.sh文件中的JVM調(diào)整到合適的大小
  9. ./start.sh &
  10. #8082端口是web端口
  11. 訪問10.0.0.202:8082/mycat即可進(jìn)入web頁(yè)面
配置Mycat(此步驟可省略)
  1. cd /application/mycat/bin
另外有四個(gè)相對(duì)重要的文件
        文件                                     用處
  1. /application/mycat/bin/xml_to_yaml.sh 根據(jù)mycat配置生成 zookeeper yaml 配置工具
  2. /application/mycat/bin/init_zk_data.sh 將生成的yaml配置文件導(dǎo)入遠(yuǎn)程zookeeper
  3. /application/mycat/conf/myid.properties zookeeper 路徑配置參數(shù)信息
  4. /application/mycat/conf/zk-create.yaml 自動(dòng)生成的zk配置
  5. 1)確認(rèn)安裝好zookeeper 環(huán)境 
  6. 2)啟動(dòng)mycat服務(wù),確認(rèn)本地服務(wù)一切正常。 
  7. 3)執(zhí)行xml_to_yaml.sh腳本(確認(rèn)本地配置過 JAVA_HOME 和 MYCAT_HOME環(huán)境變量,)
  8. [root@Linuxdemo3 bin]#./xml_to_yaml.sh
  9. 4)執(zhí)行 init_zk_data.sh 腳本,注意下默認(rèn)情況下腳本會(huì)將zookeeper定位在同一臺(tái)服務(wù)器上面,如有需要可以調(diào)整下 ZK 的 IP : PORT
  10. [root@Linuxdemo3 bin]#./init_zk_data.sh

管理命令與監(jiān)控

mycat自身有類似其他數(shù)據(jù)庫(kù)的管理監(jiān)控方式,可通過mysql命令行,登陸端口9066執(zhí)行相應(yīng)的SQL操作,也可通過jdbc的方式進(jìn)行遠(yuǎn)程連接管理。
  登錄: mycat有兩個(gè)端口,8066數(shù)據(jù)端口,9066管理端口。命令行登錄時(shí)通過9066管理端口來執(zhí)行:
  1. mysql -urep -poldboy  -h10.0.0.202-P9066 -Dtest   
選項(xiàng):
-h 后面接主機(jī)
-u mycat server.xml配置的邏輯庫(kù)用戶
-p mycat server.xml配置的邏輯庫(kù)密碼
-P 后面接的端口9066,注意P大寫
-D Mycat server.xml中配置的邏輯庫(kù)

1、查看所有的命令,如下:

  1. mysql> show @@help;
  2. +--------------------------------------+-----------------------------------+
  3. | STATEMENT                            | DESCRIPTION                       |
  4. +--------------------------------------+-----------------------------------+
  5. | clear @@slowwhere datanode =?      |Clear slow sql by datanode        |
  6. | clear @@slowwhere schema =?        |Clear slow sql by schema          |
  7. | kill @@connection id1,id2,...        |Kill the specified connections    |
  8. | offline                              |ChangeMyCat status to OFF        |
  9. | online                               |ChangeMyCat status to ON         |
  10. | reload @@config                      |Reload basic config from file     |
  11. | reload @@config_all                  |Reload all config from file       |
  12. | reload @@route                       |Reload route config from file     |
  13. | reload @@user                        |Reload user config from file      |
  14. | rollback @@config                    |Rollback all config from memory   |
  15. | rollback @@route                     |Rollback route config from memory |
  16. | rollback @@user                      |Rollback user config from memory  |
  17. | show @@backend                       |Report backend connection status  |
  18. | show @@cache                         |Report system cache usage         |
  19. | show @@command                       |Report commands status            |
  20. | show @@connection                    |Report connection status          |
  21. | show @@connection.sql                |Report connection sql             |
  22. | show @@database                      |Report databases                  |
  23. | show @@datanode                      |Report dataNodes                  |
  24. | show @@datanodewhere schema =?     |Report dataNodes                  |
  25. | show @@datasource                    |Report dataSources                |
  26. | show @@datasourcewhere dataNode =?|Report dataSources                |
  27. | show @@heartbeat                     |Report heartbeat status           |
  28. | show @@parser                        |Report parser status              |
  29. | show @@processor                     |Report processor status           |
  30. | show @@router                        |Report router status              |
  31. | show @@server                        |Report server status              |
  32. | show @@session                       |Report front session details      |
  33. | show @@slowwhere datanode =?       |Report datanode slow sql          |
  34. | show @@slowwhere schema =?         |Report schema slow sql            |
  35. | show @@sqlwhere id =?              |Report specify SQL                |
  36. | show @@sql.detail where id =?       |Report execute detail status      |
  37. | show @@sql.execute                   |Report execute status             |
  38. | show @@sql.slow                      |Report slow SQL                   |
  39. | show @@threadpool                    |Report threadPool status          |
  40. | show @@time.current                  |Report current timestamp          |
  41. | show @@time.startup                  |Report startup timestamp          |
  42. | show @@version                       |ReportMycatServer version       |
  43. | stop @@heartbeat name:time           |Pause dataNode heartbeat          |
  44. |switch@@datasource name:index       |Switch dataSource    

2、更新配置文件

  1. mysql> reload @@config;
  2. Query OK,1 row affected (0.13 sec)
  3. Reload config success

3、顯示mycat數(shù)據(jù)庫(kù)的列表,對(duì)應(yīng)的在scehma.xml配置的邏輯庫(kù)

  1. mysql> show @@database;
  2. +----------+
  3. | DATABASE |
  4. +----------+
  5. | oldboy   |
  6. +----------+
  7. 1 row in set(0.00 sec)

4、顯示mycat數(shù)據(jù)節(jié)點(diǎn)的列表,對(duì)應(yīng)的是scehma.xml配置文件的dataNode節(jié)點(diǎn)

  1. mysql> show @@datanode;
  2. +------+-------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
  3. | NAME | DATHOST           | INDEX | TYPE  | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
  4. +------+-------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
  5. | dn1  | localhost1/oldboy |     0| mysql |      0|   10|1000|     457|          0|        0|       0|            -1|
  6. | dn2  | localhost1/oldboy |     0| mysql |      0|   10|1000|     457|          0|        0|       0|            -1|
  7. | dn3  | localhost1/oldboy |     0| mysql |      0|   10|1000|     457|          0|        0|       0|            -1|
  8. +------+-------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
  9. 3 rows in set(0.00 sec)
其中,NAME表示datanode的名稱;dataHost 對(duì)應(yīng)的是dataHost屬性的值,數(shù)據(jù)主機(jī)的名稱,ACTIVE表示活躍的連接數(shù),IDIE表示閑置的連接數(shù),SIZE對(duì)應(yīng)的是總連接的數(shù)量。

5、報(bào)告心跳狀態(tài)

  1. mysql> show @@heartbeat;
  2. +--------+-------+-------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
  3. | NAME   | TYPE  | HOST        | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
  4. +--------+-------+-------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
  5. | hostM1 | mysql |10.0.0.202|3306|       1|     0| idle   |       0|1,1,1        |2015-12-2921:39:40|false|
  6. | hostS1 | mysql |10.0.0.202|3307|       1|     0| idle   |       0|3,3,3        |2015-12-2921:39:40|false|
  7. +--------+-------+-------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
  8. 2 rows in set(0.01 sec)
RS_STATUS狀態(tài)為1,正常狀態(tài)

6、獲取當(dāng)前mycat的版本

  1. mysql> show @@version;
  2. +--------------------------------------+
  3. | VERSION                              |
  4. +--------------------------------------+
  5. |5.5.8-mycat-1.4-alpha-20150520235658|
  6. +--------------------------------------+
  7. 1 row in set(0.00 sec)

7、顯示mycat前端連接狀態(tài)

  1. mysql> show @@connection;
  2. +------------+------+-----------+------+------------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
  3. | PROCESSOR  | ID   | HOST      | PORT | LOCAL_PORT | SCHEMA | CHARSET | NET_IN | NET_OUT | ALIVE_TIME(S)| RECV_BUFFER | SEND_QUEUE | txlevel | autocommit |
  4. +------------+------+-----------+------+------------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
  5. |Processor0|    6|127.0.0.1|9066|      46490| oldboy | utf8:33|    281|    6164|          1008|        4096|          0|         |            |
  6. +------------+------+-----------+------+------------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
  7. 1 row in set(0.00 sec)

8、顯示mycat后端連接狀態(tài)

  1. mysql> show @@backend;
  2. +------------+------+---------+-------------+------+--------+--------+---------+------+--------+----------+------------+--------+---------+---------+------------+
  3. | processor  | id   | mysqlId | host        | port | l_port | net_in | net_out | life | closed | borrowed | SEND_QUEUE | schema | charset | txlevel | autocommit |
  4. +------------+------+---------+-------------+------+--------+--------+---------+------+--------+----------+------------+--------+---------+---------+------------+
  5. |Processor0|    1|      30|10.0.0.202|3306|  14881|   3554|    1068|5041|false  |false    |          0| oldboy | utf8:33|3       |true       |
  6. |Processor0|    2|      32|10.0.0.202|3306|  14883|   3554|    1068|5041|false  |false    |          0| oldboy | utf8:33|3       |true       |
  7. |Processor0|    3|      24|10.0.0.202|3306|  14875|   3515|    1068|5041|false  |false    |          0| oldboy | utf8:33|3       |true       |
  8. |Processor0|    4|      28|10.0.0.202|3306|  14879|   3561|     986|5041|false  |false    |          0| oldboy | utf8:33|0       |true       |

9、顯示數(shù)據(jù)源

  1. mysql> show @@datasource;
  2. +----------+--------+-------+-------------+------+------+--------+------+------+---------+
  3. | DATANODE | NAME   | TYPE  | HOST        | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE |
  4. +----------+--------+-------+-------------+------+------+--------+------+------+---------+
  5. | dn1      | hostM1 | mysql |10.0.0.202|3306| W    |      0|   10|1000|     525|
  6. | dn1      | hostS1 | mysql |10.0.0.202|3306| R    |      0|    8|1000|     522|
  7. | dn3      | hostM1 | mysql |10.0.0.202|3306| W    |      0|   10|1000|     525|
  8. | dn3      | hostS1 | mysql |10.0.0.202|3306| R    |      0|    8|1000|     522|
  9. | dn2      | hostM1 | mysql |10.0.0.202|3306| W    |      0|   10|1000|     525|
  10. | dn2      | hostS1 | mysql |10.0.0.202|3306| R    |      0|    8|1000|     522|
  11. +----------+--------+-------+-------------+------+------+--------+------+------+---------+
  12. 6 rows in set(0.01 sec)
特別說明:
reload @@config,這個(gè)命令在執(zhí)行的時(shí)候,mycat服務(wù)不可用,防止提交的事物出錯(cuò)。
筆者QQ:604419314  喜歡筆者可以收藏本網(wǎng)站
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Mycat全局表如何配置?mysql數(shù)據(jù)庫(kù)學(xué)習(xí)
關(guān)系型數(shù)據(jù)的分布式處理系統(tǒng)MyCAT(1)
開源數(shù)據(jù)庫(kù)中間件
手摸手教你你用數(shù)據(jù)庫(kù)中間件Mycat SpringBoot完成分庫(kù)分表
MyCat
一文看懂mycat配置--數(shù)據(jù)庫(kù)的讀寫分離、分表分庫(kù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服