没有合适的资源?快使用搜索试试~ 我知道了~
首页Mycat读写分离、主从切换、分库分表的操作记录- 线上操作手册
资源详情
资源评论
资源推荐
系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL 语句优化、代码优化,
数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术
问题问题。Mycat 是一个广受好评的数据库中间件,已经在很多产品上进行使用了。下面就针对
Mycat 的基础知识和应用做一总结性梳理,这些内容有的是从网上收集的,有的是自己做的测试验
证信息,如有错误,烦请谅解和指出!
一、MyCat 简单介绍
MyCat 是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的服务器,前端用户可以把它
看作是一个数据库代理(类似于 Mysql Proxy),用 MySQL 客户端工具和命令行访问,而其后
端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服
务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务
器里或者其他数据库里。
MyCat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持
MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型
NoSQL 方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在
MyCat 里,都是一个传统的数据库表,支持标准的 SQL 语句进行数据的操作,这样一来,对前端
业务系统来说,可以大幅降低开发难度,提升开发速度。
Mycat 可以简单概括为
- 一个彻底开源的,面向企业应用开发的大数据库集群
- 支持事务、ACID、可以替代 MySQL 的加强版数据库
- 一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群
- 一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server
- 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
- 一个新颖的数据库中间件产品
Mycat 关键特性
- 支持 SQL92 标准
- 遵守 Mysql 原生协议,跨语言,跨平台,跨数据库的通用中间件代理
-基于心跳的自动故障切换,支持读写分离,支持 MySQL 主从,以及 galera cluster 集群
- 支持 Galera for MySQL 集群,Percona Cluster 或者 MariaDB cluster
- 基于 Nio 实现,有效管理线程,高并发问题
- 支持数据的多片自动路由与聚合,支持 sum,count,max 等常用的聚合函数,支持跨库分页
- 支持单库内部任意 join,支持跨库 2 表 join,甚至基于 caltlet 的多表 join
- 支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询
- 支持多租户方案
- 支持分布式事务(弱 xa)
- 支持全局序列号,解决分布式下的主键生成问题
- 分片规则丰富,插件化开发,易于扩展
- 强大的 web,命令行监控
- 支持前端作为 mysq 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb
、巨杉
- 支持密码加密
- 支持服务降级
- 支持 IP 白名单
- 支持 SQL 黑名单、sql 注入攻击拦截
- 支持分表(1.6)
- 集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0 开发版)
二、为什么要用 MyCat
曾经面试时被问到:Mycat 和 MySQL 的区别(Mycat 的核心作用)。我们可以把上层看作是对下
层的抽象,例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?假如只有一种
硬件的时候,我们需要开发一个操作系统吗?再比如一个项目只需要一个人完成的时候不需要
leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,而这个管理者对
于他的上层来说就是对项目组的抽象。
同样的,当我们的应用只需要一台数据库服务器的时候我们并不需要 Mycat,而如果你需要分库甚
至分表,这时候应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理
这些数据库,而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是
Mycat 的核心作用。所以可以这样理解:数据库是对底层存储文件的抽象,而 Mycat 是对数据库的
抽象。
三、Mycat 工作原理
Mycat 的原理并不复杂,复杂的是代码。Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用
户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分
片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回
的结果做适当的处理,最终再返回给用户。
上述图片里,Orders 表被分为三个分片 datanode(简称 dn),这三个分片是分布在两台 MySQL
Server 上(DataHost),即 datanode=database@datahost 方式,因此你可以用一台到 N 台服
务器来分片,分片规则为(sharding rule)典型的字符串枚举分片规则,一个规则的定义是分片字
段(sharding column)+分片函数(rule function),这里的分片字段为 prov 而分片函数为字符串
枚举方式。
当 Mycat 收到一个 SQL 时,会先解析这个 SQL,查找涉及到的表,然后看此表的定义,如果有分
片规则,则获取到 SQL 里分片字段的值,并匹配分片函数,得到该 SQL 对应的分片列表,然后将
SQL 发往这些分片去执行,最后收集和处理所有分片返回的结果数据,并输出到客户端。以 select
* from Orders where prov=?语句为例,查到 prov=wuhan,按照分片函数,wuhan 返回
dn1,于是 SQL 就发给了 MySQL1,去取 DB1 上的查询结果,并返回给用户。
如果上述 SQL 改为 select * from Orders where prov in (‘wuhan’,‘beijing’),那么,SQL 就会
发给 MySQL1 与 MySQL2 去执行,然后结果集合并后输出给用户。但通常业务中我们的 SQL 会有
Order By 以及 Limit 翻页语法,此时就涉及到结果集在 Mycat 端的二次处理,这部分的代码也比
较复杂,而最复杂的则属两个表的 Jion 问题,为此,Mycat 提出了创新性的 ER 分片、全局表、
HBT(Human Brain Tech)人工智能的 Catlet、以及结合 Storm/Spark 引擎等十八般武艺的解决
办法,从而成为目前业界最强大的方案,这就是开源的力量!
四、Mycat 应用场景
Mycat 发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几
个典型的应用场景:
- 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
- 分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;
- 多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;
- 报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计;
- 替代 Hbase,分析大数据;
- 作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出
来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有
效的选择;
- Mycat 长期路线图;
- 强化分布式数据库中间件的方面的功能,使之具备丰富的插件、强大的数据库智能优化功能、全
面的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能;
- 进一步挺进大数据计算领域,深度结合 Spark Stream 和 Storm 等分布式实时流引擎,能够完
成快速的巨表关联、排序、分组聚合等 OLAP 方向的能力,并集成一些热门常用的实时分析算法,
让工程师以及 DBA 们更容易用 Mycat 实现一些高级数据分析处理功能。
- 不断强化 Mycat 开源社区的技术水平,吸引更多的 IT 技术专家,使得 Mycat 社区成为中国的
Apache,并将 Mycat 推到 Apache
基金会,成为国内顶尖开源项目,最终能够让一部分志愿者成为专职的 Mycat 开发者,荣耀跟实力
一起提升。
五、Mycat 不适合的应用场景
- 设计使用 Mycat 时有非分片字段查询,请慎重使用 Mycat,可以考虑放弃!
- 设计使用 Mycat 时有分页排序,请慎重使用 Mycat,可以考虑放弃!
- 设计使用 Mycat 时如果要进行表 JOIN 操作,要确保两个表的关联字段具有相同的数据分布,否
则请慎重使用 Mycat,可以考虑放弃!
- 设计使用 Mycat 时如果有分布式事务,得先看是否得保证事务得强一致性,否则请慎重使用
Mycat,可以考虑放弃!
需要注意:在生产环境中, Mycat 节点最好使用双节点, 即双机热备环境, 防止 Mycat 这一层出现单
点故障.可以使用的高可用集群方式有:Keepalived+Mycat+Mysql,Keepalived+LVS+
Mycat+Mysql,Keepalived+Haproxy+Mycat+Mysql
六、利用 MyCAT 实现 MySQL 的读写分离、主从切换、分库分表的
操作记录
Mycat 实现 Mysql 主从复制,其中写操作在 master 主节点上执行,包括
insert,delete,update 语句操作;读操作在 slave 节点上执行,只有 select 语句操作,其他操
作均由主 master 的二进制文件决定;MyCat 支持双主多从,多主多从情况需要配置多个
writeHost 兄弟节点,多个 readHost 节点即可!
Mycat 的架构其实很好理解,Mycat 是数据库代理中间件,Mycat 后面就是物理数据库。和 Web
服务器的 Nginx 类似。对于使用者来说,访问的都是 Mycat,不会接触到后端的数据库。如下案例
是做一个主从、读写分离,简单分库分表的示例。结构如下图:
服务器信息如下(实验环境,关闭机器的 iptables 防火墙和 selinux):
服务器主机名 ip 说明
Mycat-node 192.168.10.210 mycat 服务器,连接数据库时,连接此服务器
Mysql-node1 192.168.10.205 物理数据库 1,真正存储数据的数据库,这里为 Master 主
数据库
Mysql-node2 192.168.10.206 物理数据库 2,真正存储数据的数据库,这里为 Slave 主数
据库
三台机器分布修改主机名,并做 hosts 绑定
# vim /etc/hosts
192.168.10.205 Mysql-node1
192.168.10.206 Mysql-node1
192.168.10.210 Mycat-node
为方便做实验,关闭三台机器的 iptables 防火墙和 selinux
剩余39页未读,继续阅读
kevin_grace
- 粉丝: 7
- 资源: 75
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0