那些年非常火的MyCAT是什么? mycat百度百科
liebian365 2024-11-11 14:49 17 浏览 0 评论
嗨,雷猴啊。今天跟大家讲讲MyCAT,可不是“我的猫”哦,哈哈哈。是Java的MyCAT,希望大家看了会有所帮助。
一、MyCAT概述MyCAT是一款由阿里Cobar演变而来的用于支持数据库读写分离、分片的分布式中间件。MyCAT可不但支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。基础架构如下:
1、MyCAT原理
MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
2、MyCAT功能(1)数据库分片(Sharding)
通过某种条件,将同一数据库中的数据分散的存储到多个数据库中,已达到分散单台数据库设备负载的效果,这就是数据库分片。a.水平拆分同一张表的不同记录,根据表的某个字段的某种规则拆分到多个数据库(主机)上,这既是水平拆分。单库业务表可能会过于庞大,存在单库读写与存储瓶颈,这种情况可以通过水平拆分解决,水平拆分基本架构如下:
常用水平拆分规则:*ID*日期*特定字段取模
优点:
*拆分规则抽象好,join操作基本可以数据库内完成*不存在单库大数据,高并发的性能瓶颈*应用端改造少*提高了系统稳定性和负载能力
缺点:*拆分规则难以抽象*分片事务一致性难以解决*数据多次扩展难度跟维护量极大*跨库join性能较差
b.垂直拆分不同的表切分到不同的数据库(主机)上,这就是垂直拆分。一般按照业务表进行分类,划分为不同的业务、模块库,耦合度越低,越容易做垂直拆分,垂直拆分基本架构如下:
垂直拆分注意点:跨库Join,采用共享数据源或分库接口调用,根据资源和数据规模、负载而定
优点:*拆分后业务清晰,拆分规则明确*系统之间整合或扩展容易*数据库维护简单
缺点:*部分业务表无法Join,只能通过接口方式解决,提高了系统复杂度*受每种业务不同的限制存在单库性能瓶颈,不容易扩展跟性能提高*事务处理复杂
c.水平拆分和垂直拆分共同缺点*分布式事务处理困难*夸节点join困难*扩数据源管理复杂
d.切分总则*能不切分的尽量不切分*如果要切分,选择合适的切分规则,提前规划好*数据库切分尽量通过数据冗余或表分组来降低跨库join*业务尽量使用少的多表join
(2)读写分离
(3)黑白名单限制
3、使用场景
(1)单纯读写分离,此时配置最为简单,支持读写分离、主从切换(2)分库分表,对记录超过1000万的表进行水平拆分,最大支持1000亿单表水平拆分(3)多租户应用,每个应用一个数据库,但程序只需连接MyCAT,程序不改变,实现多租户化(4)报表系统,借住MyCAT分表能力,处理大规模的报表统计(5)替代Hbase,分析大数据(6)海量实时数据查询
4、优缺点优点:(1)支持多种类型数据库的分片(2)易扩展(3)
缺点:
二、MyCAT安装
1、下载官网地址:http://www.mycat.io/
下载地址:http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2、mycat安装
1)mycat是java语言编写,在安装mycat前需要安装jdk,本次java版本是1.7
[root@node1 ~]# java -version
java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)
2)解压缩mycat(mycat解压缩后即安装完毕)
[root@node1 ~]# tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
3)mycat用户创建
groupadd mycat
useradd -r -g mycat mycat
chown -R mycat.mycat /usr/local/mycat
4)mycat基本配置
环境变量配置:
[root@node1 ~]# vi ~/.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/mycat/bin
export PATH
[root@node1 ~]# source ~/.bash_profile
schema.xml配置:
[root@node1 ~]# cd /usr/local/mycat/conf/
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="node1" database="db01" />
<dataHost name="node1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.20.32.23:3306" user="myuser" password="myuser">
<readHost host="hostS2" url="10.20.32.24:3306" user="myuser" password="myuser" />
</writeHost>
<writeHost host="hostS1" url="10.20.32.24:3316" user="myuser" password="myuser" />
</dataHost>
</mycat:schema>
server.xml配置:
[root@node1 ~]# cd /usr/local/mycat/conf/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">1m</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<property name="useZKSwitch">true</property>
</system>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
5)mycat启动
[root@node1 conf]# mycat start
Starting Mycat-server...
[root@node1 conf]#
6)mycat状态检查
[root@node1 conf]# mycat status
Mycat-server is running (27956).
三、MyCAT使用
1、mycat常用命令
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat install 添加到系统自动启动(暂未实现)
./mycat remove 取消随系统自动启动(暂未实现)
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态
四、MyCAT重要概念
1、逻辑库(schema)
逻辑库是mycat中间件层配置的对应实际一个或多个业务数据库集群构成。
2、逻辑表(table)a.逻辑表是mycat切分到多个数据库或者不切分对应用程序显示的统一的表。b.分片表是原有的大表,经过分片,分布在不同数据库、相同数据库的保留相同表结构,但数据不同的表。c.非分片表是未做切分的表。d.ER表基于E-R关系分片策略,子表记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组保证数据join不会跨库操作。e.全局表,业务系统中变化不大、数据量不大(十万以下),但又需要经常关联的表,mycat采用冗余在各个节点一个份来完成。
3、分片节点(dataNode)数据库分片后,一个大表被切分到不同的分片数据库上,每个表分片所在的数据库就是分片节点。
4、分片主机(dataHost)分片节点所在的服务器,数据切分后,每个分片节点不一定都会独占一台服务器,同一个分片服务器可能存储多个分片节点,尽量使读写压力高的分片节点均衡的放在不同的节点主机上。
5、分片规则(rule)按照某种业务规则把数据分到某个分片节点上的规则,就是分片规则。(分片规则非常重要,直接决定后续数据处理复杂度)
6、全局序列号(sequence)当数据库分片后,原有的主键约束在分布式条件下无法使用,因此需要引入外部机制保证数据唯一表示,这种保证全局的数据唯一表示机制就是全局序列号(sequence)。
7、多租户多用户的环境共用相同的系统、程序组件,并且确保各用户间数据的隔离性。a.一个用户一个数据库,隔离级别最高、安全性最好,费用最高b.共享数据库,隔离数据架构,每个用户一个schemac.共享数据库,共享数据架构,共享database、schema,通过表tenantID区分租户数据。
今天就跟大家讲到这里了,希望对大家会有所帮助。大家有自己见解的可以大胆的评论在评论区。有需要帮助的也可以直接私聊我哦
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)