MySQL:10.MyCAT实现读写分离

简介

关键特性

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

什么是MYCAT

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

MYCAT监控

支持对Mycat、Mysql性能监控
支持对Mycat的JVM内存提供监控服务
支持对线程的监控
支持对操作系统的CPU、内存、磁盘、网络的监控

环境

第一步:下载安装

1.下载

http://dl.mycat.io

wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
tar vxf Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
chmod -R 755 mycat/
mkdir mycat/logs
mv mycat/ /usr/local/

2.设置环境变量

echo "MYCAT_HOME=/usr/local/mycat" >> /etc/profile
echo 'export PATH=$MYCAT_HOME/bin:$PATH' >> /etc/profile
cat /etc/profile
source /etc/profile

3.schema.xml文件配置





    
    
    
    
    
    

    
    

    
    
    
    
    
    

    
    
    

    
        
        show status like 'wsrep%'
        
        
        
    

4.server.xml文件配置






    
    0 
    1
    0  
    0  

        2
    false 
       
         
    
    
        
        0
        
        
        
        
        
        
        
        
        0
        
            
        1

        
        64k

        
        1k

        0

        
        384m


        
        false

        
        

        
        
        
        false

        true

    

    
    
    
    
    
    
    
    

    
        123456
        kpcx,kpcx_coupon
    

    
        user
        kpcx,kpcx_coupon
        true
    


注意:

Linux 下部署安装 MySQL,默认不忽略表名大小写
需要手动到/etc/my.cnf 下配置lower_case_table_names=1 使 Linux 环境下 MySQL 忽略表名大小写,否则使用 MyCAT 的时候会提示找不到表的错误!

主要文件说明

conf 目录下存放配置文件
    server.xml 是 Mycat 服务器参数调整和用户授权的配置文件
    schema.xml 是逻辑库定义和表以及分片定义的配置文件
    rule.xml 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下
    配置文件修改,需要重启 Mycat 或者通过 9066 端口 reload
. lib 目录下主要存放 mycat 依赖的一些 jar 文件. 
日志存放在 logs/mycat.log 中,每天一个文件,日志的配置是在 conf/log4j.xml 中,根据自己的需要,可以调整输出级别为 debug,debug级别下,会输出更多的信息,方便排查问题.

schema.xml文件说明 - dataHost标签

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

name        唯一标识 dataHost 标签,供上层的标签使用。
maxCon      指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数
minCon      指定每个读写实例连接池的最小连接,初始化连接池的大小。

balance     负载均衡类型,目前的取值有 3 种:
            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",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
                        注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType   负载均衡类型,目前的取值有 3 种:
            writeType="0", 所有写操作发送到配置的第一个 writeHost
                            第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
            writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。

switchType  切换类型
            -1 表示不自动切换
            1 默认值,自动切换
            2 基于 MySQL 主从同步的状态决定是否切换:心跳语句为 show slave status
            3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)心跳语句为 show status like ‘wsrep%’

dbType      指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等。

dbDriver    指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。
            使用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。
            其他类型的数据库则需要使用 JDBC 驱动来支持。从 1.6 版本开始支持 postgresql 的 native 原始协议。
            如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到 MYCAT\lib 目录下,并检查驱动 JAR 包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。
            在这个文件内写上具体的 Driver 类名,例如:com.mysql.jdbc.Driver

tempReadHostAvailable   如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。

heartbeat   这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
            这个标签还有一个 connectionInitSql 属性,主要是当使用 Oracla 数据库时,需要执行的初始化 SQL 语句就这个放到这里面来。
                例如:alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'
            1.4 主从切换的语句必须是:show slave status

writeHost 标签、readHost 标签
            这两个标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。
            唯一不同的是,writeHost 指定写实例、readHost 指定读实例,组着这些读写实例来满足系统的要求。
            在一个 dataHost 内可以定义多个 writeHost 和 readHost。
            但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。
            另一方面,由于这个 writeHost 宕机系统会自动的检测到,并切换到备用的 writeHost 上去。

host        用于标识不同实例,一般 writeHost 我们使用*M1,readHost 我们用*S1。

url         后端实例连接地址,如果是使用 native 的 dbDriver,则一般为 address:port 这种形式。
            用 JDBC 或其他的dbDriver,则需要特殊指定。当使用 JDBC 时则可以这么写:jdbc:mysql://localhost:3306/。

user        后端存储实例需要的用户名字。
password    后端存储实例需要的密码。
weight      权重 配置在 readhost 中作为读节点的权重(1.4 以后)。
usingDecrypt    是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密

常用命令

mycat restart
mycat pause

mycat stop
mycat start

mycat status

## 前台运行
mycat console
## 添加到系统自动启动(暂未实现)
mycat install
## 取消随系统自动启动(暂未实现)
mycat remove

附录:

官网:http://www.mycat.io/

你可能感兴趣的:(MySQL:10.MyCAT实现读写分离)