MyCat中间件的坑
首先说一下为什么选择MyCat,mysql分表分库的工具还有sharding-jdbc,是jar包的形式集成到项目的,可以相对灵活的配置自定义分片策略(PS:其实大部分业务场景是分片策略越简单越好啊,不会搞那么复杂也不需要太灵活,要不然扩容很麻烦),从架构上考虑感觉不太灵活,依赖与项目,性能负载都是跟项目走的,因为需要维护大量的数据源,感觉更适合小项目,但是它的有点就是已经收录了apache,应该是更成熟稳定(MyCat亲测是有些小问题的,包括隐藏Bug什么的),不过ShardingSphere也中间件,支持mysql,后面因为项目要求开源框架使用MyCat,所以转到MyCat中来了。
总结注意事项:1.分片键尽量耦合聚集,多表join需要相关的join表on关联的字段数据集中在一起,比如a left b on a.id=b.aid,那么a表按照a分片,b表按照aid分片,那么相关连的数据总是会落在一个节点上,否则存在跨库join,全表路由单节点匹配不到数据。
.....
最开始用1.6.7.4因为习惯性看到这个版本后面是稳定发布版本,1.6.7.5是-test版本,不过还是转移到MyCat1.6.7.5(1.6.7.4发现有问题,1.部分mysql客户端多刷几次会报错,2.select * from a where a.id in (select id from b))这种in子查询会偶发性数据不完整,有时候出来一条数据,有时候是正常的,很恼火,1.6.7.5上面没有这个问题,感兴趣的同学可以自己下载源码编译打包,最新的源码缺少的文件可以参考:
public class StatusFlags {
public static int SERVER_MORE_RESULTS_EXISTS = 0x0008;
}
MyCat是中间件,伪装的mysql服务器,因此应用端这边除了复杂的sql改造,其它不需要动,MyCat也相对简单,直接配置好,运行脚本即可,重要的几个配置文件是:schema.xml/rule.xml/server.xml,可以参考官方指南。
schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--dataNode:没有配置的表则会走默认节点;其它属性参见文档-->
<schema name="medicaredb" checkSQLschema="true" sqlMaxLimit="100" dataNode="medicare">
<!--分片表-一致性HASH-->
<table name="t_person,..." dataNode="medicareDn1$1-32" rule="sharding-person_id-murmur"/>
<!--全局表-->
<table name="t_device,..." type="global" dataNode="medicareDn1$1-32,medicare" />
<!--压力测试分片表-->
<table name="travelrecord" dataNode="medicareDn1$1-32" rule="sharding-id-murmur"/>
</schema>
<dataNode name="medicare" dataHost="aloneDataBase" database="medicare" />
<dataNode name="medicareDn1$1-32" dataHost="cutDataBaseDn1" database="medicare_$1-32" /> <dataHost name="aloneDataBase" maxCon="100" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.10.122:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<!-- maxCon=3250解释一下,数据库设置了最大3300,32个数据库,压力测试每个库100线程压,就需要3200,留下50个给程序或其它调试工具用,要不然压测过程会有抢占 -->
<dataHost name="cutDataBaseDn1" maxCon="3250" minCon="100" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="192.168.16.147:3306" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
maxCon的设置是参考了对应的mycat-nettool自带的压力测试工具
MyCat中间件的坑的更多相关文章
- Mycat 中间件配置初探与入门操作
Mycat中间件配置初探与入门操作 By:授客 QQ:1033553122 实践环境 Mycat-server-1.5.1-RELEASE-20161130213509-win.tar.gz 下载地址 ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
- MyCat中间件:读写分离(转)
利用MyCat中间件实现读写分离 需要两步: 1.搭建MySQL主从复制环境 2.配置MyCat读写分离策略 一.搭建MySQL主从环境 参考上一篇博文:MySQL系列之七:主从复制 二.配置MyCa ...
- mysql mycat 中间件安装与使用
一,什么是mycat 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...
- .NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)
.NET Core 2.0 新时代 万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Stand ...
- Mycat中间件
数据库中间件Mycat自我介绍 一.mycat概述 1.功能介绍 mycat一个开源的分布式数据库系统,是一个实现了mysql协议的server前端用户可以把它看成一个数据库代理,用mysql客户端工 ...
- CentOS7安装MYCAT中间件
MYCAT是一个被广泛使用的功能强大的开源的数据库中间件,当然他的理想不仅仅是做一个中间件.这篇文章主要记录MYCAT服务的搭建过程,下篇会继续更新MYCAT的使用配置. 本篇记录将使用CentOS7 ...
- mycat中间件--schema.xml配置文件详解
schema.xml管理着MyCat的逻辑库.表.分片规则.DataNode以及DataSource.弄懂这些配置,是正确使用MyCat的前提. <?xml version="1.0& ...
- mycat中间件--linux安装mycat1.6版本
一.mycat安装前准备1.mycat下载地址,点击此处进行下载2.环境要求如下: mycat使用Java开发,因为用到了JDK 7的部分功能,所以在使用前请确保安装了JDK 7.0,并设置了正确的J ...
- mycat中间件安装与使用
前提: 安装JDK版本在7.0及其以上 1.下载: 下载地址在:http://dl.mycat.io/ 选择1.6-release版本下载 2.安装: 直接解压即可: tar -zxf Mycat-s ...
随机推荐
- Go语言互斥锁(sync.Mutex)和读写互斥锁(sync.RWMutex)
暴力锁 package main import ( "fmt" "sync" "time" ) /* Go语言包中的 sync 包提供了两种 ...
- Unity WebGL与JS脚本交互
1.Unity调用JavaScript脚本方法 官网文档 老版本方法 之前Unity提供的Application.ExternalCall方法现在已经被设为过时弃用.(但是现在还能用,但是不知道什么时 ...
- mac 查看,终止进程
找到其他 活动监视器 在这里可以查看和cpu占用 杀死有问题的过程: 1.它占用了大量CPU周期或内存, 2.在"活动监视器"中被突出显示为已崩溃, 先单击该过程,点击x可以终止进 ...
- Java-Excel表数据转List对象->导入数据库
1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.util.ArrayList; 4 import java ...
- git和coding的使用
1.注册 coding ::::::https://coding.net/ 2.个人设置中添加上邮箱账号和密码 3.下载git 4.在coding中新建项目,并对项目初始化---生成分支,会生成url ...
- Flink 中 DataStream 和 DataSet区别
DataSet与DataStream的区别.使用 DataSet同DataStream从其接口封装.真实计算Operator有很大的差别,Dataset的实现在flink-javamodule中,而D ...
- CF960G
首先我们考虑$n$的情况,显然以$n$为分界线可以将整个序列分成两部分,就像这样: . 那么我们考虑:在这个东西前面才会有前缀最大的统计,在这个东西后面才会有后缀最大的统计 这样就剩下了$n-1$个元 ...
- Vue 二维码生成插件
1. 安装 qrcode.vue 仓库地址 // vue2 安装1.x版本.vue3 安装3.x版本 npm install --save qrcode.vue // 或 yarn add qrcod ...
- 微信小程序:流程/步骤流/时间轴自定义组件
效果图: 1.首先在小程序components目录下新建一个名为step的文件夹,再建step组件名.结构如下. 直接上代码 step.wxml <view class="step&q ...
- 上分准备 VP Codeforces Round #762 (Div. 3) 4题ABCE
+00:02 +00:16 +01:08 +02:07 VP 情况 4/8 ABCE ,赛时排名可以到823,什么时候我可以上个青 B 本想写个map的二分的,发现自己不会,写了个普普通通的二分 ...