编辑推荐

讲解分布式数据库的书并不多,讲解其架构及企业实践的就更少了。

分布式数据库架构及企业实践:基于Mycat中间件》基于国内知名的开源分布式数据库中间件Mycat讲解了如何实现分布式数据库,很有实践及借鉴意义。

内容简介

《分布式数据库架构及企业实践——基于Mycat中间件》由资深Mycat专家及一线架构师、DBA编写而成。《分布式数据库架构及企业实践:基于Mycat中间件》总计8章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用Mycat实现分布式数据库而展开。《分布式数据库架构及企业实践——基于Mycat中间件》对Mycat从入门到进阶、从高级技术实践到架构剖析、从网络通信协议解析到系统工作原理的方方面面进行了详细讲解,并剖析了Mycat的SQL路由、跨库联合查询、分布式事务及原生MySQL、PostgreSQL协议等核心技术。通过《分布式数据库架构及企业实践:基于Mycat中间件》不仅可以了解Mycat的基本概念,掌握Mycat配置等技术,还能感受到Mycat的架构设计之美,了解Mycat2.0的未来规划。

无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理,还是对于资深IT人士来说,《分布式数据库架构及企业实践——基于Mycat中间件》都极具参考价值。

作者简介

——周继锋

拥有十多年大型项目架构设计及实战经验,曾主导过众多分布式系统、微服务及大数据项目。在高并发、高可用、高可扩展性、高可维护性等领域拥有丰富的经验,对Hadoop、Spark源码进行过深度分析并具有丰富的实战经验。曾在ERP、医学、互联网行业担任资深工程师、资深架构师、技术总监等职务,为炼数成金高级讲师及国内知名的开源分布式数据库中间件Mycat的负责人。

——冯钻优

多年来致力于分布式系统架构、分布式数据库、大数据技术的研究,在高并发、高可用的分布式系统设计和大数据处理方面有着丰富的经验。曾担任架构师、开发经理、技术经理等职位,主导过大型分布式系统、大数据分析项目的开发及实施落地,属于理论兼实践型架构师,现于某大型央企担任高级架构师、高级经理,为国内知名的开源分布式数据库中间件Mycat的高级顾问。

——陈胜尊

拥有多年编程经验,专注于电信运营商大数据项目的设计及开发,擅长Hadoop生态圈的大数据分析技术、分布式架构设计、高并发架构设计、MySQL优化,曾主导众多大数据项目的架构设计。为国内知名的开源分布式数据库中间件Mycat的活跃开发者。

——左越宗

拥有多年数据库管理经验,维护过超过500台以上的数据库实例,精通NoSQL集群维护与优化、异构数据迁移、关系型数据库集群设计、分布式架构设计、SQL优化及数据库软件性能优化等,曾在互联网金融、在线教育、游戏行业担任高级MySQLDBA、数据库集群工程师、数据库专家等职位。为尚观科技高级讲师及国内知名的开源分布式数据库中间件Mycat的高级顾问。

精彩书评

Mycat是一款强大的数据库中间件,是当下热门的移动互联网和云计算项目的必备基础中间件之一,不仅可以用于读写分离、分表分库及容灾备份,还可以用于多租户应用开发及云平台基础设施建设,让架构本身具备很强的适应性和灵活性。《分布式数据库架构及企业实践:基于Mycat中间件》作者均拥有多年软件研发经验,是国内知名开源分布式数据库中间件Mycat的核心成员,其中冰风影是Dataguru的高级特约讲师。《分布式数据库架构及企业实践:基于Mycat中间件》兼具实用性和独特性,非常值得入手一读。

——黄志洪ITPUB社区炼数成金社区创始人

MySQL在分布式领域的短板造就了数据库中间件的繁荣,而在数据库中间件产品中,Mycat以其独特的设计理念风靡于数据库行业,成为开源数据库中间件的理想选择,成为DBA从业人员急需掌握的技能。相信Mycat会成为你的好伙伴!

——张见蓬尚观科技执行董事

Mycat是一款非常优秀的数据库中间件,华泰证券在互联网架构转型的过程中与Mycat社区合作紧密,采用分布式数据库解决了以往的难题。非常感谢Mycat这样的优秀国产开源软件,祝愿Mycat越做越好!

——樊建华泰证券平台架构总监

对于飞速发展的企业IT系统来说,数据库的开源和分布式一直是有挑战性的课题,而大部分企业IT团队的基础软件研发资源和时间相对有限,Mycat是开源分布式数据库架构中经济而有效的可选推荐方案之一。

——周辉顺丰科技数据中心副总监

在当今发展迅猛的DT时代,如何真正收集、存储、管理和利用海量交易数据,成了企业及企业信息化提供商共同面对的难题,我在《分布式数据库架构及企业实践:基于Mycat中间件》中找到了有效可行的方法,《分布式数据库架构及企业实践:基于Mycat中间件》同样可以成为你攻克难题的利器!

——陈柏宇上海恰为思信息科技有限公司创始人

目录

第1章数据库中间件与分布式数据库的实现1

1.1什么是分布式系统1

1.2为什么需要分布式数据库2

1.3分布式数据库的实现原理3

1.4Mycat数据库中间件简介5

1.4.1Mycat的历史与未来规划5

1.4.2Mycat与其他中间件的区别8

1.4.3Mycat的优势10

1.4.4Mycat的适用场合11

第2章Mycat入门13

2.1环境搭建13

2.1.1Windows环境搭建13

2.1.2Linux环境搭建15

2.2Mycat核心概念详解16

2.2.1逻辑库(schema)16

2.2.2逻辑表(table)16

2.2.3分片节点(dataNode)17

2.2.4节点主机(dataHost)17

2.3Mycat原理介绍18

2.4参与Mycat源码开发19

2.4.1Mycat源码环境搭建19

2.4.2Mycat源码调试19

第3章Mycat进阶22

3.1Mycat配置详解22

3.1.1Mycat支持的两种配置方式22

3.1.2server.xml配置文件23

3.1.3schema.xml配置文件28

3.1.4sequence配置文件37

3.1.5zk-create.yaml配置文件41

3.1.6其他配置文件44

3.2Mycat分片规则详解46

3.2.1分片表与非分片表46

3.2.2ER关系分片表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.3Mycat管理命令详解59

3.3.1Reload命令61

3.3.2Show命令62

第4章Mycat高级技术实战68

4.1用Mycat搭建读写分离68

4.1.1MySQL读写分离69

4.1.2MySQLGaleraCluster读写分离73

4.1.3SQLServer读写分离83

4.2Mycat故障切换86

4.2.1Mycat主从切换86

4.2.2MySQLGalera节点切换99

4.3Mycat+Percona+HAProxy+Keepalived113

4.3.1Mycat113

4.3.2Percona集群124

4.3.3HAProxy131

4.3.4Keepalived138

4.4MHA+Keepalived集群搭建140

4.4.1配置MySQL半同步方式142

4.4.2安装配置MHA150

4.4.3测试重构153

4.4.4扩展Keepalived155

4.5用ZooKeeper搭建Mycat高可用集群158

4.5.1ZooKeeper概述158

4.5.2ZooKeeper的运用场景161

4.5.3ZooKeeper在Mycat中的使用163

4.6Mycat高可用配置165

4.7Mycat注解技术170

4.7.1balance注解实战170

4.7.2master/slave注解实战172

4.7.3SQL注解实战173

4.7.4schema注解实战176

4.7.5dataNode注解实战176

4.7.6catlet注解实战177

第5章Mycat企业运维179

5.1Mycat性能监控——Mycat-web详解179

5.1.1Mycat-web简介179

5.1.2Mycat-web的配置和使用180

5.1.3Mycat性能监控指标181

5.2Mycat性能优化183

5.3MySQL优化技术186

5.3.1数据库建表设计规范186

5.3.2SQL语句与索引195

5.3.3配置文件206

5.3.4InnoDB选择文件系统212

5.3.5系统架构213

第6章Mycat架构剖析215

6.1Mycat总体架构介绍215

6.2Mycat网络I/O架构与实现218

6.2.1MycatI/O架构概述218

6.2.2前端通信框架221

6.3Mycat线程架构与实现224

6.3.1多线程基础224

6.3.2Mycat线程架构226

6.4Mycat内存管理及缓存架构与实现228

6.4.1Mycat内存管理229

6.4.2Mycat缓存架构与实现231

6.5Mycat连接池架构与实现232

6.5.1Mycat连接池232

6.5.2Mycat连接池架构及代码实现234

6.6Mycat主从切换架构与实现235

6.6.1Mycat主从切换概述236

6.6.2Mycat主从切换的实现238

第7章Mycat核心技术分析241

7.1Mycat分布式事务的实现241

7.1.1XA规范241

7.1.2二阶段提交242

7.1.3三阶段提交243

7.1.4Mycat中分布式事务的实现244

7.2MycatSQL路由的实现249

7.2.1路由的作用249

7.2.2SQL解析器250

7.2.3路由计算252

7.3Mycat跨库Join的实现260

7.3.1全局表261

7.3.2ER分片262

7.3.3catlet263

7.3.4ShareJoin264

7.4Mycat数据汇聚和排序的实现270

7.4.1数据排序270

7.4.2数据汇聚273

第8章Mycat多数据库支持原理与实现275

8.1MySQL协议在Mycat中的实现275

8.1.1MySQL协议概述275

8.1.2Mycat的MySQL协议实现283

8.2PostgreSQL协议在Mycat中的实现287

8.2.1PostgreSQL介绍287

8.2.2PostgreSQL协议288

8.2.3PostgreSQL实现293

8.3Mycat对JDBC支持的实现298

8.3.1Oracle配置299

8.3.2SQLServer配置300

8.3.3MongoDB配置301

8.3.4源码分析306

前言/序言

推荐序1

随着大数据时代的到来,海量数据存储、并行计算、异构数据互联等一系列新技术在市场上不断地涌现。相信数据库行业的很多从业者都对传统关系型数据库的单点故障及容量问题头疼不已,而“分库分表”也早已成为解决这类问题的基础,此时,Mycat应运而生。Mycat是一款面向企业级应用的开源数据库中间件产品,它目前支持数据库集群、分布式事务与ACID,被普遍视为基于MySQL技术的集群分布式数据库解决方案,在一些互联网、金融、运营商客户中用来替代昂贵的Oracle。

Mycat不仅可以轻松对接MySQL、SQLServer等传统关系型数据库,也融合了内存缓存、NoSQL、HDFS等新兴大数据技术,是一款非常优秀的数据库中间件。

在如今的大数据时代,分布式架构已经成为企业级数据应用的标配,传统的关系型数据库产品已经面临一个真正的拐点:一方面,关系型数据库自身难以实现分布式,这大大限制了其数据存储能力及整体的性能表现;另一方面,商业化的传统数据库产品的成本和性价比在分布式架构崛起的状况下毫无优势可言。因此,无论是从底层全新实现分布式计算存储的NoSQL、Hadoop,还是使用Mycat这样的分库分表工具,对关系型数据库大刀阔斧地进行“改装”都是大势所趋。

作为一名专注于数据库领域多年的从业者,我认为Mycat从中间件工具的角度成功地弥补了MySQL的诸多局限。

?分布式存储:通过Mycat,MySQL可以实现集群化与分布式管理,使数据库容量与处理能力大大改善。

?性能加速:通过分布式集群及MycatBooster对MySQL数据库在集群环境下的加速,Mycat大大提升了MySQL集群的性能。

?异构数据互联互通:除了MySQL,Mycat同时支持如SequoiaDB、MongoDB这样的NoSQL数据库及HDFS分布式文件系统,实现了对非结构化数据、半结构化数据及结构化数据的存储及互联。

?多样化的数据库工具:Mycat为用户提供了丰富的管理工具,可以帮助用户更好地管理数据库系统。

分布式数据库架构及企业实践:基于Mycat中间件》非常适合作为Mycat的入门及进阶参考读物,它非常全面地阐述了分库分表的基本原理、实现机制及实践经验。《分布式数据库架构及企业实践:基于Mycat中间件》的作者有着丰富的行业经验及技术底蕴,能够把业界非常前沿的知识用深入浅出的语言传授给各位读者。

最后,作为SequoiaDB的联合创始人,我十分钦佩Mycat团队的技术及勇气。虽然基础软件的开发难度很大,但是我们都敢于去挑战一个个技术难点,并填补国内基础软件产品的巨大空白。因此,我在这里衷心地祝愿Mycat前程似锦!

——巨杉数据库联合创始人王涛

推荐序2

随着分布式系统的发展,应用的分布式由于无状态的特性,可以利用消息机制相对简单地进行拆分,计算的分布式也可以通过Map、Reduce等相关算法来解决。但是随着业务压力和并发压力的增加,我们急需一种分布式数据库解决方案来支持数据库的水平扩展,通过简单地增加服务器及线性地提升数据库的并发访问能力,为闯过分布式系统的最后一道难关铺平道路。

从阿里巴巴的Cobar到开源社区的Mycat,从Cobar的架构师贺贤懋、朱海清、邱硕到Mycat的核心人员南哥、冰风影,作为一名专注于MySQL数据库十多年的从业者,我见证了分布式数据库的从无到有到百花齐放,在收到《分布式数据库架构及企业实践:基于Mycat中间件》的序言邀请时,我感到非常荣幸。

现在的分布式数据库产品越来越多。YouTube公司提供的Vitness功能强大,在YouTube的生产环境下支撑了大量的业务访问;360公司的Altas基于MySQLProxy开发而成,最初主要在应用层进行透明的读写分离,于2013年引入了分库分表;陈菲在离开360公司后在WPS云平台用Go语言编写了Kingshard;楼方鑫(黄忠)在离开支付宝后编写了OneProxy;腾讯互娱的DBA团队基于Spider打造了自己的分布式数据库平台;淘宝在内部将TDDL的客户端工具作为了分库分表中间件;阿里巴巴的B2B开源了支撑其内部业务生产环境3年的Cobar,为开源社区提供了一大助力;而基于Cobar开发的Mycat及其各种分支由于其易用性,将分布式数据库进一步推广到互联网和传统行业的各个业务领域。

Mycat无疑是这些中间件中的佼佼者,支持百亿级别的数据分片和并行计算,支持高可用和MySQL的读写分离,并随着版本的更新进一步支持Oracle、DB2、MongoDB等后端数据库,随着周边产品的进一步成熟,在越来越多的分布式或者非分布式(仅用它的读写分离或者高可用)生产环境中得到部署,受到越来越多的企业的关注。《分布式数据库架构及企业实践:基于Mycat中间件》恰逢其会,由Mycat核心开发人员撰写而成,详细讲述了Mycat的由来、架构特点、核心模块、实际使用案例和企业实践,是一本不可多得的好书。

——沃趣科技MySQL负责人李春

推荐序3

作为国产开源数据库中间件—Mycat的发起者,我不得不为《分布式数据库架构及企业实践:基于Mycat中间件》作序。

这是一本由众多技术精英合著的数据库+中间件领域的专业书籍,这些人包括MycatCommiter、Mycat志愿者及资深DBA,大家在工作之余抽出大量时间来编写和完善此书,历经一年完成了《分布式数据库架构及企业实践:基于Mycat中间件》的编写工作,实属不易。

数据库中间件是新兴的重要的互联网中间件,目前业界仍然缺乏一本系统性介绍相关领域的软件产品、常用技术、架构等的纸质书籍。《分布式数据库架构及企业实践:基于Mycat中间件》围绕Mycat开源中间件,从基础入门到架构原理,从运行机制到源码实现,从系统运维到应用实践,讲解得详尽而又完善。《分布式数据库架构及企业实践:基于Mycat中间件》内容丰富、图文并茂、由浅入深,对数据库中间件的基本原理阐述清晰,对程序源码分析透彻,对实践经验讲解深刻。

从内容上讲,《分布式数据库架构及企业实践:基于Mycat中间件》从一个使用者的角度去理解、分析和解决问题,通过大量的实例操作和源码解析,帮助读者深入理解Mycat的各种概念。读者对其中的案例只要稍做修改,再结合实际的业务需求,就可以在正在开发的项目中应用,达到事半功倍的效果。并且,通过学习书中应用实战方面的内容,不仅可以直接提高开发技能,还可以解决在实践过程中经常遇到的各种关键问题。另外,《分布式数据库架构及企业实践:基于Mycat中间件》中的所有观点和经验均是作者们在多年建设、维护大型应用系统的过程中积累形成的,非常值得借鉴和推广。

希望Mycat在大家的支持下走得更远,成为中国软件的骄傲。

——Leader-us

前言

随着移动互联网的兴起和大数据的蓬勃发展,系统的数据量正呈几何倍数增长,系统的压力也越来越大,这时最容易出现的问题就是服务器繁忙,我们可以通过增加服务器及改造系统来缓解压力,然后采用负载均衡、动静分离、缓存系统来提高系统的吞吐量。然而,当数据量的增长达到一定程度的时候,增加应用服务器并不能明显地提高系统的效率,因为所有压力都会传导到数据库层面,而大多数系统都是用一个数据库来存储和管理系统数据的。这时,Mycat应运而生。

谈到Mycat就不得不谈谈Cobar,Cobar是阿里巴巴开源的数据库中间件,由于其存在使用限制及一些比较严重的问题,Leader-us在其基础上于2013年年底实现了Mycat1.0版本,Mycat一经发布便引起了很多人的关注。之后Mycat社区对Cobar的代码进行了彻底重构,使用NIO重构了网络模块,并且优化了Buffer内核,增强了聚合、Join等基本特性,同时兼容了绝大多数数据库,使之成为通用的数据库中间件。Mycat在1.4版本以后完全脱离了Cobar内核,同时采用了Mycat集群管理、自动扩容及智能优化,成为了高性能的数据库中间件。Mycat从诞生至今已有三年多了,一直在坚持做最好的开源数据库中间件产品。

分布式数据库架构及企业实践:基于Mycat中间件》总计8章,涵盖了Mycat入门、进阶、高级技术实战、企业运维、架构剖析、核心技术分析、多数据库支持原理与实现等内容,内容详尽、图文并茂,几乎囊括了Mycat所涉及的方方面面,无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理,还是对于资深IT人士来说,《分布式数据库架构及企业实践:基于Mycat中间件》都极具参考价值。

第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的三种实现方式等,介绍了多节点数据汇聚和排序的原理,并详细阐述了在Mycat1.6版本中实现的一致性分布式事务的功能。

第8章:介绍了MySQL和PostgreSQL的通信协议及Mycat对这些通信协议的实现,然后介绍了Mycat对JDBC及多种数据库的支持,例如Oracle、SQLServer、MongoDB等。

分布式数据库架构及企业实践:基于Mycat中间件》的编写和校对历经一年,参与编写的作者都是Mycat开源项目中参与度比较高、提交过不少代码或有丰富的实战经验的资深人士。非常感谢参与《分布式数据库架构及企业实践:基于Mycat中间件》编写、指导或校对的专家:Leader-us、南哥(曹宗南)、从零开始(宋伟)、小张哥(张超)、yuanfang(杨鹏飞)、顽石神(张治春)、冰麒麟(杨峰)、望舒(胡雅辉)、明明Ben(朱阿明)、零(章爱国)、little-pan(潘自朋)、CrazyPig(陈建欣)、毛茸茸的逻辑(王成瑞)、海王星(林志强)、石头狮子(林晁)、HanSenJ(姬文刚)、武(王灯武)、战狼(刘胡波)、KK(刘军)、董海雄(易班网)、arx(李秋伟)、正能量(王金剑)、吉光(李伟)。

由于作者的写作水平有限,书中难免会有不妥或者疏漏之处,欢迎读者批评指正。

——冰风影

Mycat社区负责人

2016年11月6日于广州番禺


其他推荐