MyCat安装配置,及数据分片

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
在这里插入图片描述在这里插入图片描述

文章目录

  • 前言
  • 一、Maycat是什么?
  • 二、Maycat安装
    • 2.1 下载
    • 2.2 MyCat的安装及启动
      • 2.2.1上传包到linux解压
      • 2.2.2 启动注意事项
      • 2.2.3 启动失败问题记录
      • 2.2.4 登录MyCat
  • 三、MyCat分片
      • 3.1 MyCat架构
      • 3.2 分片配置
        • 3.2.1 配置文件schema.xml
        • 3.2.2 配置文件server.xml
      • 3.3 MyCat分片测试
      • 3.4 MyCat分片规则
        • 3.4.1 按主键范围分片rang-long
        • 3.4.2 一致性哈希 murmur
        • 3.4.3 取模分片
        • 3.4.4 枚举分片

是

前言

那么大表的数据如何优化呢?

当MySQL单表记录数过大时,数据库的CRUD性能会明显下降

  1. 限定数据的范围 例如日期限制在一个月之内

  2. 读/写分离

  3. 对数据库表进行垂直拆分
    根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表

  4. 对数据库表进行水平拆分
    保持数据表结构不变,通过某种策略对数据进行分片。这样每一片数据分散到不同库中,达到了分布式的目的。 水平拆分可以支撑非常大的数据量。

    如何实现数据库的水平拆分呢
    中间件代理: 在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。 我们现在谈的 Mycat 、360的Atlas、网易的DDB等等都是这种架构的实现。

一、Maycat是什么?

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

Mycat 背后是阿里曾经开源的知名产品——Cobar。Cobar的核心功能和优势是MySQL数据库分片,此产品曾经广为流传,阿里随后开源的 Cobar,并维持到 2013 年年初。 Cobar 的思路和实现路径的确不错。基于 Java 开发的,实现了 MySQL 公开的二进制传输协议,巧妙地将自己伪装成一个 MySQL Server,目前市面上绝大多数 MySQL 客户端工具和应用都能兼容。比自己实现一个新的数据库协议要明智的多,因为生态环境在哪里摆着。 Mycat 是基于 cobar 演变而来,对 cobar 的代码进行了彻底的重构,使用 NIO 重构了网络模块,并且优化了 Buffer 内核,增强了聚合,Join 等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。简单的说,**MyCAT是一****个新颖的数据库中间件产品支持 mysql 集群,或者 mariadb cluster,提供高可用性数据分片集群。**你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。

支持以下数据库
在这里插入图片描述

二、Maycat安装

2.1 下载

下载地址:https://github.com/MyCATApache/Mycat-download/

在这里插入图片描述

在这里插入图片描述

2.2 MyCat的安装及启动

2.2.1上传包到linux解压

Mycat的默认端口号为:8066

# 1、将 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 上传至服务器
# 2、将压缩包解压缩。建议将mycat放到/usr/local目录下。
tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local# 3、进入mycat目录的bin目录,启动mycat
./mycat start# 4、停止MyCat
./mycat stop# 5、Mycat的默认端口号为:8066

目录结构为:
在这里插入图片描述

2.2.2 启动注意事项

server.xml中的逻辑库和schema.xml中的逻辑库名称对应

在这里插入图片描述
在这里插入图片描述

2.2.3 启动失败问题记录

在这里插入图片描述
解决
Bit Server VM警告:忽略选项MaxPermSize=64M,因为在8.0中已删除
这是由于MaxPermSize=64M选项在8.0版本中被移除了。为了解决这个问题,您可以按照以下步骤进行配置调整:

  1. 进入Mycat的配置文件目录:mycat/conf/
  2. 编辑wrapper.conf文件,可以使用命令:vim wrapper.conf
  3. 定位到wrapper.java.additional.3=-XX:MaxPermSize=64M这一行配置
  4. 将该行配置注释掉,改为:#wrapper.java.additional.3=-XX:MaxPermSize=64M
  5. 保存文件并从新启动Mycat服务

启动正常

在这里插入图片描述
在这里插入图片描述

2.2.4 登录MyCat

终端登录

mysql  -uroot -p  -h127.0.0.1  -P8066

在这里插入图片描述navicat登录

在这里插入图片描述
在这里插入图片描述

三、MyCat分片

3.1 MyCat架构

在这里插入图片描述1、逻辑库(schema)

前面一节讲了数据库中间件,通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。

2、逻辑表(table)

既然有逻辑库,那么就会有逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。

3、分片表:是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。 总而言之就是需要进行分片的表。

4、非分片表:一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。

5、数据节点(dataNode): 数据节点也被称之为分片节点,数据切分以后,每一个部分就可以被称之为一个分片。每一个分片需要对应一个节点主机。

6、节点主机(dataHost):数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片节点,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)。

7、分片规则(rule):

前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。

3.2 分片配置

3.2.1 配置文件schema.xml

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

schema标签用于定义MyCat实例中的逻辑库
Table 标签定义了MyCat中的逻辑表
rule用于指定分片规则

auto-sharding-long的分片规则是按ID值的范围进行分片 1-5000000 为第1片
5000001-10000000 为第2片… 具体设置我们会在第5小节中讲解。dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。dataHost标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。

在这里插入图片描述修改schema.xml文件
在这里插入图片描述

3.2.2 配置文件server.xml

server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号

<property name="charset">utf8</property>

修改user的设置 , 我们这里为 ITCAST 设置了两个用户,这里的TESTDB逻辑库要和schema.xml中的逻辑库一致

<user name="test"><property name="password">test</property><property name="schemas">TESTDB</property>
</user>
<user name="root"><property name="password">123456</property><property name="schemas">TESTDB</property>
</user>

3.3 MyCat分片测试

登录Mycat后,执行下列语句创建一个表,前提是你在schema.xml的逻辑表中有指定下表

CREATE TABLE TB_TEST (id BIGINT(20) NOT NULL,title VARCHAR(100) NOT NULL ,PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

测试改名后能否成功,发现失败,因此需要在schema.xml中指定逻辑表
在这里插入图片描述使用TB_TEST后创建成功,我们在查看MySQL的3个库,发现表都自动创建好啦。

在这里插入图片描述

接下来是插入表数据,注意,在写 INSERT 语句时一定要写把字段列表写出来

INSERT INTO TB_TEST(ID,TITLE) VALUES(1,'goods1');
INSERT INTO TB_TEST(ID,TITLE) VALUES(2,'goods2');
INSERT INTO TB_TEST(ID,TITLE) VALUES(3,'goods3');

在这里插入图片描述

在这里插入图片描述

我们会发现这些数据被写入到第一个节点中了,那什么时候数据会写到第二个节点中呢?

我们插入下面的数据就可以插入第二个节点

INSERT INTO TB_TEST(ID,TITLE) VALUES(5000001,'goods5000001');

在这里插入图片描述在这里插入图片描述

因为我们采用的分片规则是每节点存储500万条数据,所以当ID大于5000000则会存储到第二个节点上。
目前只设置了两个节点,如果数据大于1000万条,会怎么样呢?执行下列语句测试一下

INSERT INTO TB_TEST(ID,TITLE) VALUES(10000001,'goods10000001');

在这里插入图片描述在这里插入图片描述

3.4 MyCat分片规则

3.4.1 按主键范围分片rang-long

通过上述测试证明,分片的规则是每张表存储500万的数据,那么这个数量可以修改吗?当然是可以的,请往下看

下图清晰的展示了规则的关联性

在这里插入图片描述

3.4.2 一致性哈希 murmur

当我们需要将数据平均分在几个分区中 ,需要使用一致性hash规则
我们找到function的name为 murmur 的定义,将count属性改为3,因为我要将数据分成3片

在rule.xml中配置如下:

<tableRule name="sharding-by-murmur"><rule><columns>id</columns><algorithm>murmur</algorithm></rule>
</tableRule><function name="murmur" class="org.opencloudb.route.function.PartitionByMurmurHash"><!-- 默认是0 --><property name="seed">0</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 --><property name="count">3</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 --><property name="virtualBucketTimes">160</property><!-- 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替  --><!-- <property name="weightMapFile">weightMapFile</property> --><!-- 用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 --><!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> -->
</function>

在schema.xml中配置逻辑表时,指定规则为sharding-by-murmur-order

<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" />
3.4.3 取模分片
<tableRule name="mod-long"><rule><columns>id</columns><algorithm>mod-long</algorithm></rule>
</tableRule><function name="mod-long" class="io.mycat.route.function.PartitionByMod"><property name="count">3</property>
</function>

id对count=3取模,结构肯定是0,1,2,因此根据结果放到3个库的其中一个

配置说明 :

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与function的对应关系
class指定该分片算法对应的类
count数据节点的数量

在schema.xml中配置逻辑表时,指定规则为mod-long

<table name="tb_brand" dataNode="dn1,dn2,dn3" rule="mod-long" />
3.4.4 枚举分片

通过在配置文件中配置可能的枚举值, 指定数据分布到不同数据节点上, 本规则适用于按照省份或状态拆分数据等业务 , 配置如下:
status是枚举值

<tableRule name="sharding-by-intfile"><rule><columns>status</columns><algorithm>hash-int</algorithm></rule>
</tableRule><function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"><property name="mapFile">partition-hash-int.txt</property><property name="type">0</property><property name="defaultNode">0</property>
</function>

partition-hash-int.txt ,指定枚举指与节点索引的对应关系 内容如下 :

	1=02=13=2

配置说明:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与function的对应关系
class指定该分片算法对应的类
mapFile对应的外部配置文件
type默认值为0 ; 0 表示Integer , 1 表示String
defaultNode默认节点 ; 小于0 标识不设置默认节点 , 大于等于0代表设置默认节点 ;
默认节点的所用:枚举分片时,如果碰到不识别的枚举值, 就让它路由到默认节点 ; 如果没有默认值,碰到不识别的则报错 。

在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机+三维建模:倾斜摄影技术详解

无人机倾斜摄影测量技术是一项高新技术&#xff0c;近年来在国际摄影测量领域得到了快速发展。这种技术通过从一个垂直和四个倾斜的五个不同视角同步采集影像&#xff0c;从而获取到丰富的建筑物顶面及侧视的高分辨率纹理。这种技术不仅能够真实地反映地物情况&#xff0c;还能…

解决python/pycharm中import导入模块时报红却能运行的问题

一、问题 导入时报红&#xff0c;如下 二、解决 右键单击项目&#xff0c;将项目Mark Directory as→Sources Root 三、效果 报红消失 学习导航&#xff1a;http://www.xqnav.top

基于C++基础知识的循环语句

一、while循环 while循环语句形式如下&#xff1a; while(表达式){语句 } 循环每次都是执行完语句后回到表达式处重新开始判断&#xff0c;重新计算表达式的值&#xff0c;一旦表达式的值为假就退出循环。用花括号括起来的多条简单语句&#xff0c;花括号及其包含的语句被称…

淡茶和浓茶的标准

按照《品深淡茶冲泡标准》&#xff0c;淡茶茶汤中的咖啡碱不得高于31.67mg/100mL&#xff0c;可可碱不得高于2.67mg/mL&#xff0c;茶碱不得高于1.50mg/100mL&#xff0c;茶多酚不得高于143mg/mL&#xff0c;按照各类茶叶中各物质的含量情况&#xff0c;茶水比例不得高于1:150&…

JRT1.6发布

经过51的三天努力&#xff0c;完成基于JRT的质控核心部分。框架部分已经达到了第一个可生产版本。 可生产包括以下部分&#xff1a; 1.Web开发基础和发布运维基础 2.Linux和WIndows客户端浏览器 3.Linux和WIndows客户端打印导出程序 4.Linux和WIndows初始化程序 5.Linux和WInd…

《自动机理论、语言和计算导论》阅读笔记:p428-p525

《自动机理论、语言和计算导论》学习第 14 天&#xff0c;p428-p525总结&#xff0c;总计 98 页。 一、技术总结 1.Kruskal’s algorithm(克鲁斯克尔算法) 2.NP-Complete Problems p434, We say L is NP-complete if the following statements are true about L: (1)L is …

计算机网络面试高频:输入域名会发生那些操作,开放性回答

更多大厂面试内容可见 -> http://11come.cn 计算机网络面试高频&#xff1a;输入域名会发生那些操作&#xff0c;开放性回答 输入域名之后&#xff0c;会发生哪些操作&#xff1f; 当在浏览器中输入www.baidu.com并按下回车键时&#xff0c;会触发一系列复杂的网络过程&am…

【菜单下拉效果】基于jquery实现二级菜单下拉效果(附完整源码下载)

Js菜单下拉特效目录 &#x1f354;涉及知识&#x1f964;写在前面实现效果&#x1f367;一、涉及知识&#x1f333;二、具体实现2.1 搭建一级菜单2.2 搭建二级菜单项2.3 引入js文件2.4 构建CSS文件 &#x1f40b;三、源码获取&#x1f305; 作者寄语 &#x1f354;涉及知识 ht…

VastGaussian:用于大型场景重建的巨大3D高斯函数

VastGaussian:用于大型场景重建的巨大3D高斯函数 摘要IntroductionRelated WorkPreliminariesMethod VastGaussian: Vast 3D Gaussians for Large Scene Reconstruction. 摘要 现有基于NeRF的大型场景重建方法在视觉效果和渲染速度方面往往存在限制。虽然最近的3D高斯分裂在小…

AI智体的分级:从基于规则到基于LLM

摘要&#xff1a; AI智体被定义为感知环境、做出决策和采取行动的人工实体。受SAE&#xff08;汽车工程师学会&#xff09;自动驾驶6个级别的启发&#xff0c;AI智体也根据效用和强度进行分类&#xff0c;分为以下几个级别&#xff1a;L0——无AI&#xff0c;有工具&#xff0…

【C++】stack、queue和priority_queue的模拟实现

在本篇博客中&#xff0c;作者将会讲解STL中的stack、queue和priority_queue的模拟实现&#xff0c;同时还会带大家了解一下deque这个容器。 一.什么是适配器 STL中一共有6大组件&#xff1a;容器&#xff0c;适配器&#xff0c;空间配置器&#xff0c;仿函数&#xff0c;迭代器…

【码银送书第十九期】《图算法:行业应用与实践》

作者&#xff1a;嬴图团队 01 前言 在当今工业领域&#xff0c;图思维方式与图数据技术的应用日益广泛&#xff0c;成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考&#xff0c;不仅促进业界爱好者之间的交流&#xff0c;…

RabbitMQ 是如何做延迟消息的 ?——Java全栈知识(15)

RabbitMQ 是如何做延迟消息的 &#xff1f; 1、什么是死信&#xff1f; 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09;&#xff1a; 消费者使用 basic.reject 或 basic.nack 声明消费失败&#xff0c;并且消息的 reque…

2.4Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue组件

初识Vue组件 Vue中的组件是页面中的一部分&#xff0c;通过层层拼装&#xff0c;最终形成了一个完整的组件。这也是目前前端最流行的开发方 式。下面是Vue3官方给出的一张图&#xff0c;通过图片能清楚的了解到什么是Vue中的组件。 图的左边是一个网页&#xff0c;网页分为了…

ECS弹性云服务器居然这么好用。

引言 在过去的十年里&#xff0c;云计算从一个前沿概念发展为企业和开发者的必备工具。传统的计算模型通常局限于单一的、物理的位置和有限的资源&#xff0c;而云计算则通过分布式的资源和服务&#xff0c;为计算能力带来了前所未有的"弹性"。 云弹性服务器——为什…

AAA、RADIUS、TACACS、Diameter协议介绍

准备软考高级时碰到的一个概念&#xff0c;于是搜集网络资源整理得出此文。 概述 AAA是Authentication、Authorization、Accounting的缩写简称&#xff0c;即认证、授权、记帐。Cisco开发的一个提供网络安全的系统。AAA协议决定哪些用户能够访问服务&#xff0c;以及用户能够…

精品干货 | 数据中台与数据仓库建设(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 数据中台与数据仓库建设 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方…

PPO 学习笔记

用PPO算法求解整个神经网络在迭代过程中的梯度问题 每走一步就会得到一个新的状态&#xff0c;把这个状态传到网络里面&#xff0c;会得到一个 action&#xff0c;执行这个 action 又会到达一个新状态 policy 中由状态 st 生成动作 at&#xff0c;生成的这个 at 是由整个网络的…

什么是X电容和Y电容?

先补充个知识&#xff1a; 一、什么是差模信号和共模信号 差模信号&#xff1a;大小相等&#xff0c;方向相反的交流信号&#xff1b;双端输入时&#xff0c;两个信号的相位相差180度 共模信号&#xff1a;大小相等。方向相同。双端输入时&#xff0c;两个信号相同。 二、安规…

Redis探索之旅(基础)

目录 今日良言&#xff1a;满怀憧憬&#xff0c;阔步向前 一、基础命令 1.1 通用命令 1.2 五大基本类型的命令 1.2.1 String 1.2.2 Hash 1.2.3 List 1.2.4 Set 1.2.5 Zset 二、过期策略以及单线程模型 2.1 过期策略 2.2 单线程模型 2.3 Redis 效率为什么这么高 三…