mycat数据库代理配置

一:介绍

mycat的具体概念以及作用这里不作概述,相关内容的了解和学习可以参考

  • mycat开源社区: http://www.mycat.io/

  • mycat文档:http://www.mycat.io/document/mycat-definitive-guide.pdf

这里介绍怎么使用mycat配置两个mysql数据库节点,并且在其中一个节点宕机的时候自动切换到另外的mysql数据库节点。

二:Mysql部署

使用docker创建两个双机热备的mysql数据库,具体如何设置主从互备参考另一份文档《mysql双机热备》。

分别是:

  • mysqltest1:10.18.139.81:3307

  • mysqltest2:10.18.139.81:3308

为了后续方便查看具体的sql执行在哪个数据库,可以在配置文件里打开数据库的general_log,加上如下配置

general_log = 1

[mysqld]
server-id               = 1
log_bin                 = /var/lib/mysql/mysql-bin.log
general_log              = 1

三:mycat的部署和配置

使用docker安装mycat 。

先拉取镜像:

docker pull abulo/docker-mycat

然后创建容器,命令如下:

docker run -d --name mycat  -v /data/mycat/server.xml:/usr/local/mycat/conf/server.xml -v /data/mycat/rule.xml:/usr/local/mycat/conf/rule.xml -v /data/mycat/schema.xml:/usr/local/mycat/conf/schema.xml -p 8066:8066 -p 9066:9066 abulo/docker-mycat

这里映射了三份配置文件和两个端口。数据库的自动切换都是在这些配置文件当中配置的。接下来介绍一下。

1:server.xml

server.xml主要保存了mycat需要的系统配置信息,具体配置内容如下:




        
                1
                0
                druidparser
                2
                0

                8066
                9066 
                0
                1
                1m
                1k
                0
                389m
        
        
                123456
                testdb
        
 
  • system: 这个标签下的配置都是mycat的系统全局配置。

    • serverPort : 定义 mycat 的使用端口,默认值为 8066。也就是程序连接mycat时的端口。
    • managerPort : 定义 mycat 的管理端口,默认值为 9066。
    • 这两个端口也是我们docker容器映射到宿主机的端口。system的其他标签含义参考文档开头给出的文档。
  • user:这个标签用于定义登录mycat的用户和权限。

    • 上述配置可阐述为,定义了一个名为 root 的用户,密码为 123456,可访问的schema为testdb。testdb是在schema.xml中定义的一个逻辑数据库。
2:schema.xml

Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、DataNode 以及 DataSource,具体配置内容如下:




    
    
    
    
    
        select user();
        
        
        
        
        
    
          
  • schema:schema 标签用于定义 MyCat 实例中的逻辑库。

    • name:此处我们定义了一个名为testdb的逻辑库,也就是我们在server.xml中配置的root用户可访问的schema。
    • dataNode:指定schema对应的dataNode
  • dataNode:dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片。

    • name:定义数据节点的名字,这个名字需要是唯一的。对应schema节点中配置的dataNode属性。

    • dataHost:该属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性。

    • database:该属性用于定义该分片属性哪个具体数据库实例上的具体库。这个对应我们数据库中的具体数据库名称。我在mysqltest1和mysqltest2中创建了一个名为test的database。

  • dataHost:作为 Schema.xml 中最后的一个标签,该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。

    • name:唯一标识 dataHost 标签,供上层的标签使用。对应dataNode中的dataHost属性

    • balance:决定了哪些MySQL服务器参与到读操作的负载均衡中。

      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 没有。

      此处暂未考虑负载均衡的问题,设为0。

    • writeType:

      1. writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties 。

      2. writeType=“1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

    • switchType:

      1. switchType="-1":表示不自动切换

      2. switchType=“1”:默认值,自动切换

      3. switchType=“2”:基于MySQL主从同步的状态决定是否切换

      数据库的自动切换主要依赖以上两个参数writeType, switchType。

      writeType=“0” switchType=“1” 这样配置,mycat会自动检测数据库是否可用,不可用后自动切换。

    • heartbeat:配置检测数据库节点是否可用的命令。mycat定期会发送该命令给每个数据库节点用于检测节点是否可用。

    • writeHost:指定后端数据库的相关配置给 mycat,用于实例化后端连接池。此处我们配了两个实例,分别就是我们的mysqltest1和mysqltest2。

3:rule.xml

rule.xml 里面就定义了我们对表进行拆分所涉及到的规则定义。这里我们暂时没用到,可自行查询文档了解其用法。

给一个空的配置文档





四:测试

以上介绍了mycat的部署和配置。这样就完成了一个简单的数据库自动切换配置。接下来测试一下。

启动mycat,mysqltest1,mysqltest2。

根据在server.xml中的配置mycat的用户名root, 密码123456,端口为8066,通过这些信息可以使用mysql客户端连接mycat。

mycat数据库代理配置_第1张图片
我们配置的逻辑数据库为testdb。如下图,进入数据库我们可以看见在mysqltest1和mysqltest2中定义的数据表user。

mycat数据库代理配置_第2张图片
打开mysqltest1和mysqltest2的日志。如下图,左侧为mycat,右上角为mysqltest1,右下角为mysqltest2。可以看见一直有执行select user();这个就是我们在schema.xml中配置的heartbeat。mycat正在检测数据库是否可用。

执行sql。如下图,可以看见所有的sql都在mysqltest1上执行,因为配置了两个数据库的互备,所以mysqltest2上在同步数据。

停止mysqltest1,模拟宕机。再执行插入一条数据。Mysqtest1停止了工作,mycat自动切换到了mysqltest2。通过日志可以看到sql在mysqltest2上执行。

启动mysqltest1,会自动去mysqltest2上同步数据。
mycat数据库代理配置_第3张图片

就这样,通过数据库之间的数据同步以及mycat自动切换可用数据库节点。就做到了数据库的容灾切换。

你可能感兴趣的:(数据库)