mycat视频培训概述_第1页
mycat视频培训概述_第2页
mycat视频培训概述_第3页
mycat视频培训概述_第4页
mycat视频培训概述_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 MYCATMycat在线视频培训代码demo: Mycat 开源组 -MYCAT 是什么?-MYCAT的前世今生。-MYCAT社区发展。-数据库切分及其解决方案。-MYCAT特性及其解决方案。-MYCAT入门介绍。内容:MYCAT是什么一个用于MySQL读写分离和与数据切分的高可用中间件一个模拟为MySQL Server的超级数据库代理一个能平滑扩展支持1000亿大表的分布式数据库系统一个可管控多种关系数据库的数据库路由器MYCAT之前世今生2013年阿里的Cobar在某大型项目中使用过程中发现存在一些比较严重的问题,于是第一代改良版Mycat诞生。Mycat开源以后,一些Cobar的用户参

2、与了Mycat的开发,最终Mycat发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。2014年Mycat首次在上海的中华架构师大会上对外宣讲,引发围观,更多的人参与进来,随后越来越多的项目采用了Mycat2015年7月为止,Mycat项目总共有16个Committer,其中核心参与者的年薪总额超过200万2015年5月,由核心参与者们一起编写的第一本官方权威指南Mycat权威指南电子版发布,累计超过500本,成为开源项目中的首创。截至2015年7月,超过100个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。截至2014年7月,

3、Mycat官方QQ群(106088787)已经超过2700人,大多数为资深IT工程师、架构师、DBA、以及一些CXO和高端猎头,成为国内具有影响力的高端IT专业群Mycat社区首次提出BigSQL的概念,并逐步将大数据和实时计算等先进技术引入到Mycat里,从而吸引和聚集了一大批业内大数据和云计算方面的资深工程师,Mycat社区成为名副其实的国内大数据领域实力派成员。Mycat社区里不断有优秀工程师被创业公司挖走,为了能更好的支持创业公司并寻求更多的优秀工程师参与采用,Mycat社区目前已经开始开展在线高端IT培训,培养高端Java架构师、工程师。为什么选择MYCAT基于阿里的成熟项目Coba

4、r而来,它有过大量的大规模生产案例社区非常活跃,维护者的水平很高,重大Bug都24小时修复目前的生产案例是开源项目中为数最多的,而且很多是大型项目Mycat的版本分为长期支持版本和当前最新版本两种,前者出现重大Bug后,还会及时修复,解决了生产中应用的后顾之忧Mycat的资料非常全,包括志愿者提供的资料,用户分享的经验资料,以及官方定期更新的Mycat权威指南,绝大多数技术问题,都可以通过文档和社区交流来解决如果需要专业技术支持服务,也可以跟Mycat社区交流,通过赞助开源项目的方式,名利双收,一举两得。何为数据(系统)切分? 简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一

5、个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。 切分模式:A.垂直(纵向)切分。B.水平切分。系统切分及其解决方案一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:优点: -拆分后业务清晰,拆分规则明确。 -系统之间整合或扩展容易。 -数据维护简单。缺点: -部分业务表无法JOIN,只能通过接口方式解决,提高了系统复杂度。 -受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。 -事务处理复杂。 垂直拆分相对于垂直拆分,水平拆分不是将表的数

6、据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式,如图:优点: 不存在单库大数据,高并发的性能瓶颈。 对应用透明,应用端改造较少。 按照合理拆分规则拆分,JOIN操作基本避免跨库。 提高了系统的稳定性跟负载能力。缺点: 拆分规则难以抽象。 分片事务一致性难以解决。 数据多次扩展难度跟维护量极大。 跨库JOIN性能较差。 水平切分前面讲了垂直切分跟水平切分的不同跟优缺点,会发现每种切分方式都有缺点,但共同的特

7、点缺点有:-引入分布式事务的问题。-跨节点JOIN 的问题。-跨节点合并排序分页问题。针对数据源管理,目前主要有两种思路:A. 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合; 优点:相对简单,无性能损耗。 缺点:不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂。B. 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明; 优点:通用,对应用透明,改造少。 缺点:实现难度大,有二次转发性能损失。切分原则:-尽量不切分,架构是进化而来,不是一蹴而就。-最大可能的找到最合适的切分维度。-由于数据库中间件

8、对数据JOIN 实现的优劣难以把握,而且实现高性能难度极大,业务读取 尽量少使用多表JOIN-尽量通过数据冗余,分组避免数据垮库多表JOIN。-尽量避免分布式事务。-单表切分数据1000万以内。切分的处理难点: -360 ATLAS-ALIBABA COBAR -MYCAT-TDDL-HEISENBERG-OCEANUS-VITESS-ONEPROXY -DRDS切分方案TLAS是由 QIHOO 360, WEB平台部基础架构团队开发维护的一个基于MYSQL协议的数据中间层项目。它是在MYSQL-PROXY 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用ATLA

9、S运行的MYSQL业务,每天承载的读写请求数达几十亿条。主要功能:* 读写分离* 从库负载均衡* IP过滤* SQL语句黑白名单* 自动分表360 AtlasCOBAR是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务. COBAR的分布式主要是通过将表放入不同的库来实现:1. COBAR支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分2. COBAR也支持将不同的表放入不同的库3. 多数情况下,用户会将以上两种方式混合使用这里需要强调的是,COBAR不支持将一张表,例如TEST表拆分成TEST_1, TE

10、ST_2, TEST_3.放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。HA:在用户配置了MYSQL心跳的情况下,COBAR可以自动向后端连接的MYSQL发送心跳,判断MYSQL运行状况,一旦运行出现异常,COBAR可以自动切换到备机工作。但需要强调的是:1. COBAR的主备切换有两种触发方式,一种是用户手动触发,一种是COBAR的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,COBAR不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。2. COBAR只检查MYSQL主备异常,不关心主备之间的数据同步,

11、因此用户需要在使用COBAR之前在MYSQL主备上配置双向同步,详情可以参阅MYSQL参考手册。其次,我们也需要注意COBAR的功能约束:1) 不支持跨库情况下的JOIN、分页、排序、子查询操作。2) SET语句执行会被忽略,事务和字符集设置除外。3) 分库情况下,INSERT语句必须包含拆分字段列名。4) 分库情况下,UPDATE语句不能更新拆分字段的值。5) 不支持SAVEPOINT操作。6) 暂时只支持MYSQL数据节点。alibaba cobar淘宝根据自己的业务特点开发了TDDL(TAOBAO DISTRIBUTED DATA LAYER 外号:头都大了 )框架,主要解决了分库分表对

12、应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 JDBC DATASOURCE实现,具有主备,读写分离,动态数据库配置等功能。TDDL所处的位置(TDDL通用数据访问层,部署在客户端的JAR包,用于将用户的SQL路由到指定的数据库中). 1.数据库主备和动态切换2.带权重的读写分离3.单线程读重试4.集中式数据源信息管理和动态变更5.剥离的稳定JBOSS数据源6.支持MYSQL和ORACLE数据库7.基于JDBC规范,很容易扩展支持实现JDBC规范的数据源8.无SERVER,CLIENT-JAR形式存在,应用直连数据库9.读写次数,并发度流程控制,动态变更10.可分析的日志

13、打印,日志流控,动态变更TDDL强大好用的MYSQL分库分表中间件,由百度员工个人编写。分库分表与应用脱离,分库表如同使用单库表一样减少DB 连接数压力热重启配置可水平扩容遵守MYSQL原生协议无语言限制,MYSQLCLIENT,C,JAVA等都可以使用HEISENBERG服务器通过管理命令可以查看,如连接数,线程池,结点等,并可以调整heisenberg58 OCEANUS致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的解决方案,甚至是平台化系统。拥抱开源,提供各类插件机制集成其他开源项目,新手可以在几分钟内上手编程,分库分表逻辑不再与业务紧密耦合,扩容有标准模式,减少意外错误

14、的发生 DATANODE:数据源节点。为一个数据源命名,配置链接属性、报警实现NAMENODE:数据源的簇。为一组数据源命名,指定这组数据源的负载方式、访问模式、权重TABLE:映射表。匹配解析SQL中的TABLE名称,命中TABLE标签的NAME属性值后,会执行约定的路由逻辑BEAN:实体。由其他标签引用,实体类必须有无参的构造函数TRACKER:监控埋点。涉及到计算和IO的功能点都有监控点,自定义一个埋点实现类,当功能耗时超出预期时会执行其中的回调函数,便于监控和优化系统Oceanus谷歌开发的数据库中间件,集群基于ZOOKEEPER管理,通过RPC方式进行数据处理,总体分为,SERVER

15、,COMMAND LINE,GUI监控 3部分。vitess分布式关系型数据库服务DRDS阿里分布式关系型数据库服务(DISTRIBUTE RELATIONAL DATABASE SERVICE,简称DRDS)是一种水平拆分、可平滑扩缩容、读写分离的在线分布式数据库服务。前身为淘宝TDDL,是近千个应用首选组件,已稳定服务了七年以上。rds/drds-遵守MYSQL原生协议,跨语言,跨数据库的通用中间件代理。-基于心跳的自动故障切换,支持读写分离,支持MYSQL一双主多从,以及一主多从-有效管理数据源连接,基于数据分库,而不是分表的模式。-基于NIO实现,有效管理线程,高并发问题。-支持数据的

16、多片自动路由与聚合,支持SUM,COUNT,MAX等常用的聚合函数。-支持2表JOIN,甚至基于CALTLET的多表JOIN。-支持通过全局表,ER关系的分片策略,实现了高效的多表JOIN查询。-支持多租户方案。-支持分布式事务(弱XA)-支持全局序列号,解决分布式下的主键生成问题。-分片规则丰富,插件化开发,易于扩展。-强大的WEB,命令行监控。-支持前端作为MYSQ通用代理,后端JDBC方式支持ORACLE、DB2、SQL SERVER 、 MONGODB 、巨杉。-集群基于ZOOKEEPER管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。MycatMYCAT架构图MYCAT高

17、效NIO和线程设计-逻辑库逻辑库(SCHEMA)-逻辑表逻辑表(TABLE) - ER 表表 - 非分片表非分片表 - 分片表分片表 - 全局表全局表- 分片节点分片节点(DATANODE) -节点主机节点主机(DATAHOST) -分片规则分片规则(RULE)-全局序列号全局序列号(SEQUENCE)-多租户多租户Mycat概念MYCAT抽象多个MYQL实例,对外提供唯一的访问数据源。 逻辑库与逻辑表Server.xml mycat orderdb Scema配置 select 1 select 1 MYCAT的路由解决方案在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数

18、据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。拆分原则:1. 避免或减少跨库join。2. 选择最合适的拆分维度。Mycat拆分表解决方案:-MYCAT 全局表-ER关系-表拆分 -拆分维度 -主键分片vs 非主键分片路由规则配置Rule.xml user_id func1 1 1024 拆分字段(拆分维度)MYCAT全局表ordershost1ordershost2ordershost3ordershost4insert into orders (xxx)Mycat每个节点同时并发插入和更新数据,每个节点都可以读取数据

19、,提升读性能的同时解决跨 节点Join的效率 ER模型就是将表按照相同拆分规则,相同拆分值,切分到同一个分片节点上,避免出现跨分片的JOIN的一种切分模型。可以配置为父子表,也可以不配置为父子表。ER表及ER关系模型 -MYCAT数据JOIN解决方案全局表技术独创的ER关系分片基于Catlet的sharejoin两表自动Join模块复杂SQL可通过用户自定义的Catlet进行处理Catlet是Java编写的一段程序,类似数据库中的存储过程,可以实现任意复杂SQL的Join、Group、Order等功能/*!mycat:catlet=demo.catlets.ShareJoin */ selec

20、t a.*,b.id, as tit from customer a,company b pany_id=b.id;嵌套循环连接(NESTED LOOPS JOIN)哈希连接(HASH JOIN) 排序合并连接(SORT MERGE JOIN) 常见的join算法:BKA(Batched Key Access)MYCAT高可用读写分离和自动切换机制-基于心跳的自动切换-Mycat 支持基于MySQL主从复制状态的高级读写分离与主从切换控制机制。-强制走写节点解决读写分离时延问题Mycat读写分片配置(注意:读写节点,主从节点直接数据同步需要数据库自己同步,mycat不负责)MyC

21、AT的读写分离机制如下:a.事务内的SQL,默认走写节点,以注释/*balance*/开头,则会根据balance=“1” 或“2”或“3” 去获取 .b.自动提交的select语句会走读节点,并在所有可用读节点中间随机负载均衡,默认根据balance=“1” 或“2”或“3” 去获取,以注释/*balance*/开头则会走写,解决部分已经开启读写分离,但是需要强一致性数据实时获取数据的场景走写c. 当某个主节点宕机,则其全部读节点都不再被使用,因为此时,同步失败,数据已经不是最新的,MYCAT会采用另外一个主节点所对应的全部读节点来实现select负载均衡。d.当所有主节点都失败,则为了系统

22、高可用性,自动提交的所有select语句仍将提交到全部存活的读节点上执行,此时系统的很多页面还是能出来数据,只是用户修改或提交会失败。MyCAT的读写分离的配置如下: select user() dataHost的balance属性设置为:0,不开启读写分离机制1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作

23、压力不大的情况下,所有主机都可以承担负载均衡。3. 全部的读节点参数读,写节点不参与,如果配置了多个writerhost,则多个writerhost下面的readhost参数读负载。Mycat2.0mysqlMycat2.0 -集群处理-自动扩容-智能优化-大数据处理mysqlmysqlMycatMycatbalanceZookeeper Regist centerMycatAdmin/web应用应用MYCAT对多租户应用的支持MYCAT对事务的支持为弱XA,如果业务需要严格的强一致性,需要采用事务补偿方案,或者尽量避免跨库操作。Mycat事务支持mycat的事务处理是,依次轮询需要处理的分片

24、执行对应的Sql,当应用commit时在依次轮询commit。如果中间一个分片执行sql出错全部回滚。但是如果应用发起commit命令,Mycat发起commit到db成功,但是实际db未成功时,mycat无法保证各个节点回滚,这就是弱xa。分布式事务处理-异步化处理-最终一致性Mycat主从及多主配置dataHost的writeType属性设置为: writeType=0 默认配置。 writeType=1 代表配置多主,mycat会往所有写节点,随机写数据,但是每次只会写入一个节点,此模式下无读节点,节点之间开启数据库级别同步。此配置为mysql高级级别使用,因为多主会带来数据库同步问题。

25、 select user() 基于主从同步的读写分离与主从切换1.4 开始支持MySQL 主从复制状态绑定的读写分离与主从切换机制,读更加安全可靠,配置如下:MyCAT 心跳检查语句配置为show slave status ,dataHost 上定义两个新属性: switchType=2 与slaveThreshold=100,此时意味着开启MySQL 主从复制状态绑定的读写分离与切换机制,Mycat 心跳机制通过检测show slave status 中的Seconds_Behind_Master, Slave_IO_Running,Slave_SQL_Running 三个字段来确定当前主从

26、同步的状态以及Seconds_Behind_Master 主从复制时延, 当Seconds_Behind_MasterslaveThreshold 时,读写分离筛选器会过滤掉此Slave 机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave 上的Seconds_Behind_Master 是否为0,为0 时则表示主从同步,可以安全切换,否则不会切换。switchType 目前有三种选择: -1 表示不自动切换 1 默认值,自动切换 2 基于MySQL 主从同步的状态决定是否切换下面为参考配置: show slave status Mycat高级特性(注解)MyCat对自身

27、不支持的Sql语句提供了一种解决方案在要执行的SQL语句前添加额外的一段代码,这样Sql就能正确执行,这段代码称之为“注解”。注解的形式是 /*!mycat: sql=Sql语句*/使用时将=号后的“Sql语句”替换为需要的Sql语句即可,后面会提到具体的用法。例子假设需要执行的语句是 Insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黄蓉,10010);鉴于路由分析的原因,MyCat暂不支持这种语句的执行,如果一定需要执行这种语句,可在这段sql代码前添加 /*!mycat: sql=select id from p

28、ersons where sharding_id=10010 */语句变为如下形式即可执行 /*!mycat: sql=select id from persons where sharding_id=10010 */insert into persons(id,name,sharding_id) values(1,郭靖,10010),(2,黄蓉,10010);原理 MyCat执行SQL语句的流程是先进行SQL解析处理,解析出分片信息(路由信息)后,然后到该分片对应的物理库上去执行;若传入的SQL语句MyCat无法解析,则MyCat不会去执行;而注解则是告诉MyCat按照注解内的SQL(称之为

29、注解SQL)去进行解析处理,解析出分片信息后,将注解后真正要执行的SQL语句(称之为原始SQL)发送到该分片对应的物理库上去执行。从上面的原理可以看到,注解只是告诉MyCat到何处去执行原始SQL;因而使用注解前,要清楚的知道该原始SQL去哪个分片执行,然后在注解SQL中也指向该分片,这样才能使用!例子中的sharding_id=10010即是指明分片信息的。需要说明的是,若注解SQL没有能明确到具体某个分片,譬如例子中的注解SQL没有添加sharding_id=10010这个条件,则MyCat会将原始SQL发送到persons表所在的所有分片上去执行去,这样造成的后果若是插入语句,则在多个分

30、片上都存在重复记录,同样查询、更新、删除操作也会得到错误的结果!解决问题MySql不支持的语法结构,如insert values(),() insert select等 同一个实例内的跨库关联查询,如用户库和平台库内的表关联 存储过程调用全局序列号全局序列号是MyCAT提供的一个新功能,为了实现分库分表情况下,表的主键是全局唯一,而默认的MySQL的自增长主键无法满足这个要求。全局序列号的语法符合标准SQL规范,其格式为:next value for MYCATSEQ_GLOBAL其中MYCATSEQ_GLOBAL是序列号的名字,MyCAT自动创建新的序列号,免去了开发的复杂度,另外,MyCA

31、T也提供了一个全局的序列号,名称为:MYCATSEQ_GLOBAL。注意,MYCATSEQ_必须大写才能正确识别。注意:注意:序列:序列:MYCATSEQ_MYCAT配置:配置:MYCAT=dn1 表为:表为:MYCAT 也就是也就是”表名表名“=序列号后半部分的名字(序列号后半部分的名字(MYCATSEQ_xxx 中的中的xxx)目前全局序列号提供了本地文件跟数据库模式及本地基于时间戳算法的三种方式: Insert table t_node(name) values(testname);Demo: Mycat 监控MyCAT 自身有类似其他数据库的管理监控方式,可以通过Mysql 命令行,登录管理端口(9066)执行相应的SQL 进行管理,也可以通过jdbc 的方式进行远程连接管理,本小节主要讲解命令行的管理操作。登录:目前mycat 有两个端口,8066 数据端口,9066 管理端口,命令行的登陆是通过9066 管理端口来操作,登录方式类似于mysql 的服务端登陆。mysql -h127

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论