分布式數據庫架構及企業實踐——基于Mycat中間件( 簡體 字) | |
作者:周繼鋒等 | 類別:1. -> 程式設計 -> 綜合 |
出版社:電子工業出版社 | 3dWoo書號: 45627 詢問書籍請說出此書號! 有庫存 NT售價: 395 元 |
出版日:11/1/2016 | |
頁數:312 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121302879 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 1 章 數據庫中間件與分布式數據庫的實現........1
1.1 什么是分布式系統.............1 1.2 為什么需要分布式數據庫...........2 1.3 分布式數據庫的實現原理 .......... 3 1.4 Mycat 數據庫中間件簡介 ........... 5 1.4.1 Mycat 的歷史與未來規劃 .......... 5 1.4.2 Mycat 與其他中間件的區別 .......... 8 1.4.3 Mycat 的優勢 ............10 1.4.4 Mycat 的適用場合 ............11 第 2 章 Mycat 入門……………………………………………………………………………………………………..13 2.1 環境搭建 ..............13 2.1.1 Windows 環境搭建 ............13 2.1.2 Linux 環境搭建 ............ 15 2.2 Mycat 核心概念詳解 ............ 16 2.2.1 邏輯庫(schema) ........... 16 2.2.2 邏輯表(table) ............. 16 2.2.3 分片節點(dataNode) ........... 17 2.2.4 節點主機(dataHost) ........... 17 2.3 Mycat 原理介紹 ............ 18 2.4 參與 Mycat 源碼開發 ........... 19 2.4.1 Mycat 源碼環境搭建 ........... 19 2.4.2 Mycat 源碼調試 ............. 19 第 3 章 Mycat 進階 …………………………..22 3.1 Mycat 配置詳解 .............22 3.1.1 Mycat 支持的兩種配置方式 ..........22 3.1.2 server.xml 配置文件 ........... 23 3.1.3 schema.xml 配置文件 ........... 28 3.1.4 sequence 配置文件 ...........37 3.1.5 zk-create.yaml 配置文件 ........... 41 3.1.6 其他配置文件 ............. 44 3.2 Mycat 分片規則詳解 ........... 46 3.2.1 分片表與非分片表 ............ 46 3.2.2 ER 關系分片表 ............. 46 3.2.3 分片規則 rule.xml 文件詳解 ........... 46 3.2.4 取模分片 .............. 47 3.2.5 枚舉分片 .............48 3.2.6 范圍分片 .............. 49 3.2.7 范圍求模算法 .............49 3.2.8 固定分片 hash 算法 ........... 50 3.2.9 取模范圍算法 ............. 52 3.2.10 字符串 hash 求模范圍算法 ........... 53 3.2.11 應用指定的算法 ............. 54 3.2.12 字符串 hash 解析算法 ............ 54 3.2.13 一致性 hash 算法 ............ 55 3.2.14 按日期(天)分片算法 ............ 56 3.2.15 按單月小時算法 ............ 57 3.2.16 自然月分片算法 ............ 58 3.2.17 日期范圍 hash 算法 ............ 58 3.3 Mycat 管理命令詳解 ............ 59 3.3.1 Reload 命令 .............. 61 3.3.2 Show 命令 .............. 62 第 4 章 Mycat 高級技術實戰…………………………………….. 68 4.1 用 Mycat 搭建讀寫分離 ........... 68 4.1.1 MySQL 讀寫分離 ............ 69 4.1.2 MySQL Galera Cluster 讀寫分離 .......... 73 4.1.3 SQL Server 讀寫分離 ........... 83 4.2 Mycat 故障切換 ............. 86 4.2.1 Mycat 主從切換 .............86 4.2.2 MySQL Galera 節點切換 ............ 99 4.3 Mycat+Percona+HAProxy+Keepalived .......... 113 4.3.1 Mycat ............... 113 4.3.2 Percona 集群 ............. ……..124 4.3.3 HAProxy ............... 131 4.3.4 Keepalived ............. …..138 4.4 MHA+Keepalived 集群搭建 ............ 140 4.4.1 配置 MySQL 半同步方式 .......... ………..142 4.4.2 安裝配置 MHA ............. 150 4.4.3 測試重構 .............. 153 4.4.4 擴展 Keepalived ............. 155 4.5 用 ZooKeeper 搭建 Mycat 高可用集群 ........ 158 4.5.1 ZooKeeper 概述 ............. 158 4.5.2 ZooKeeper 的運用場景 ........... 161 4.5.3 ZooKeeper 在 Mycat 中的使用 ......... 163 4.6 Mycat 高可用配置 ............. 165 4.7 Mycat 注解技術 ..............170 4.7.1 balance 注解實戰 ............ 170 4.7.2 master/slave 注解實戰 ............ 172 4.7.3 SQL 注解實戰 .............. 173 4.7.4 schema 注解實戰 .............176 4.7.5 dataNode 注解實戰 ............. 176 4.7.6 catlet 注解實戰 ............ 177 第 5 章 Mycat 企業運維 ………………………….179 5.1 Mycat 性能監控——Mycat-web 詳解 ....... …………………………179 5.1.1 Mycat-web 簡介 ............ 179 5.1.2 Mycat-web 的配置和使用 .......... 180 5.1.3 Mycat 性能監控指標 ........... …..181 5.2 Mycat 性能優化 ............. 183 5.3 MySQL 優化技術 ............ 186 5.3.1 數據庫建表設計規范 ........... 186 5.3.2 SQL 語句與索引 ............ 195 5.3.3 配置文件 ............. 206 5.3.4 InnoDB 選擇文件系統 ............ 212 5.3.5 系統架構 .............. 213 第 6 章 Mycat 架構剖析……………………….. 215 6.1 Mycat 總體架構介紹 ............ 215 6.2 Mycat 網絡 I/O 架構與實現 ........... 218 6.2.1 Mycat I/O 架構概述 ............218 6.2.2 前端通信框架 .............221 6.3 Mycat 線程架構與實現 ............ 224 6.3.1 多線程基礎 ..............224 6.3.2 Mycat 線程架構 ............ 226 6.4 Mycat 內存管理及緩存架構與實現 ......... 228 6.4.1 Mycat 內存管理 ............ 229 6.4.2 Mycat 緩存架構與實現 ...........231 6.5 Mycat 連接池架構與實現 ............232 6.5.1 Mycat 連接池 ............. 232 6.5.2 Mycat 連接池架構及代碼實現 ……………………….234 6.6 Mycat 主從切換架構與實現 .......... 235 6.6.1 Mycat 主從切換概述 ........... 236 6.6.2 Mycat 主從切換的實現 ...........238 第 7 章 Mycat 核心技術分析 ………………………….241 7.1 Mycat 分布式事務的實現 ............ 241 7.1.1 XA 規范 ...............241 7.1.2 二階段提交 .............. 242 7.1.3 三階段提交 .............243 7.1.4 Mycat 中分布式事務的實現 .......... 244 7.2 Mycat SQL 路由的實現 ............ 249 7.2.1 路由的作用 .............. 249 7.2.2 SQL 解析器 ............. 250 7.2.3 路由計算 .............. 252 7.3 Mycat 跨庫 Join 的實現 ............ 260 7.3.1 全局表 .............. 261 7.3.2 ER 分片 ............... 262 7.3.3 catlet ............... 263 7.3.4 ShareJoin ............... 264 7.4 Mycat 數據匯聚和排序的實現 ........... 270 7.4.1 數據排序 .............. 270 7.4.2 數據匯聚 .............. 273 第 8 章 Mycat多數據庫支持原理與實現 ……………………..275 8.1 MySQL 協議在 Mycat 中的實現 ......... 275 8.1.1 MySQL 協議概述 ............. 275 8.1.2 Mycat 的 MySQL 協議實現 ........... 283 8.2 PostgreSQL 協議在 Mycat 中的實現 ......... 287 8.2.1 PostgreSQL 介紹 ............ 287 8.2.2 PostgreSQL 協議 ............ 288 8.2.3 PostgreSQL 實現 ............ 293 8.3 Mycat 對 JDBC 支持的實現 ........... 298 8.3.1 Oracle 配置 ............. 299 8.3.2 SQL Server 配置 ............ 300 8.3.3 MongoDB 配置 ............. 301 8.3.4 源碼分析 .............. 306 互聯網的蓬勃發展,業務驅動技術不斷升級,在系統越來越龐大,技術越來越復雜,應用部署集群化,所有壓力全部指向數據庫,數據量巨大,數據庫優化也到極限了,數據庫的運維難以為繼,在這種情況下,分布式數據庫似乎成為唯一的解決方案。為了解決傳統數據庫的分布式化這個技術難題,各種數據庫中間件應運而生,從早期的Amoeba、TDDL、Cobar,到如今的Mycat,技術日新月異,發展迅猛。Mycat已經成為了一個強大的開源分布式數據庫中間件產品。面對企業應用的海量數據事務處理,是目前最好的開源解決方案。支持多種數據庫,開發活躍,已有數百個項目使用,預期Mycat的采用將有爆發式增長趨勢。所以Mycat開源社區核心開發者共同撰寫了本書,幫助企業更好的使用Mycat中間件架構企業分布式數據庫系統。
推薦序1
隨著大數據時代的到來,海量數據存儲、并行計算、異構數據互聯等一系列新技術在市場上不斷地涌現。相信數據庫行業的很多從業者都對傳統關系型數據庫的單點故障及容量問題頭疼不已,而“分庫分表”也早已成為解決這類問題的基礎,此時,Mycat應運而生。 Mycat是一款面向企業級應用的開源數據庫中間件產品,它目前支持數據庫集群、分布式事務與ACID,被普遍視為基于MySQL技術的集群分布式數據庫解決方案,在一些互聯網、金融、運營商客戶中用來替代昂貴的Oracle。 Mycat不僅可以輕松對接MySQL、SQL Server等傳統關系型數據庫,也融合了內存緩存、NoSQL、HDFS等新興大數據技術,是一款非常優秀的數據庫中間件。 在如今的大數據時代,分布式架構已經成為企業級數據應用的標配,傳統的關系型數據庫產品已經面臨一個真正的拐點:一方面,關系型數據庫自身難以實現分布式,這大大限制了其數據存儲能力及整體的性能表現;另一方面,商業化的傳統數據庫產品的成本和性價比在分布式架構崛起的狀況下毫無優勢可言。因此,無論是從底層全新實現分布式計算存儲的NoSQL、Hadoop,還是使用Mycat這樣的分庫分表工具,對關系型數據庫大刀闊斧地進行“改裝”都是大勢所趨。 作為一名專注于數據庫領域多年的從業者,我認為Mycat從中間件工具的角度成功地彌補了MySQL的諸多局限。 ? 分布式存儲:通過Mycat,MySQL可以實現集群化與分布式管理,使數據庫容量與處理能力大大改善。 ? 性能加速:通過分布式集群及Mycat Booster對MySQL數據庫在集群環境下的加速,Mycat大大提升了MySQL集群的性能。 ? 異構數據互聯互通:除了MySQL,Mycat同時支持如SequoiaDB、MongoDB這樣的NoSQL數據庫及HDFS分布式文件系統,實現了對非結構化數據、半結構化數據及結構化數據的存儲及互聯。 ? 多樣化的數據庫工具:Mycat為用戶提供了豐富的管理工具,可以幫助用戶更好地管理數據庫系統。 本書非常適合作為Mycat的入門及進階參考讀物,它非常全面地闡述了分庫分表的基本原理、實現機制及實踐經驗。本書的作者有著豐富的行業經驗及技術底蘊,能夠把業界非常前沿的知識用深入淺出的語言傳授給各位讀者。 最后,作為SequoiaDB的聯合創始人,我十分欽佩Mycat團隊的技術及勇氣。雖然基礎軟件的開發難度很大,但是我們都敢于去挑戰一個個技術難點,并填補國內基礎軟件產品的巨大空白。因此,我在這里衷心地祝愿Mycat前程似錦! 巨杉數據庫聯合創始人 王濤 推薦序2 隨著分布式系統的發展,應用的分布式由于無狀態的特性,可以利用消息機制相對簡單地進行拆分,計算的分布式也可以通過Map、Reduce等相關算法來解決。但是隨著業務壓力和并發壓力的增加,我們急需一種分布式數據庫解決方案來支持數據庫的水平擴展,通過簡單地增加服務器及線性地提升數據庫的并發訪問能力,為闖過分布式系統的最后一道難關鋪平道路。 從阿里巴巴的Cobar到開源社區的Mycat,從Cobar的架構師賀賢懋、朱海清、邱碩到Mycat的核心人員南哥、冰風影,作為一名專注于MySQL數據庫十多年的從業者,我見證了分布式數據庫的從無到有到百花齊放,在收到本書的序言邀請時,我感到非常榮幸。 現在的分布式數據庫產品越來越多。YouTube公司提供的Vitness功能強大,在YouTube的生產環境下支撐了大量的業務訪問;360公司的Altas基于MySQL Proxy開發而成,最初主要在應用層進行透明的讀寫分離,于2013年引入了分庫分表;陳菲在離開360公司后在WPS云平臺用Go語言編寫了Kingshard;樓方鑫(黃忠)在離開支付寶后編寫了OneProxy;騰訊互娛的DBA團隊基于Spider打造了自己的分布式數據庫平臺;淘寶在內部將TDDL的客戶端工具作為了分庫分表中間件;阿里巴巴的B2B開源了支撐其內部業務生產環境3年的Cobar,為開源社區提供了一大助力;而基于Cobar開發的Mycat及其各種分支由于其易用性,將分布式數據庫進一步推廣到互聯網和傳統行業的各個業務領域。 Mycat無疑是這些中間件中的佼佼者,支持百億級別的數據分片和并行計算,支持高可用和MySQL的讀寫分離,并隨著版本的更新進一步支持Oracle、DB2、MongoDB等后端數據庫,隨著周邊產品的進一步成熟,在越來越多的分布式或者非分布式(僅用它的讀寫分離或者高可用)生產環境中得到部署,受到越來越多的企業的關注。本書恰逢其會,由Mycat核心開發人員撰寫而成,詳細講述了Mycat的由來、架構特點、核心模塊、實際使用案例和企業實踐,是一本不可多得的好書。 沃趣科技MySQL負責人 李春 推薦序3 作為國產開源數據庫中間件—Mycat的發起者,我不得不為本書作序。 這是一本由眾多技術精英合著的數據庫+中間件領域的專業書籍,這些人包括Mycat Commiter、Mycat志愿者及資深DBA,大家在工作之余抽出大量時間來編寫和完善此書,歷經一年完成了本書的編寫工作,實屬不易。 數據庫中間件是新興的重要的互聯網中間件,目前業界仍然缺乏一本系統性介紹相關領域的軟件產品、常用技術、架構等的紙質書籍。本書圍繞Mycat開源中間件,從基礎入門到架構原理,從運行機制到源碼實現,從系統運維到應用實踐,講解得詳盡而又完善。本書內容豐富、圖文并茂、由淺入深,對數據庫中間件的基本原理闡述清晰,對程序源碼分析透徹,對實踐經驗講解深刻。 從內容上講,本書從一個使用者的角度去理解、分析和解決問題,通過大量的實例操作和源碼解析,幫助讀者深入理解Mycat的各種概念。讀者對其中的案例只要稍做修改,再結合實際的業務需求,就可以在正在開發的項目中應用,達到事半功倍的效果。并且,通過學習書中應用實戰方面的內容,不僅可以直接提高開發技能,還可以解決在實踐過程中經常遇到的各種關鍵問題。另外,本書中的所有觀點和經驗均是作者們在多年建設、維護大型應用系統的過程中積累形成的,非常值得借鑒和推廣。 希望Mycat在大家的支持下走得更遠,成為中國軟件的驕傲。 Leader-us 前言 隨著移動互聯網的興起和大數據的蓬勃發展,系統的數據量正呈幾何倍數增長,系統的壓力也越來越大,這時最容易出現的問題就是服務器繁忙,我們可以通過增加服務器及改造系統來緩解壓力,然后采用負載均衡、動靜分離、緩存系統來提高系統的吞吐量。然而,當數據量的增長達到一定程度的時候,增加應用服務器并不能明顯地提高系統的效率,因為所有壓力都會傳導到數據庫層面,而大多數系統都是用一個數據庫來存儲和管理系統數據的。這時,Mycat應運而生。 談到Mycat就不得不談談Cobar,Cobar是阿里巴巴開源的數據庫中間件,由于其存在使用限制及一些比較嚴重的問題,Leader-us在其基礎上于2013年年底實現了Mycat 1.0版本,Mycat一經發布便引起了很多人的關注。之后Mycat社區對Cobar的代碼進行了徹底重構,使用NIO重構了網絡模塊,并且優化了Buffer內核,增強了聚合、Join等基本特性,同時兼容了絕大多數數據庫,使之成為通用的數據庫中間件。Mycat在1.4版本以后完全脫離了Cobar內核,同時采用了Mycat集群管理、自動擴容及智能優化,成為了高性能的數據庫中間件。Mycat從誕生至今已有三年多了,一直在堅持做最好的開源數據庫中間件產品。 本書總計8章,涵蓋了Mycat入門、進階、高級技術實戰、企業運維、架構剖析、核心技術分析、多數據庫支持原理與實現等內容,內容詳盡、圖文并茂,幾乎囊括了Mycat所涉及的方方面面,無論是對于軟件工程師、測試工程師、運維工程師、軟件架構師、技術經理,還是對于資深IT人士來說,本書都極具參考價值。 第1章:介紹了分布式系統和分布式數據庫系統的原理,介紹Mycat的起源和發展狀況,并對各種數據庫中間件做了簡要介紹和對比。 第2章:講解了Mycat的入門知識,介紹了Mycat的安裝環境、核心概念和分庫分表的原理,以及Mycat源碼開發調試的過程。 第3章:講解了Mycat的進階知識,主要介紹Mycat的各種配置和分片算法。 第4章:講解了Mycat和MySQL實戰案例,由擁有豐富的Mycat線上實戰經驗的專家和DBA共同編寫而成,有很高的參考價值。 第5章:簡要介紹了用于Mycat性能監控的工具—Mycat-web,詳細講解了Mycat和MySQL的優化技術,是DBA的親身總結和經驗之談。 第6章:重點闡述了Mycat的架構,包括網絡、線程、連接池、內存管理及緩存實現等,是了解Mycat框架的基礎。 第7章:介紹了Mycat的核心技術,包括分布式事務的實現、跨庫Join的三種實現方式等,介紹了多節點數據匯聚和排序的原理,并詳細闡述了在Mycat 1.6版本中實現的一致性分布式事務的功能。 第8章:介紹了MySQL和PostgreSQL的通信協議及Mycat對這些通信協議的實現,然后介紹了Mycat對JDBC及多種數據庫的支持,例如Oracle、SQL Server、MongoDB等。 本書的編寫和校對歷經一年,參與編寫的作者都是Mycat開源項目中參與度比較高、提交過不少代碼或有豐富的實戰經驗的資深人士。非常感謝參與本書編寫、指導或校對的專家:Leader-us、南哥(曹宗南)、從零開始(宋偉)、小張哥(張超)、yuanfang(楊鵬飛)、頑石神(張治春)、冰麒麟(楊峰)、望舒(胡雅輝)、明明Ben(朱阿明)、零(章愛國)、little-pan(潘自朋)、CrazyPig(陳建欣)、毛茸茸的邏輯(王成瑞)、海王星(林志強)、石頭獅子(林晁)、HanSenJ(姬文剛)、武(王燈武)、戰狼(劉胡波)、KK(劉軍)、董海雄(易班網)、arx(李秋偉)、正能量(王金劍)、吉光(李偉)。 由于作者的寫作水平有限,書中難免會有不妥或者疏漏之處,歡迎讀者批評指正。 冰風影 Mycat社區負責人 2016年11月6日于廣州番禺 |