MyCat应用案例.docx
《MyCat应用案例.docx》由会员分享,可在线阅读,更多相关《MyCat应用案例.docx(31页珍藏版)》请在冰豆网上搜索。
MyCat应用案例
MyCat使用手册
作者:
翟昆
目录
一、安装2
1.MyCat2
2.MyCat-web2
二、配置3
1.原项目修改3
1.1配置文件修改3
1.2pom.xml4
2.MyCat配置4
2.1server.xml4
2.2rule.xml5
2.3schema.xml5
一、安装
1.MyCat
从下载最新版本,mycat依赖于JDK1.7,如果没有需要安装一下;将下载的项目导入eclipse中,如下:
所有的配置文件都在resources中,源码都在java中;
启动项目,需要执行io.mycat.MycatStartup类;
2.MyCat-web
该项目是通过监听mycat的9066端口,来实时查看mycat的运行状态,从
导入eclipse,配置zookpeer信息后,启动项目,访问http:
//localhost:
8082/mycat
二、配置
1.原项目修改
1.1配置文件修改
修改项目中连接数据库配置:
修改前:
连接的是mysql数据库,用的是mysql的账号和密码;
spring.datasource.url=jdbc:
mysql:
//10.110.2.41:
3306/jn_point?
user=root&password=root_123&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root_123
修改后:
连接MyCat的逻辑库,用的是MyCat的逻辑库的账号和密码
spring.datasource.url=jdbc:
mysql:
//localhost:
8066/TESTDB?
useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
hibernate配置修改:
修改前:
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQLDialect
修改后:
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
1.2pom.xml
因为要使用mongodb数据库,因此需要做一些配置,在pom.xml中添加
--mongodb-->
org.springframework.boot
spring-boot-starter-data-mongodb
org.mongodb
mongo-java-driver
3.4.2
--mongodb-->
2.MyCat配置
2.1server.xml
作用:
相关配置信息,包括监听端口信息,用户名和访问权限等配置,一些系统级别的参数都可以在这里配置。
配置逻辑数据库,例如:
123456
TESTDB
配置了逻辑库TESTDB,用户名root,密码123456
2.2rule.xml
作用:
主要配置分库分表规则,这里我们使用snowflake_id的生成策略,因此我们自定义分库分表规则,如下
读取的配置文件tntsnowflake-id.txt如下:
2.3schema.xml
在该配置文件中包含schema、dataNode、dataHost三大标签,先来看一个完整的配置例子:
2.3.1schema标签
用于配置具体数据库表对应的节点、是否全局、是否分库分表等等;
1)全局表
首先判断该表是否为全局表(变更频次少,数据相对固定,数据量不大),如果是全局表,添加如下配置:
2)水平切分,需要将一张表带数据分布到多个库表中
对于水平切分,需要注意配置与其关联的表,使得关联表数据与其保存在同一个物理库中,避免跨库join操作
3)普通表,配置如下
2.3.2dataNode标签
用于配置节点和对应的物理数据库,配置如下:
database是实际数据库名称
2.3.3dataHost标签
用户配置具体数据库信息,配置如下:
其中各个属性代表的含义如下:
1)name属性
唯一标识dataHost标签,供上层的标签使用。
2)maxCon属性
指定每个读写实例连接池的最大连接。
也就是说,标签内嵌套的writeHost、readHost标签都会使用这个属性的值来实例化出连,接池的最大连接数。
3)minCon属性
指定每个读写实例连接池的最小连接,初始化连接池的大小
4)balance属性
负载均衡类型,目前的取值有3种:
1.balance=“0”,所有读操作都发送到当前可用的writeHost上。
2.balance=“1”,所有读操作都随机的发送到readHost。
3.balance=“2”,所有读操作都随机的在writeHost、readhost上分发。
5)writeType属性
负载均衡类型,目前的取值有3种:
1.writeType=“0”,所有写操作都发送到可用的writeHost上。
2.writeType=“1”,所有写操作都随机的发送到readHost。
3.writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
6)dbType属性
指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库。
例如:
mongodb、oracle、spark等。
7)dbDriver属性
指定连接后端数据库使用的Driver,目前可选的值有native和JDBC。
使用native的话,因为这个值执行的是二进制的mysql协
议,所以可以使用mysql和maridb。
其他类型的数据库则需要使用JDBC驱动来支持。
如果使用JDBC的话需要将符合JDBC4标准的驱动JAR包放到MYCAT\lib目录下,并检查驱动JAR包中包括如下目录结构的文
件:
META-INF\services\java.sql.Driver。
在这个文件内写上具体的Driver类名,例如:
com.mysql.jdbc.Driver。
8)switchType:
切换方式
-1:
不自动切换
1:
自动切换(默认)
2:
基于MySql主从同步的状态来决定是否切换
三、完整例子
mycat的配置
server.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEmycat:
serverSYSTEM"server.dtd">
serverxmlns:
mycat="http:
//io.mycat/">
0--0为需要密码登陆、1为不需要密码登陆,默认为0,设置为1则需要指定默认账户-->
1
0--1为开启实时统计、0为关闭-->
0--1为开启全加班一致性检测、0为关闭-->
3
--默认为type0:
DirectByteBufferPool|type1ByteBufferArena|type2NettyBufferPool-->
0
--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
0
--offheapformerge/order/group/limit1开启0关闭-->
1
--单位为m-->
64k
--单位为k-->
1k
0
--单位为m-->
384m
--是否采用zookeeper协调切换-->
true
--XARecoveryLog日志路径-->
--./-->
--XARecoveryLog日志名称-->
--tmlog-->
123456
TESTDB
user
TESTDB
true
server>
schema.xml
xmlversion="1.0"?
>
DOCTYPEmycat:
schemaSYSTEM"schema.dtd">
schemaxmlns:
mycat="http:
//io.mycat/">
writeType="0"dbType="mysql"dbDriver="native"switchType="1"
slaveThreshold="100">
selectuser()
3306"user="root"
password="123456">
writeType="0"dbType="mysql"dbDriver="native"switchType="1"
slaveThreshold="100">
selectuser()
3306"user="root"
password="root_123">
selectuser()
//127.0.0.1:
27017"user="root"password="123456">
schema>
rule.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEmycat:
ruleSYSTEM"rule.dtd">
rulexmlns:
mycat="http:
//io.mycat/">
id
func1
user_id
func1
id
hash-int
--枚举法-->
id
rang-long
id
mod-long
id
murmur
id
crc32slot
create_time
partbymonth
calldate
latestMonth
id
rang-mod
id
jump-consistent-hash
--自定义规则-->
id
snowflake-id
class="io.mycat.route.function.PartitionDirectBySnowflake">
tntsnowflake-id.txt
5
5--workid二进制位数,默认workid和dataAcenterid总长度是10-->
0--默认节点,当不配置时,不存储在任何地方-->
--自定义规则-->
class="io.mycat.route.function.PartitionByMurmurHash">
0--默认是0-->
2--要分片的数据库节点数量,必须指定,否则没法分片-->
160--一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍-->
--weightMapFile节点的权重,没有指定权重的节点默认是1。
以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。
所有权重值必须是正整数,否则以1代替-->
--/etc/mycat/bucketMapPath
用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,