




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 每特教育|蚂蚁课堂Java高端分布式、微服务IT培训。培训内容:分布式、微服务、高可用、高并发、并发编程、JVM、性能调优、真实企业实际项目等。主讲老师:97后Java架构师-蚂蚁课堂创始人-余胜军余老师微信号:yushengjun644 QQ:1051546329或者 644064779官方粉丝群: 193086273 官方网站 百度搜索:”蚂蚁课堂 ”或者腾讯课堂搜索”每特学院 “ MyCat分片集群策略与原理分析余胜军,男,余胜军,男,19971997年出生年出生1010月月1717日出生,蚂蚁课堂创始人日出生,蚂蚁课堂创始人&97&97后互联网创业者,后互联网创业者,
2、创办了上海每特教育科技有限公司,其公司产品是主要培训创办了上海每特教育科技有限公司,其公司产品是主要培训JavaJava架构师培训。架构师培训。个人擅长技能个人擅长技能: : 擅长互联网微服务与分布式架构,熟悉整套互联网微服务电商架构流程,及熟擅长互联网微服务与分布式架构,熟悉整套互联网微服务电商架构流程,及熟悉解决微服务架构中疑难杂症问题,对悉解决微服务架构中疑难杂症问题,对SpingCloud2.xSpingCloud2.x、SpringBootSpringBoot有一定的深有一定的深入研究,其中录制的入研究,其中录制的SpringCloud/SpringBootSpringCloud/S
3、pringBoot课程破百万粉丝学习,是很多学员课程破百万粉丝学习,是很多学员学习微服务架构的导师,为中国微服务事业做了不少贡献。学习微服务架构的导师,为中国微服务事业做了不少贡献。成长经历成长经历: :1818岁的时候担任主力岁的时候担任主力JavaJava研发、项目研发、项目LeaderLeader、年薪税后高达、年薪税后高达2222万左右,同年万左右,同年1818岁岁创办了蚂蚁课堂创办了蚂蚁课堂- -在线教育平台。在线教育平台。1818岁的时候通过自己第一桶金,给自己父母在武汉市买了一套数百万的房子。岁的时候通过自己第一桶金,给自己父母在武汉市买了一套数百万的房子。1919岁的时候创办了
4、岁的时候创办了- -上海每特教育科技有限公司上海每特教育科技有限公司 定位互联网架构师培训行业。定位互联网架构师培训行业。2020岁的时候在线直播岁的时候在线直播JavaJava分布式和微服务培训课程,年收入分布式和微服务培训课程,年收入300300万元。万元。2121岁的时候其录制的岁的时候其录制的SpringCloud/SpringBootSpringCloud/SpringBoot课程破百万人学习。课程破百万人学习。余老师联系方式余老师联系方式:QQ:644064779 :QQ:644064779 微信微信:yushengjun644:yushengjun644MySQLMySQL高可用
5、集群环境搭建高可用集群环境搭建0101、MySQLMySQL高可用环境方案高可用环境方案0202、MySQLMySQL主从复制原理主从复制原理0303、MySQLMySQL主从复制作用主从复制作用0404、在、在LinuxLinux环境上安装环境上安装MySQLMySQL0505、在、在MySQLMySQL集群环境上配置主从复制集群环境上配置主从复制0606、MySQLMySQL高可用集群带来的问题高可用集群带来的问题0707、MySQLMySQL读写分离读写分离MyCatMyCat使用使用0808、分表分库插件、分表分库插件ShardingJdbcShardingJdbc0909、MySQL
6、MySQL数据库索引底层原理(重点)数据库索引底层原理(重点)1010、MySQLSQLMySQLSQL语句性能优化语句性能优化SpringBootSpringBoot动态数据源动态数据源 采用注解采用注解云数据库云数据库 阿里云、腾讯云阿里云、腾讯云上课内容上课内容1 1、什么是、什么是MyCatMyCat2 2、MyCatMyCat应用场景应用场景3 3、使用、使用MyCatMyCat路由实现读写分离路由实现读写分离4 4、SpringBootSpringBoot动态数据源切换原理动态数据源切换原理5.5.、SpringBootSpringBoot项目编程思维项目编程思维上课内容上课内容1
7、 1、数据库集群如何保证自动增长唯一性、数据库集群如何保证自动增长唯一性2 2、数据库分表分库策略、数据库分表分库策略3 3、MyCatMyCat分片集群策略分片集群策略4 4、MyCatMyCat分片策略原理分片策略原理上课内容上课内容MySQLMySQL数据库简单介绍数据库简单介绍 MySQL MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台生产环境中,由单台MySQLMySQL数
8、据库服务器不能满足实际的需求。此时数据数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用库集群就很好的解决了这个问题了。采用MySQLMySQL分布式集群,能够搭建一分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQLMySQL服务器里的数据同步。数据同步我们可以通过服务器里的数据同步。数据同步我们可以通过MySQLMySQL内部配置就可以轻松内部配置就可以轻松完成,主要有主从完成,主要有主从(master slave )(master slave )复制和主主复制。复制和
9、主主复制。 蚂蚁课堂数据库蚂蚁课堂数据库 用的腾讯云数据库用的腾讯云数据库 5.7 5.7以上以上上课内容上课内容主从复制介绍主从复制介绍 相信很多学员在学习相信很多学员在学习RedisRedis的时候,已经了解过主从复制的作用。在的时候,已经了解过主从复制的作用。在MySQLMySQL集群环境中,可以分为主节点与从节点,通过主从复制可以实现数集群环境中,可以分为主节点与从节点,通过主从复制可以实现数据备份、故障转移、据备份、故障转移、MySQLMySQL集群、高可用、读写分离等。集群、高可用、读写分离等。 MySQL MySQL的主从复制是的主从复制是MySQLMySQL本身自带的一个功能,
10、不需要额外的第三方本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是软件就可以实现,其复制功能并不是copycopy文件来实现的,而是借助文件来实现的,而是借助binlogbinlog日志文件里面的日志文件里面的SQLSQL命令实现的主从复制,可以理解为我再命令实现的主从复制,可以理解为我再MasterMaster端执行了一条端执行了一条SQLSQL命令,那么在命令,那么在SalveSalve端同样会执行一遍,从而达到主从端同样会执行一遍,从而达到主从复制的效果。复制的效果。上课内容上课内容主从复制原理主从复制原理 MySQL MySQL的主从复制是的主从复制是MySQLM
11、ySQL本身自带的一个功能,不需要本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是额外的第三方软件就可以实现,其复制功能并不是copycopy文文件来实现的,而是借助件来实现的,而是借助binlogbinlog日志文件里面的日志文件里面的SQLSQL命令实现命令实现的主从复制,可以理解为我再的主从复制,可以理解为我再MasterMaster端执行了一条端执行了一条SQLSQL命令,命令,那么在那么在SalveSalve端同样会执行一遍,从而达到主从复制的效果。端同样会执行一遍,从而达到主从复制的效果。 从库生成两个线程,一个从库生成两个线程,一个I/OI/O线程,一个线程
12、,一个SQLSQL线程;线程; i/o i/o线程去请求主库线程去请求主库 的的binlogbinlog,并将得到的,并将得到的binlogbinlog日志写日志写到到relay logrelay log(中继日志)(中继日志) 文件中;文件中;主库会生成一个主库会生成一个 log dump log dump 线程,用来给从库线程,用来给从库 i/o i/o线程传线程传binlogbinlog; SQL SQL 线程,会读取线程,会读取relay logrelay log文件中的日志,并解析成具文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;体操作,来实现主从的操作一致,
13、而最终数据一致;上课内容上课内容主从复制环境配置主从复制环境配置服务器准备两台服务器准备两台192.168.212.202 192.168.212.202 (主的(主的MySQLMySQL)192.168.212.203 (192.168.212.203 (克隆克隆202202的的MySQL)MySQL)从从MySQLMySQL主服务器配置主服务器配置如何验证主从复制成功?在如何验证主从复制成功?在202202节点上创建节点上创建testtest数据库,如果数据库,如果203203节点能节点能够同步过来,说明环境搭建成功啦!够同步过来,说明环境搭建成功啦!从服务器配置从服务器配置上课内容上课内
14、容什么是什么是MyCatMyCat MyCAT MyCAT是一款由阿里是一款由阿里CobarCobar演变而来的用于支持数据库,读写分离、分演变而来的用于支持数据库,读写分离、分表分库的分布式中间件。表分库的分布式中间件。MyCATMyCAT支持支持OracleOracle、MSSQLMSSQL、MYSQLMYSQL、PGPG、DB2DB2关关系型数据库,同时也支持系型数据库,同时也支持MongoDBMongoDB等非关系型数据库。等非关系型数据库。 MyCAT MyCAT原理原理MyCATMyCAT主要是通过对主要是通过对SQLSQL的拦截,然后经过一定规则的分片解的拦截,然后经过一定规则的
15、分片解析、路由分析、读写分离分析、缓存分析等,然后将析、路由分析、读写分离分析、缓存分析等,然后将SQLSQL发给后端真实的发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。数据块,并将返回的结果做适当处理返回给客户端。官方网站官方网站: : 上课内容上课内容基于基于MyCatMyCat实现读写分离实现读写分离 读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。主数
16、据库进行写操作后,数据及时同步到所地减轻单台数据库的压力。主数据库进行写操作后,数据及时同步到所读的数据库,尽可能保证读、写数据库的数据一致,比如读的数据库,尽可能保证读、写数据库的数据一致,比如MySQLMySQL的主从复的主从复制、制、OracleOracle的的data guarddata guard、SQL ServerSQL Server的复制订阅等。的复制订阅等。 画图演示画图演示 上课内容上课内容LinuxLinux环境安装环境安装MyCatMyCat实现读写分离实现读写分离1 1、上传安装、上传安装Mycat-server-1.6.5-release-2018012222003
17、3-linux.tarMycat-server-1.6.5-release-20180122220033-linux.tar2 2、解压安装包、解压安装包tar zxvf tar zxvf 3 3、配置、配置schema.xml schema.xml 和和server.xmlserver.xml4 4、客户端连接端口号、客户端连接端口号: 8066: 8066配置文件介绍配置文件介绍: :上课内容上课内容文件说明server.xmlMycat的配置文件,设置账号、参数等schema.xmlMycat对应的物理数据库和数据库表的配置rule.xmlMycat分片(分库分表)规则LinuxLinu
18、x环境安装环境安装MyCatMyCat实现读写分离实现读写分离1 1、上传安装、上传安装Mycat-server-1.6.5-release-20180122220033-linux.tarMycat-server-1.6.5-release-20180122220033-linux.tar2 2、解压安装包、解压安装包tar zxvf tar zxvf 3 3、配置、配置schema.xml schema.xml 和和server.xmlserver.xml4 4、客户端连接端口号、客户端连接端口号: 8066: 8066配置文件介绍配置文件介绍: :上课内容上课内容文件说明server.x
19、mlMycat的配置文件,设置账号、参数等schema.xmlMycat对应的物理数据库和数据库表的配置rule.xmlMycat分片(分库分表)规则 详细配置文件信息查看资料详细配置文件信息查看资料LinuxLinux环境安装环境安装MyCatMyCat实现读写分离实现读写分离1 1、进入、进入binbin目录目录 启动启动MyCat ./mycat start MyCat ./mycat start 停止停止MyCat ./mycat stopMyCat ./mycat stop2 2、查看、查看/usr/local/mycat/logs wrapper.log/usr/local/myc
20、at/logs wrapper.log日志日志 如果是为如果是为successfully successfully 则启动成功则启动成功关闭防火墙关闭防火墙:systemctl stop firewalld.service:systemctl stop firewalld.service只可读的账号只可读的账号 user user user user 端口号端口号80668066可读可写的账号可读可写的账号 root 123456 root 123456 端口号端口号80668066上课内容上课内容SpringBootSpringBoot项目整合动态数据源项目整合动态数据源( (读写分离读写分
21、离) )1.1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理。由于此方法相对易懂,简单,不做过多介绍。做好的数据一致性的处理。由于此方法相对易懂,简单,不做过多介绍。 2. 2. 动态切换数据源,根据配置的文件,业务动态切换访问的数据库动态切换数据源,根据配置的文件,业务动态切换访问的数据库: :此此方案通过方案通过SpringSpring的的AOPAOP,AspactJAs
22、pactJ来实现动态织入,通过编程继承实现来实现动态织入,通过编程继承实现SpringSpring中的中的AbstractRoutingDataSource,AbstractRoutingDataSource,来实现数据库访问的动态切换,来实现数据库访问的动态切换,不仅可以方便扩展,不影响现有程序,而且对于此功能的增删也比较容不仅可以方便扩展,不影响现有程序,而且对于此功能的增删也比较容易。易。 3. 3. 通过通过mycatmycat来实现读写分离来实现读写分离: :使用使用mycatmycat提供的读写分离功能,提供的读写分离功能,mycatmycat连连接多个数据库,数据源只需要连接接多
23、个数据库,数据源只需要连接mycatmycat,对于开发人员而言他还是连接,对于开发人员而言他还是连接了一个数据库了一个数据库( (实际是实际是mysqlmysql的的mycatmycat中间件中间件) ),而且也不需要根据不同,而且也不需要根据不同 业业务来选择不同的库,这样就不会有多余的代码产生。务来选择不同的库,这样就不会有多余的代码产生。详细参考配置详细参考配置上课内容上课内容动态数据源核心配置动态数据源核心配置在在Spring 2.0.1Spring 2.0.1中引入了中引入了AbstractRoutingDataSource, AbstractRoutingDataSource,
24、该类充当了该类充当了DataSourceDataSource的路由中介的路由中介, , 能有在运行时能有在运行时, , 根据某种根据某种keykey值来动态切换到真值来动态切换到真正的正的DataSourceDataSource上。上。1.1.项目中需要集成多个数据源分别为读和写的数据源,绑定不同的项目中需要集成多个数据源分别为读和写的数据源,绑定不同的keykey。2.2.采用采用AOPAOP技术进行拦截业务逻辑层方法,判断方法的前缀是否需要写或技术进行拦截业务逻辑层方法,判断方法的前缀是否需要写或者读的操作者读的操作3.3.如果方法的前缀是写的操作的时候,直接切换为写的数据源,反之切如果方
25、法的前缀是写的操作的时候,直接切换为写的数据源,反之切换为读的数据源换为读的数据源也可以自己定义注解进行封装也可以自己定义注解进行封装动态数据源与多数数据源区别动态数据源与多数数据源区别多数据源多数据源-以分包形式以分包形式动态数据在动态数据在jvmjvm进行不断地进行切换进行不断地进行切换上课内容上课内容数据库集群如何考虑数据库自增唯一性数据库集群如何考虑数据库自增唯一性在数据库集群环境下,默认自增方式存在问题,因为都是从在数据库集群环境下,默认自增方式存在问题,因为都是从1 1开始自增,可能会存在开始自增,可能会存在重复,应该设置每台节点自增步长不同。重复,应该设置每台节点自增步长不同。查
26、询自增的步长查询自增的步长SHOW VARIABLES LIKE auto_inc%SHOW VARIABLES LIKE auto_inc%修改自增的步长修改自增的步长SET auto_increment_increment=10;SET auto_increment_increment=10;修改起始值修改起始值SET auto_increment_offset=5;SET auto_increment_offset=5;假设有两台假设有两台mysqlmysql数据库服务器数据库服务器节点自增节点自增 1 3 5 7 9 11 . 1 3 5 7 9 11 .节点自增节点自增 2 4 6
27、8 10 12 . 2 4 6 8 10 12 .注意注意: :在最开始设置好了每台节点自增方式步长后,确定好了在最开始设置好了每台节点自增方式步长后,确定好了mysqlmysql集群数量后,无集群数量后,无法扩展新的法扩展新的mysqlmysql,不然生成步长的规则可能会发生变化。,不然生成步长的规则可能会发生变化。上课内容上课内容数据库分表分库策略数据库分表分库策略数据库分表分库原则遵循数据库分表分库原则遵循 垂直拆分与水平拆分垂直拆分与水平拆分垂直拆分就是根据不同的业务,分为不同的数据库,比如会员数据库、订单数据库、垂直拆分就是根据不同的业务,分为不同的数据库,比如会员数据库、订单数据库
28、、支付数据库等,垂直拆分在大型电商系统中用的非常常见。支付数据库等,垂直拆分在大型电商系统中用的非常常见。优点:优点: 拆分后业务清晰,拆分规则明确,系统之间整合或扩展容易。拆分后业务清晰,拆分规则明确,系统之间整合或扩展容易。缺点:缺点:部分业务表无法部分业务表无法joinjoin,只能通过接口方式解决,提高了系统复杂度存在分布式事务,只能通过接口方式解决,提高了系统复杂度存在分布式事务问题。问题。上课内容上课内容数据库分表分库策略数据库分表分库策略数据库分表分库原则遵循数据库分表分库原则遵循 垂直拆分与水平拆分垂直拆分与水平拆分 垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个
29、表拆到不同的垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。数据库中。 相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中水平切分理解为是按照数据行的切分,就是将表中 的某些行切分到一个数据库,而的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式另外
30、的某些行又切分到其他的数据库中,主要有分表,分库两种模式 该方式提高了系统的稳定性跟负载能力,但是跨库该方式提高了系统的稳定性跟负载能力,但是跨库joinjoin性能较差。性能较差。画图演示画图演示上课内容上课内容使用使用MyCatMyCat实现水平分片策略实现水平分片策略 MyCat MyCat支持支持1010种分片策略种分片策略1 1、求模算法、求模算法2 2、分片枚举、分片枚举3 3、范围约定、范围约定4 4、日期指定、日期指定5 5、固定分片、固定分片hashhash算法算法6 6、通配取模、通配取模7 7、ASCIIASCII码求模通配码求模通配8 8、编程指定、编程指定9 9、字符串拆分、字符串拆分hashhash解析解析详细详细: document/mycat-definitive-guide.pdf: document/mycat-definitive-guide.pdf上课内容上课内容使用使用MyCatMyCat实现水平分片策略实现水平分片策略分片枚举这种规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,分片枚举这种规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国的省份区县固定的,这类业务使用这一规则。配置如下而全国的省份
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考物理一轮专项复习:动能定理及其应用(解析版)
- 高考数学复习讲义:特征数与抽样方法
- 技能大赛重症护理
- 皮肤菌群护理科学指南
- 线上培训课程体系设计
- 老人骨折疼痛护理
- 小儿荨麻疹护理要点
- 【2025中考复习】完形填空解题思路
- 恶性肿瘤营养支持
- 社区护理孕妇保健
- MOOC 现代科技与人类未来-大连大学 中国大学慕课答案
- MOOC 数据挖掘与python实践-中央财经大学 中国大学慕课答案
- 配电网自动化终端典型缺陷处理
- 安全生产管理的流程和步骤
- 2024年贵州西南能矿建设工程有限公司招聘笔试参考题库含答案解析
- 江苏省南通市历年中考数学试卷真题合集(共6套)
- 班组级培训课件
- 曲臂车安全专项施工方案
- 结缔组织病相关间质性肺病的中药治疗
- 《静脉输血规范》课件
- 飞行汽车的商业化应用
评论
0/150
提交评论