MySQL中间件之MyCat

发布时间:2024-03-18 点击:91
系统运维
mysql中间件之mycat
一、mycat基础概念
1、什么是mycat
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、acid、可以替代mysql的加强版数据库
一个可以视为mysql集群的企业级数据库,用来替代昂贵的oracle集群
一个融合内存缓存技术、nosql技术、hdfs大数据的新型sql server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
2、为什么使用mycat
如今随着互联网的发展,数据的量级也是撑指数的增长,从gb到tb到pb。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候nosql的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合nosql一些折衷是无法满足使用场景的(比如有些使用场景是绝对要有事务与安全指标的。这个时候nosql肯定是无法满足的)。所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——mycat
mycat作用:
能满足数据库数据大量存储;提高了查询性能
读写分离
数据分片 垂直拆分(分库)、水平拆分(分表)、垂直 水平拆分(分库分表)
多数据源整合
3、 数据库中间件对比
① cobar(前身为amoaba)属于阿里b2b事业群,始于2008年,在阿里服役3年多,接管3000 个mysql数据库的schema, 集群日处理在线sql请求50亿次以上。由于cobar发起人的离职, cobar停止维护。
② mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新 的功能在其中。青出于蓝而胜于蓝。
③ oneproxy基于mysql官方的proxy思想利用c进行开发的, oneproxy是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。
④ kingshard由小团队用go语言开发,还需要发展,需要不断完善。
⑤ vitess是youtube生产在使用,架构很复杂。不支持mysql原生协议,使用需要大量改造成本。
⑥ atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
⑦ maxscale是mariadb(mysql原作者维护的一个版本) 研发的中间件
⑧ mysqlroute是mysql官方oracle公司发布的中间件
4、支持的数据库
支持mysql oracle sqlserver等一些主流的数据库
5、核心技术
分库分表:数据库分片指通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式,mycat通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法
1)schema:逻辑库,与mysql中的database(数据库)对应,一个逻辑库中定义了所包括的table。
2)table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点datanode。在此可以指定表的分片规则。
3)datanode:mycat的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过datasource来关联到后端某个具体数据库上
4)datasource:定义某个物理库的访问地址,用于捆绑到datanode上
5)分片规则:前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难
二、mycat安装部署
环境:
jdk:要求jdk必须是1.7及以上版本mysql:推荐mysql是5.5以上版本mycat的官方网站:http://www.mycat.org.cn/主机操作系统ip地址mysql01(master01)
centos 7.3
192.168.1.1
mysql02(slave)
centos 7.3
192.168.1.8
mycat
centos 7.3
192.168.1.3
ps:mysql使用现成的主机(搭建了双主 keepalived,主从也可以)。如果没有mysql,看上一个博客部署。1、下载及安装,使用上面的官网地址下载。
复制链接,wget下载
[root@localhost ~]# wget http://dl.mycat.io/1.6-release/mycat-server-1.6-release-20161028204710-linux.tar.gz
将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。
[root@localhost ~]# tar zxf mycat-server-1.6-release-20161028204710-linux.tar.gz[root@localhost ~]# cd mycat/修改配置文件:
server.xml: 定义用户以及系统相关变量,如端口等
schema.xml: 定义逻辑库,表、分片节点等内容
rule.xml: 定义分片规则
[root@mycat mycat]# vim conf/server.xml 80 <user name=mycat> //定义连接中间件的用户81 <property name=password>123456</property> //密码82 <property name=schemas>testdb</property> //逻辑库[root@mycat mycat]# cp conf/schema.xml conf/schema.xml.bak //备份配置文件[root@mycat mycat]# vim conf/schema.xml <?xml version=1.0?><!doctype mycat:schema system schema.dtd><mycat:schema xmlns:mycat=http://io.mycat/> <schema name=testdb checksqlschema=false sqlmaxlimit=100 datanode=dn1> //指明逻辑库,以及节点 </schema> <datanode name=dn1 datahost=host1 database=test_db /> //指定后端服务器中的真实库 <datahost name=host1 maxcon=1000 mincon=10 balance=0 writetype=0 dbtype=mysql dbdriver=native switchtype=1 slavethreshold=100> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writehost host=hostm1 url=192.168.1.1:3306 user=root //定义写的服务器(主)以及ip地址,用户密码 password=123.com> <!-- can have multi read hosts --> <readhost host=hosts2 url=192.168.1.8:3306 user=root password=123.com /> //定义读的服务器(从)以及ip地址,用户密码 </writehost> </datahost></mycat:schema>##这个配置文件已经把不必要配置项以及注释的都删了
重启mycat服务
让mycat拥有mysql命令
[root@mysql02 ~]# scp /usr/local/mysql/bin

亿速云华东bgp高防服务器
虽然冬天很冷 但这些回家的文案却暖到了骨子里…
阿里云服务器怎么用数据库
Sedo榜:“书本”域名vivlio.com超16万元成交
邮件群发工具哪个好
云服务器租用价格多少钱一年合适
php如何判断是中文还是英文
便宜的云服务器成都