利用mycat实现mysql数据库读写分离的示例


什么是MyCAT

  1. 一个彻底开源的,面向企业应用开发的大数据库集群
  2. 支持事务、ACID、可以替代MySQL的加强版数据库
  3. 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  4. 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  5. 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  6. 一个新颖的数据库中间件产品

MyCAT关键特性

  1. 支持SQL92标准
  2. 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法
  3. 遵守MySQL原生协议,跨语言,跨平台,跨数据库的通用中间件代理 。
  4. 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群 。
  5. 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
  6. 基于Nio实现,有效管理线程,解决高并发问题 。
  7. 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页 。
  8. 支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join 。
  9. 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询 。
  10. 支持多租户方案 。
  11. 支持分布式事务(弱xa) 。
  12. 支持XA分布式事务(1.6.5) 。
  13. 支持全局序列号,解决分布式下的主键生成问题 。
  14. 分片规则丰富,插件化开发,易于扩展 。
  15. 强大的web,命令行监控 。
  16. 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉 。
  17. 支持密码加密
  18. 支持服务降级
  19. 支持IP白名单
  20. 支持SQL黑名单、SQL注入攻击拦截
  21. 支持prepare预编译指令
  22. 支持非堆内存(Direct Memory)聚合计算
  23. 支持PostgreSQL的native协议
  24. 支持MySQL和oracle存储过程,out参数、多结果集返回
  25. 支持zookeeper协调主从切换、zk序列、配置zk化
  26. 支持库内分表
  27. 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版) 。

1、这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下:

2、Demo

2.1 在mysql master上创建数据库创建db1

2.2 在数据库db1创建表student

同时,因为配置好了mysql主从复制,在mysql slave上也有一样数据库和表

2.3 编辑 mycat的配置文件server.xml

   <!--表示mycat的登录用户名-->
  <user name="test">
        <!--表示mycat的登录密码-->
        <property name="password">test</property>
         <!--表示mycat的逻辑数据库名称,可以自定义-->
        <property name="schemas">TESTDB</property>
    </user>

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

2.4编辑mycat的配置文件schema.xml

<!--TESTDB表示mycat的逻辑数据库名称
 当schema节点没有子节点table的时候,一定要有dataNode属性存在(指向mysql真实数据库),
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <!--指定master的数据库db1-->
    <dataNode name="dn1" dataHost="192.168.0.4" database="db1" />
    <!--指定mastet的ip -->
    <dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <!--表示mysql的心跳状态-->
        <heartbeat>select user()</heartbeat>
        <!-- master负责写 -->
        <writeHost host="hostM1" url="192.168.0.4:3306" user="root"
            password="admin">
        <!--slave负责读-->
        <readHost host="hostS2" url="192.168.0.5:3306" user="root" password="admin" />
        </writeHost>
</dataHost>

到这里,利用mycat做读写分离就已经配置完了

注意 dataHost节点的下面三个属性

balance, switchType, writeType

balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上 。

balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡 。

balance="2",所有读操作都随机的在writeHost、readhost上分发 。

balance="3",所有读请求随机的分发到writeHost下的readhost执行,writeHost不负担读压力

writeType表示写模式

writeType="0",所有的操作发送到配置的第一个writehost

writeType="1",随机发送到配置的所有writehost

writeType="2",不执行写操作

switchType指的是切换的模式,目前的取值也有4种:

switchType=‘-1‘ 表示不自动切换

switchType=‘1‘ 默认值,表示自动切换

switchType=‘2‘ 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status

switchType=‘3‘基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘ 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家 。

您可能感兴趣的文章:

  • mysql mycat 中间件安装与使用