高可用软件Mycat介绍(一)

Mycat介绍

Mycat是什么?
Mycat背后是阿里曾经开源的知名产品——Cobar,Cobar是阿里巴巴研发的关系型数据的分布式处理系统
从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问, 而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里

• 支持 SQL 92标准
• 支持Mysql集群,可以作为Proxy使用
• 支持JDBC连接多数据库
• 支持各种数据库,包括Mysql 、mongodb、oracle、sqlserver 、hive 、db2 、 postgresql。
• 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群
• 自动故障切换,高可用性
• 支持读写分离,支持Mysql双主多从,以及一主多从的模式
• 支持全局表,数据自动分片到多个节点,用于高效表关联查询
• 支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询
• 支持一致性Hash分片,有效解决分片扩容难题
• 多平台支持,部署和实施简单
• 支持Catelet开发,类似数据库存储过程,用于跨分片复杂SQL的人工智能编码实现
• 支持NIO与AIO两种网络通信机制,Windows下建议AIO,Linux下目前建议NIO
• 支持Mysql存储过程调用
• 以插件方式支持SQL拦截和改写
• 支持自增长主键、支持Oracle的Sequence机制

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上的查询结果,并返回给用户。

Mycat应用场景

Mycat几个典型的应用场景:
•单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
•分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
•多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化
•报表系统,借助于Mycat的分表能力,处理大规模报表的统计

Mycat安装

•预先安装Java运行环境 yum install -y java
•确保本机的hostname在/etc/hosts里存在 为了防止后续启动mycat的时候会报错
[root@vmware1 logs]# env XDG_SESSION_ID=5 HOSTNAME=vmware1
[root@vmware1 logs]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4 vmware1
•Mycat本机预先安装MySQL环境,但不需要启动MySQL实例

下载Mycat-server-xxxxx.linux.tar.gz

 http://dl.mycat.io/1.6-RELEASE/ 

解压文件

tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

创建日志目录 (不建的话会报错)
cd mycat
mkdir logs
在这里插入图片描述

在这里插入图片描述

把mycat 的bin/目录写到环境变量里面
以后可以直接启动mycat

在这里插入图片描述

source .bash_profile

Mycat配置之schema.xml

Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataHost
主要有三个标签,一是schema标签,二是dataNode标签,三是dataHost标签

[root@wyg003 conf]# vi 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="localhost1" database="course2" /> 
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"> 
<heartbeat>select user()</heartbeat> 
<writeHost host="master1" url="10.0.0.201:3306" user="root" password="123456"> 
	<readHost host="slave1" url="10.0.0.203:3306" user="root" password="123456" /> 
</writeHost> 
</dataHost> 
</mycat:schema> 
update mysql.user set host='%' where user='root';  

(如果mycat上读不到master1上的表信息 ,在master1上执行)

flush privileges;

特别注意:mysql的配置文件中要添加下面2行参数来更改字符集,不然会报错

character-set-server=utf8
collation-server=utf8_general_ci
default_authentication_plugin=mysql_native_password
create user 'lwm2'@'10.0.0.%' identified with mysql_native_password by '123456';
grant select,insert,update,delete on *.* to 'lwm'@'10.0.0.%';
grant all privileges on *.* to 'root'@'%' WITH GRANT OPTION;

(8.0需要加上默认加密方式)

 mysql -u root -p -P 8066 -h 127.0.0.1 --default-auth=mysql_native_password

(8.0需要加上默认加密方式)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值