myCat基础(实现读写分离)

MYCAT的主要作用:

1. MYCAT是实现了MySQL通信协议的一个分布式数据库系统中间层。

数据库中间层的作用:数据库读写分离读负载均衡数据库连接池(控制数据库的连接数量)、屏蔽后端数据库的变更(水平拆分和垂直拆分)对关系型数据库非关系型数据库进行操作。

什么是中间层

2. 实现数据库的读写分离,MYCAT支持读负载均衡,多出现在一主多从的架构上,读操作可以在多个从服务器上进行均衡。MYCAT还支持后端MySQL主从复制集群高可用。

读写分离原理 一主一从

这里的高可用:指的是可以在配置的时候,除了主节点之外,在指定一台从节点也可以支持写的功能,当主节点宕机之后,MYCAT会把写的SQL路由到我们在配置文件中指定的从节点上,并且并不支持把其他的从节点设置为新的主节点进行主从同步的功能。

未做数据拆分

3.实现数据库的垂直拆分:专库专用

一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图

数据库的垂直拆分

优点:

    1. 拆分后业务清晰,拆分规则明确。
    2. 系统之间整合或扩展容易。
    3. 数据维护简单。

缺点:

    1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
    2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
    3. 事务处理复杂。

4.实现数据库的水平拆分: 垂直拆分后遇到单机瓶颈,可以使用水平拆分。

相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。


水平拆分

优点:

    1. 不存在单库大数据,高并发的性能瓶颈。
    2. 对应用透明,应用端改造较少。     
    3. 按照合理拆分规则拆分,join操作基本避免跨库。
    4. 提高了系统的稳定性跟负载能力。

缺点:

    1. 拆分规则难以抽象。
    2. 分片事务一致性难以解决。
    3. 数据多次扩展难度跟维护量极大。
    4. 跨库join性能较差。

5.两种方式共同缺点

    1. 引入分布式事务的问题。
    2. 跨节点Join 的问题。
    3. 跨节点合并排序分页问题。

针对数据源管理,目前主要有两种思路:

   A. 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个 数据库,在模块内完成数据的整合。 
    优点:相对简单,无性能损耗。   
    缺点:不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂。

   B. 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;   
    优点:通用,对应用透明,改造少。   
    缺点:实现难度大,有二次转发性能损失。

拆分原则

    1. 尽量不拆分,架构是进化而来,不是一蹴而就。(SOA)
    2. 最大可能的找到最合适的切分维度。
    3. 由于数据库中间件对数据Join 实现的优劣难以把握,而且实现高性能难度极大,业务读取  尽量少使用多表Join -尽量通过数据冗余,分组避免数据垮库多表join。
    4. 尽量避免分布式事务。
    5. 单表拆分到数据1000万以内。

切分方案

    范围、枚举、时间、取模、哈希、指定等

案例分析

场景:
建立一个商城订单系统,保存用户订单信息。

分析:
电商系统
一号店或京东类?淘宝或天猫?
实时性要求高
存在瞬时压力
基本不存在大规模分析
数据规模?
机器资源有多少?
维度?商品?用户?商户?

方案1:按照用户取模,
带来的问题:后续扩容困难

方案2:按用户ID范围分片(1-1000万=分片1,xxx)
带来的问题:用户活跃度无法掌握,可能存在热点问题

方案3:按省份地区或者商户取模
数据分配不一定均匀

原文链接:https://blog.csdn.net/jerome_s/article/details/52492616

MYCAT的基本概念:

1. MYCAT中的数据库——逻辑库,逻辑表

位于中间层,它屏蔽了分库、分表后,数据库操作的复杂性。前端应用可以像使用一个未分库、分表的数据库一样来使用分库、分表的数据库(数据库路由等都是由中间件实现)
user_db是逻辑数据库
db01db02db03是物理数据库
注意: mycat中只保存逻辑库的定义,不保存数据,具体的数据存储在物理数据库中

逻辑库

逻辑表

2.MYCAY的关键特性:

  1. 支持sql92标准:sql92标准是大多数关系型数据库都支持的一个SQL标准,这个标准中定义了SQL语句的一些功能和标准的一些事务的特性,比如说隔离级别等。
  2. 支持MYSQL集群:一主多从,一主一从,多主多从等。
  3. 支持JDBC连接数据库:可以通过JDBC来连接除了MySQL之外的其他关系型数据库,比如Oracle,MSSQL,SqlServer,PgSQL等

使用MYCAT

1.安装MYCATlinux

安装java环境(已安装 忽略
安装mycat

wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
adduser mycat
tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
mv mycat /usr/local/
cd  /usr/local/
chown mycat:mycat -R mycat
ls -lh
权限管理
vi /etc/profile
export MYCAT_HOME=/usr/local/mycat
source /etc/profile

2.启动MYCAT

su mycat
cd /usr/local/mycat/bin
sh startup_nowrap.sh

可能会因为内存不足而报错,修改启动文件参数
JAVA_OPTS="-server -Xms1G -Xmx2G -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=2G"

mycat进程

3.Mycat的相关配置

配置信息

schema.xml
schema.xml

rule.xml
rule.xml

server.xml
server.xml

4.实现读写分离

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
  <schema name="DEVDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  </schema>

  <dataNode name="dn1" dataHost="node1" database="dev" />
  <dataHost name="node1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
          <heartbeat>select user()</heartbeat>
          <writeHost host="49.235.110.134" url="49.235.110.134:3306" user="root" password="root">
                  <readHost host="203.195.224.113" url="203.195.224.113:3306" user="root" password="root" />
          </writeHost>
          <writeHost host="203.195.224.113" url="203.195.224.113:3306" user="root" password="root" />
  </dataHost>
</mycat:schema>

server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="nonePasswordLogin">0</property>
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>
        <property name="useGlobleTableCheck">0</property>

        <property name="sequnceHandlerType">2</property>
        <property name="subqueryRelationshipCheck">false</property>
        <property name="processorBufferPoolType">0</property>
        <!--
                       自定义 开始
        -->
        <property name="serverPort">3300</property>
        <property name="managerPort">9066</property>
        <!--
                       自定义 结束
        -->
        <property name="handleDistributedTransactions">0</property>
        <property name="useOffHeapForMerge">1</property>
        <property name="memoryPageSize">64k</property>
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <property name="systemReserveMemorySize">384m</property>
        <property name="useZKSwitch">false</property>
        </system>

        <user name="root" defaultAccount="true">
          <property name="password">root</property>
          <property name="schemas">DEVDB</property>
        </user>

        <user name="user">
          <property name="password">user</property>
          <property name="schemas">DEVDB</property>
          <property name="readOnly">true</property>
        </user>
</mycat:server>

测试

mysql -uroot -p -P3300 -h127.0.0.1
mysql> use DEVDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from stu;
+----+------+-----+
| id | name | age |
+----+------+-----+
|  5 | lili |  18 |
+----+------+-----+
1 row in set (0.00 sec)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容