栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mycat的基本介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mycat的基本介绍


文章目录
  • 前言
  • 一、Mycat概念与配置
    • 1. Mycat介绍与核心概念
      • 1.1 基本介绍
      • 1.2 核心概念
    • 2. 下载、解压Mycat
      • 2.1 下载
      • 2.2 解压
      • 2.3 目录
    • 3. Mycat配置详解
      • 3.1 server.xml
      • 3.2 schema.xml
        • 3.2.1 dataHost标签
        • 3.2.2 dataNode标签
        • 3.2.3 table标签
      • 3.3 rule.xml
      • 3.4 ZK配置
      • 3.5 启动停止
    • 4. MyCat全局ID
      • 4.1 文件方式
        • 4.1.1 配置
        • 4.1.2 使用
        • 4.1.3 优点
        • 4.1.4 缺点
      • 4.2 数据库方式
        • 4.2.1 配置
        • 4.2.1 使用
      • 4.3 本地时间戳方式
        • 4.3.1 配置
        • 4.3.2 使用
      • 4.4 ZK
        • 4.4.1 配置
        • 4.4.2 使用
      • 4.5 使用
    • 5. MyCat监控与日志查看
      • 5.1 监控
        • 5.1.1 命令行监控
        • 5.1.2 mycatweb监控
      • 5.2 日志
        • 5.2.1 wrapper.log日志
        • 5.2.2 mycat.log日志
    • 6. MyCat实战案例
  • 总结


前言
  • 掌握Mycat特性与详细配置含义
  • 了解Mycat监控与日志查看

一、Mycat概念与配置 1. Mycat介绍与核心概念 1.1 基本介绍

历史: 从阿里cobar升级而来,由开源组织维护。

定位:运行在应用和数据库之间,可以当做一个MySQL服务器使用。实现对MySQL数据库的分库分表,也可以通过JDBC支持其他的数据库。

特性:

  • 可以当作一个MySQL数据库来使用
  • 支持MySQL之外的数据库,通过JDBC实现
  • 解决了多表Join、分布式事务、全局序列号、翻页排序
  • 支持ZK配置,带监控mycat-web(已经停止维护)
1.2 核心概念
  • 主机: 物理主机,一台服务器,一个数据库服务,一个3306端口
  • 物理数据库:真实的数据库
  • 物理表:真实的表
  • 分片:将原来单个数据库的数据切分后分散存储在不同的数据库节点
  • 分片节点:分片以后数据存储的节点
  • 分片键:分片依据的字段
  • 分片算法:分片的规则,例如随机、取模、范围、哈希、枚举以及各种组合算法
  • 逻辑表:相对于物理表,是分片表聚合后的结果,对于客户端来说跟真实的表没有区别
  • 逻辑数据库:相对于物理数据库,是数据节点聚合后的结果

一个逻辑表可以映射到多个节点的一张表(分片表),也可以映射到一个节点的表(非分片表),也可以映射到一个节点的多张表(单库分表)

2. 下载、解压Mycat

Mycat官网

2.1 下载
wget http://dl.mycat.org.cn/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
2.2 解压
tar -xzvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
2.3 目录
目录作用
bin启动目录
catlet空目录
conf配置目录
libjar包依赖
logs日志目录
3. Mycat配置详解

主要的配置文件server.xml、schema.xml、rule.xml和具体的分片配置文件。

3.1 server.xml

包含系统配置信息

system标签: 例如字符集、线程数、心跳、分布式事务开关等等。

user标签:配置登录用户和权限。


	123456
	db1

mycat对密码加密

java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456
3.2 schema.xml

schema在MySQL里面跟数据库是等价的。

schema.xml包括逻辑库、表、分片规则、分片节点和数据源,可以定义多个schema

这里面三个主要的标签(dataHost、dataNode、table):

3.2.1 dataHost标签

配置物理主机的信息,readhost是从属于writehost的。


    select user()
    
    
    


    select user()
    
    
    

balance:负载的配置,决定select语句的负载

值作用
0不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
1所有读操作都随机发送到当前的writeHost对应的readHost和备用的writeHost
2所有读操作都随机发送到所有的writeHost,readHost上
3所有读操作都只发送到writeHost的readHost上

writeType:读写分离的配置,决定update、delete、insert语句的负载

值作用
0所有写操作都发送到可用的writeHost上(默认第一个,第一个挂了以后发送到第二个)
1所有的写操作都随机发送到writeHost上

switchType:主从切换配置

值作用
-1表示不自动切换
1默认值,表示自动切换
2基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
3基于MySQL galera cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'
3.2.2 dataNode标签

一个Node节点就是一个schema,相当于MySQL中的一个库,数据节点与物理数据库的对应关系。



3.2.3 table标签

表名和库名最好都用小写

定义了逻辑表,以及逻辑表分布的节点和分片规则:


    
    
配置作用
checkSQLschema在查询SQL中去掉逻辑库名
sqlMaxLimit自动加上limit控制数据的返回
primaryKey指定改逻辑表对应真实表的主键。MyCat会缓存主键(通过primaryKey属性配置)与具体dataNode的信息。 当分片规则(rule)使用非主键进行分片时,那么会在使用主键进行查询时,MyCat就会通过缓存先确定记录在哪个dataNode上,然后再在该dataNode上执行查询。 如果没有缓存/缓存并没有命中的话,还是会发送语句给所有的dataNode。
dataNode数据分片的节点
autoIncrement自增长(全局序列),true代表主键使用自增长策略
type全局表:global。其他:不配置
3.3 rule.xml

定义了分片规则和算法

分片规则:


	
		id
		rang-long
	

分片算法:


	autopartition-long.txt

分片配置:autopartition-long.txt

0-2000000=0
2000001-4000000=1
3.4 ZK配置

除了本地文件配置之外,MyCat也支持ZK配置(管理配置和全局ID),用于实现集群扩展。

启用ZK配置:mycat/conf/myid.properties

loadZk=false
zkURL=127.0.0.1:2181
clusterId=mycat-cluster-1
myid=mycat_fz_01
clusterSize=3
clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_04
type=server
boosterDataHosts=dataHost1

复制conf目录下配置文件到zkconf下

cd /root/mycat/conf
cp *.txt *.xml *.preperties zkconf/

执行bin目录下init_zk_data.sh

cd /root/mycat/bin
./init_zk_data.sh

注意: 如果执行init_zk_data.sh脚本报错,代表未写入成功,此时不要启动ZK配置并重启,否则本地文件会被覆盖。

启动时如果loadzk=true启动时,会自动从ZK下载配置文件覆盖本地配置。

在这种情况下如果修改配置,需要先修改conf目录的配置,copy到zkconf,再执行上传。

3.5 启动停止

检查环境变量配置:conf/wrapper.conf

wrapper.java.command=/usr/local/java/jdk1.8.0_181/bin/java

进入mycat/bin目录(注意要先启动物理数据库)

操作命令
启动./mycat start
停止./mycat stop
重启./mycat restart
查看状态./mycat status
前台运行./mycat console
4. MyCat全局ID

配置文件server.xml,修改以后需要重启mycat服务。
sequnceHandlerType:配置MyCat全局ID

值作用
0文件
1数据库
2本地时间戳
3ZK
4.1 文件方式 4.1.1 配置
0

文件方式,配置conf/sequence_conf.properties

CUSTOMER.HISIDS=
CUSTOMER.MINID=1001
CUSTOMER.MAXID=2000
CUSTOMER.CURID=1000
4.1.2 使用

获取全局ID语法:

select next value for MYCATSEQ_CUSTOMER;

在插入语句种使用:

INSERT INTO t1(id, name)VALUES(next value for MYCATSEQ_CUSTOMER, '张三');
4.1.3 优点

本地加载,读取速度较快。

4.1.4 缺点

当MyCat重新发布后,配置文件种的sequence需要替换(还原),MyCat不能做集群部署。

4.2 数据库方式 4.2.1 配置
1

数据库方式,配置conf/sequence_db_conf.properties,需要一个表来存储当前ID和3个存储过程来生成ID,所以指定从哪个节点去读取。

GLOBAL=dn1
COMPANY=dn1
CUSTOMER=dn1

在当前节点创建MYCAT_SEQUENCE表:

DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE (
name VARCHAr(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, remark varchar(100), PRIMARY KEY(name)) ENGINE=InnoDB;

注:可以在schema.xml配置文件种配置这张表,供外部访问。

创建存储过程——获取当前sequence的值

DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAr(50)) RETURNSvarchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE retval VARCHAr(64);
SET retval="-999999999,null";
SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR) ) INTOretval FROMMYCAT_SEQUENCE WHERe name = seq_name;
RETURN retval ;
END
;;
DELIMITER ;

创建存储过程——获取下一个sequence

DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAr(50)) RETURNSvarchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERe name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;

创建存储过程——设置sequence

DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAr(50), valueINTEGER) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERe name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;
4.2.1 使用

数据库插入记录

INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('T1', 1, 100, '表1');
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('T2', 1, 100, '表2');

获取全局ID语法:

select next value for MYCATSEQ_T1;
4.3 本地时间戳方式 4.3.1 配置
2

ID=64位二进制(42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加) ,长度为18位)

本地时间戳方式,配置conf/sequence_time_conf.properties

WORKID=01
4.3.2 使用
select next value for MYCATSEQ_GLOBAL;
4.4 ZK
3
4.4.1 配置

修改 conf/myid.properties

设置 loadzk=true(启动时会从 ZK 加载配置,一定要注意备份配置文件,并且先用bin/init_zk_data.sh,把配置文件写入到ZK)
ZK方式,配置conf/sequence_dis_conf.properties

# 代表使用ZK
INSTANCEID=ZK
# 与myid.properties中的CLUSTERID设置的值相同
CLUSTERID=010

复制配置文件

cd /usr/local/soft/mycat/conf
cp *.txt *.xml *.properties zkconf/
chown -R zkconf/
cd /usr/local/soft/mycat/bin
./init_zk_data.sh
4.4.2 使用
select next value for MYCATSEQ_GLOBAL
4.5 使用

在schema.xml的table标签上配置autoIncrement="true",不选哟获取和指定序列的情况下,就可以使用全局ID了。


5. MyCat监控与日志查看 5.1 监控 5.1.1 命令行监控

连接到管理端口9066,注意必须要带IP

mysql -uroot -h172.26.215.126 -p123456 -P9066
命令作用
show @@help;查看所有命令
show @@server;查看服务器状态,包括占用内存等
show @@database;查看数据库
show @@datanode;查看数据节点
show @@datasource;查看数据源
show @@connection;该命令用于获取Mycat的前端连接状态,即应用与mycat的连接
show @@backend;查看后端连接状态
show @@cache;查看缓存使用情况 SQLRouteCache: SQL路由缓存 TabelD2DataNodeCache:缓存表主键与分片对应关系 ER_SQL2PARENTID:缓存ER分片中子表与父表关系
reload @@config;重新加载基本配置(热加载),使用这个命令时mycat服务不可用
show @@sysparam;查询mycat服务的系统参数
show @@sql.high;执行频率高的SQL
show @@sql.slow;慢SQL
reload @@sqlslow=5;设置慢SQL命令
show @@syslog limit=50;查看最近50条系统日志
5.1.2 mycatweb监控

下载

wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
tar -xzvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz

启动

cd mycat-web
nohup ./start.sh &

停止

kill start.jar

mycat server.xml 配置, 重启生效


1
5.2 日志

log4j的level配置为debug

5.2.1 wrapper.log日志

wrapper 日志:mycat 启动,停止,添加为服务等都会记录到此日志文件,如果系统环境配置错误或缺少配置时,导致 Mycat 无法启动,可以通过查看wrapper.log定位具体错误原因。

5.2.2 mycat.log日志

mycat.log 为 mycat 主要日志文件,记录了启动时分配的相关buffer 信息,数据源连接信息,连接池,动态类加载信息等等。

在 conf/log4j2.xml 文件中进行相关配置,如保留个数,大小,字符集,日志文件大小等。

6. MyCat实战案例

待定……


总结
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926511.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号