美文网首页
数据库中间件Mycat -->END

数据库中间件Mycat -->END

作者: 柚子伴酒X | 来源:发表于2018-11-24 19:02 被阅读0次

Mycat 是一一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而而 Mycat 并没有存储引擎,所以并不不是完全意义的分布式数据库系统。
那么Mycat 是什么?

Mycat 是数据库中间件,就是介于数据库与应用用之间,进行数据处理与交互的中间服务。

mycat在应用当中的作用如下图:

1.jpg

逻辑架构图

DBA 或者运维人员对数据进行分片处理理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。


mycat.png

mycat可以让程序员只需要关心业务代码的编写,而不用担心后端数据库集群的负载均衡,读写分离,分库分表的数据分片逻辑的编写,只要直接连接mycat就可以了。

安装Mycat前与要先配置好JDK的环境

配置 MyCat

认识配置文文件

MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:

/usr/local/mycat/conf/server.xml
定义用用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mycat:server SYSTEM "server.dtd">  
<mycat:server xmlns:mycat="http://org.opencloudb/">  
    <system>  
    <!-- 这里配置的都是一些系统属性,可以自己查看mycat文档 -->  
    <property name="defaultSqlParser">druidparser</property>  
    <property name="charset">utf8mb4</property>  
    </system>  
                              
    <!-- 用户1,对应的MyCat逻辑库连接到的数据节点对应的主机为主从复制集群 -->  
    <user name="user1">  
        <property name="password">root</property>  
        <property name="schemas">pcx_schema</property>  
    </user>  
                              
    <!-- 用户2,只读权限-->  
    <user name="user2">  
        <property name="password">root</property>  
        <property name="schemas">pcx_schema</property>  
        <property name="readOnly">true</property>  
    </user>  
</mycat:server>  

这里配置了两个可以来连接的用户
用户1 user1 密码root 给予了此用户pcx_schema数据库的权限
用户2 user2 密码root 给予了此用户pcx_schema数据库的只读权限
注意这里的pcx_schema 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可。

/usr/local/mycat/conf/schema.xml
定义逻辑库,表、分片节点等内容。

<?xml version="1.0"?>  
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
<mycat:schema xmlns:mycat="http://org.opencloudb/">  
      
    <!-- 定义MyCat的逻辑库 -->  
    <schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema>  
  
    <!-- 定义MyCat的数据节点 -->  
    <dataNode name="pcxNode" dataHost="dtHost" database="pcx" />  
  
      
    <!-- 定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一-->  
    <!-- dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 -->  
    <!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->  
    <!-- writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost-->  
    <dataHost name="dtHost" maxCon="500" minCon="20" balance="1"  
        writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">  
        <!--心跳检测 -->  
        <heartbeat>show slave status</heartbeat>  
          
        <!--配置后台数据库的IP地址和端口号,还有账号密码 -->  
        <writeHost host="hostMaster" url="192.168.1.6:3306" user="root" password="root" />  
        <writeHost host="hostSlave" url="192.168.1.7:3306" user="root" password="root" />  
    </dataHost>  
      
  
</mycat:schema> 

schemas 配置项所对应的值是逻辑数据库的名字,也可以自定义,但是这个名字需要和后面schema.xml 文件中配置的一致。

一, <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
这里TESTDB 就是我们对外声称的我们有数据库的名称 必须和server.xml中的用户指定的数据库名称一致添加一个dataNode="dn1" 是指定了我们这个库只在dn1上.没有进行分库.

二, <dataNode name="dn1" dataHost="localhost1" database="db1" />
这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名
根据你自己的数据库名进行修改.

三,<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

这里只需要配置三个地方 balance="1"与writeType="0" ,switchType=”1”
四,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
</writeHost>

/usr/local/mycat/conf/rule.xml
中定义分片规则。

没有最重要只有更重要

A. balance 属性负载均衡类型,目前的取值有 4 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
B. writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。
C. switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL 主从同步的状态决定是否切换

相关文章

网友评论

      本文标题:数据库中间件Mycat -->END

      本文链接:https://www.haomeiwen.com/subject/copyqqtx.html