Mycat读写分离以及拆库拆表综合实验2:部署配置mycat读写分离与拆库拆表

部署 mycat

mycat基于java运行,检查java版本

[root@node119 ~]# java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)

配置java变量

[root@node119 ~]# vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

mycat下载地址

http://dl.mycat.io/
cd /opt
tar zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz  

大致架构图
Mycat读写分离以及拆库拆表综合实验2:部署配置mycat读写分离与拆库拆表

核心概念

  • schema:由多个数据库组成的逻辑数据库
  • datanode:将数据切分后,一个大表被分配到不同的分片数据库上,每个表分片所在的数据库就称为分片节点
  • datahost:一个或者多个分片节点所在的机器就是节点主机

分片节点与节点主机的概念稍微有点不好理解,举例来说,一张100W的表被分为两张表,前50W在A主机的数据库中,后50W在B主机的数据库中,表所在的数据库就称这张表的分片节点;一个主机中不可能只有一张表,会有许多的分片表放在该主机上,该主机就称为节点主机,即datanode=database@datahost

mycat原理的简单说明:

拦截--->分析--->转发--->结果处理--->返回给用户

mycat分析大致包括:分片分析,路由分析,读写分离分析,缓存分析等,在接下来的实验中会通过分析log来查看mycat如何工作。

需求说明

有一个库3张表

MySQL [mycat01]> show tables;
+-------------------+
| Tables in mycat01 |
+-------------------+
| t1                |
| t2                |
| t3                |
+-------------------
  • 分库:

t1在mysql集群中
t2在percona集群中

  • 分表:

t3 id取模1024小于1024的在mysql集群中,大于1024则在percona集群中

  • 读写分离:

t1 writehost 为node115
stand by writehost 为node116
readhost 为node117
t2 writehost 为node126
readhost 为node123 node125

配置文件

#这里创建了两个mycat用户(注意:与后端mysql用户无关)root具有读写权限,user具有读权限
[root@node119 ~]# vim /opt/mycat/conf/server.xml

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

        <user name="user">
                <property name="password">user</property>
                <property name="schemas">mycat01</property>
                <property name="readOnly">true</property>
        </user>

balance="0" 不开启读写分离,即所有读写操作都发送到writehost上

balance="1" 全部的readhost与stand by writehost都参与select语句的负载,也就是互为主从模式下

balance="2" 所有读写操作在readhost和writehost上随机分发

balance="3" 所有读请求都发送到与writehost对应的readhost上,减轻writehost压力

writeType="0" 所有的写操作发送到第一个writehost,当第一个writehots down后则切换到第二个,且不会回切


[root@node119 ~]# vim /opt/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="mycat01" checkSQLschema="false" sqlMaxLimit="100" > #schema name就是映射出去的逻辑库名称,也就是访问mycat用户看到的名称
                <table name="t1" primaryKey="id" type="global" dataNode="MySQL" /> #t1所在的分片节点为mysql,也就是说mycat只会从mysql集群中去找t1
                <table name="t2" primaryKey="id" type="global" dataNode="MySQL_galera" /> #通上
                <table name="t3" primaryKey="id" dataNode="MySQL_galera,MySQL" rule="rule1" /> #mycat 会从两个分片节点去找t3
        </schema>
        <dataNode name="MySQL" dataHost="MySQL_HOST" database="yuyang" />
        <dataNode name="MySQL_galera" dataHost="MySQL_galera" database="yuyang" />
        <dataHost name="MySQL_HOST" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="node115" url="192.168.31.115:3306" user="mycat" password="Mirror-12345">
                        <readHost host="node117" url="192.168.31.117:3306" user="mycat" password="Mirror-12345" />
                </writeHost>
                <writeHost host="node116" url="192.168.31.116:3306" user="mycat" password="Mirror-12345">
                </writeHost>
        </dataHost>
        <dataHost name="MySQL_galera" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="node126" url="192.168.31.126:3306" user="mycat" password="Mirror-12345">
                  <readHost host="node123" url="192.168.31.123:3306" user="mycat" password="Mirror-12345" />
                  <readHost host="node125" url="192.168.31.125:3306" user="mycat" password="Mirror-12345" />
                </writeHost>
[root@node119 ~]# vim /opt/mycat/conf/rule.xml
<function name="func1" class="io.mycat.route.function.PartitionByLong">
                <property name="partitionCount">2</property>
                <property name="partitionLength">512</property>

转载于:https://blog.51cto.com/2143754/2119815

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值