mycat分片

2024-09-03 02:58
文章标签 分片 mycat

本文主要是介绍mycat分片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官方网站:

http://www.mycat.org.cn/

 

github地址

https://github.com/MyCATApache

 

1.1. Mycat安装

第一步:把MyCat的压缩包上传到linux服务器

第二步:解压缩,得到mycat目录

第三步:进入mycat/bin,启动MyCat

启动命令:./mycat start

停止命令:./mycat stop

重启命令:./mycat restart

 

注意:可以使用mysql的客户端直接连接mycat服务。默认服务端口为8066

1. Mycat分片

1.1. 需求

把商品表分片存储到三个数据节点上。

 

1.2. 安装环境

mysql节点1环境

操作系统版本 : centos6.4

数据库版本 : mysql-5.6

mycat版本 :1.4 release

数据库名 : db1db3

ip:192.168.25.134

 

mysql节点2环境

操作系统版本 : centos6.4

数据库版本 : mysql-5.6

mycat版本 :1.4 release

数据库名 : db2

ip:192.168.25.166

 

MyCat安装到节点1上(需要安装jdk

 

1.3. 配置schema.xml

1.3.1. Schema.xml介绍

Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。

 

schema 标签用于定义MyCat实例中的逻辑库

Table 标签定义了MyCat中的逻辑表

dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。

dataHost标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。

 

注意:若是LINUX版本的MYSQL,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题。

MySQL的配置文件中my.ini [mysqld] 中增加一行

  lower_case_table_names = 1

 

1.3.2. Schema.xml配置

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

 

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

<!-- auto sharding by id (long) -->

<table name="TB_ITEM" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

<table name="TB_USER" primaryKey="ID" type="global" dataNode="dn1,dn2" />

</schema>

<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataNode name="dn2" dataHost="localhost2" database="db2" />

<dataNode name="dn3" dataHost="localhost1" database="db3" />

<dataHost name="localhost1" 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.25.134:3306" user="root"

password="root">

<!-- can have multi read hosts -->

 

</writeHost>

</dataHost>

<dataHost name="localhost2" 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.25.166:3306" user="root"

password="root">

<!-- can have multi read hosts -->

</writeHost>

</dataHost>

</mycat:schema>

 

 

1.4. 配置server.xml

 

1.4.1. Server.xml介绍

server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。

 

1.4.2. Server.xml配置

<user name="test">

    <property name="password">test</property>

    <property name="schemas">TESTDB</property>

    <property name="readOnly">true</property>

</user>

 

1.5. 配置rule.xml

rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRulefunction这两个标签。在具体使用过程中可以按照需求添加tableRule

function

此配置文件可以不用修改,使用默认即可。

1.6. 测试分片

1.6.1. 创建表

配置完毕后,重新启动mycat。使用mysql客户端连接mycat,创建表。

-- ----------------------------

-- Table structure for tb_item

-- ----------------------------

DROP TABLE IF EXISTS `tb_item`;

CREATE TABLE `tb_item` (

  `id` bigint(20) NOT NULL COMMENT '商品id,同时也是商品编号',

  `title` varchar(100) NOT NULL COMMENT '商品标题',

  `sell_point` varchar(500) DEFAULT NULL COMMENT '商品卖点',

  `price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',

  `num` int(10) NOT NULL COMMENT '库存数量',

  `barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',

  `image` varchar(500) DEFAULT NULL COMMENT '商品图片',

  `cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',

  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1-正常,2-下架,3-删除',

  `created` datetime NOT NULL COMMENT '创建时间',

  `updated` datetime NOT NULL COMMENT '更新时间',

  PRIMARY KEY (`id`),

  KEY `cid` (`cid`),

  KEY `status` (`status`),

  KEY `updated` (`updated`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

 

-- ----------------------------

-- Table structure for tb_user

-- ----------------------------

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `username` varchar(50) NOT NULL COMMENT '用户名',

  `password` varchar(32) NOT NULL COMMENT '密码,加密存储',

  `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',

  `email` varchar(50) DEFAULT NULL COMMENT '注册邮箱',

  `created` datetime NOT NULL,

  `updated` datetime NOT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `username` (`username`) USING BTREE,

  UNIQUE KEY `phone` (`phone`) USING BTREE,

  UNIQUE KEY `email` (`email`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 COMMENT='用户表';

 

1.6.2. 插入数据

 

将此文件中的数据插入到数据库:

 

1.6.3. 分片测试

由于配置的分片规则为“auto-sharding-long”,所以mycat会根据此规则自动分片。

每个datanode中保存一定数量的数据。根据id进行分片

经测试id范围为:

Datanode11~5000000

Datanode25000000~10000000

Datanode310000001~15000000

 

15000000以上的id插入时报错:

[Err] 1064 - can't find any valid datanode :TB_ITEM -> ID -> 15000001

此时需要添加节点了。


这篇关于mycat分片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131833

相关文章

生产mongodb 分片与集群 方案

链接:http://my.oschina.net/pwd/blog/411439#navbar-header 注:主要是有一键安装的脚本可以借鉴

Spring Boot实现大文件分片下载

关于文件的上传和下载前面已经讲了2节课,今天我们主要讲一下如何分片下载,历史文章详解下面链接 Spring Boot实现文件上传和下载Spring Boot实现大文件分块上传 1.分片下载的好处 使用分片下载: 将大文件分割成多个小块进行下载,可以降低内存占用和网络传输中断的风险。这样可以避免一次性下载整个大文件造成的性能问题。断点续传: 实现断点续传功能,即在下载中途中断后,可以从已下载的

Redis 集群:如何实现数据的高效分片与负载均衡

Redis 集群:如何实现数据的高效分片与负载均衡 一 . 基本概念二 . 数据分片算法2.1 哈希求余算法2.2 一致性哈希算法2.3 哈希槽分区算法核心思路Redis 集群中最多只能有 16384 个分片吗 ?为什么一定要是 16384 个槽位 ? 三 . 基于 docker 进行集群的搭建3.1 创建目录和配置3.2 编写 generate.sh编写脚本脚本含义 3.3 编写 doc

Apache ShardingSphere数据分片弹性伸缩加解密中间件

Apache ShardingSphere Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。 软件背景 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互

MapReduce的shuffle过程详解(分片、分区、合并、归并)

shuffle过程 shuffle概念 shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。其在MapReduce中所处的工作阶段是map输出后到reduce接收前,具体可以分为map端和reduce端前

[置顶]mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境。 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡。 比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定。 测试环境 MYSQL版本:Server version: 5.5.53,到官网可以下载WINDWOS安装包。 注意:确保mysql版本为5.5以后

分片、侧链、状态通道、子链、DAG 是什么 区别

一、分片(sharding) 区块链网络由主链和分片(shards)链组成,分片链上交易处于自己独立的空间中,可以独立处理交易。 其核心思路是并非每个节点都需要处理所有的交易。 分片之前整个网络的处理取决于单个节点的处理。 分片后,只有同一片内的处理是同步的、一致的,不同分片之间则可以是异步的。 这种属于底层解决方案,因为它是在区块链本身的基本协议中实施的。   分片链的共

mysql主从复制和mycat读写分离

1. Mycat读写分离 数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置   Mycat读写分离和自动切换机制,需要mysql的主从复制机制配合。   1.1. Mysql的主从复制   主从配置需要注意

思考(六十七):按段(segment)分片的数据库应用

问题 在使用数据库的应用中,通常会通过对 ID 做 hash 映射到分库分表,达成压力均摊 在实际实施过程中,通常会有 2 个问题: 当实例进行扩容时,必须停服维护, rehash 用户数据不同实例压力分担不均,通常 ID 越大的那些实例压力大 因此,实作中,通常会使用按段(segment)划分维护数据集 本文,举 3 个例子来阐述其思想: 美团 Leaf-segment 数据库方案

存储架构模式-分片架构和分区架构

分片架构 分片架构就可以解决主从复制存在的问题,如果主机能够承担写的性能,那么主从就够了,如果不能,那么就需要分片架构了。 分片架构设计核心 分片架构设计核心-分片规则 案例1:不合理,因为不同年龄是不均匀的,城市也是不合理的 案例2:动态适合用户ID来分片,微博适合用hash分片 分片架构设计核心-路由规则 分片动态路由-配置中心 分片动态路由-路由转发