zoukankan      html  css  js  c++  java
  • mycat+ mysql集群 分库分表

    mycat介绍
    Mycat数据库分库分表中间件
    国内最活跃的、性能最好的开源数据库中间件!
    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
    结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
    一个新颖的数据库中间件产品

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

    环境
    服务名 docker 容器的ip
    mycat 172.18.0.10
    mysql-01 172.18.0.2
    mysql-02 172.18.0.4
    mysql-03 172.18.0.6
    docker 构建mycat
    创建Dockerfile 文件
    需要提前下载jdk1.8 和 mycat1.6版本

    # 设置镜像的 base 镜像,这里我们使用 centos 系统镜像
    FROM docker.io/centos
    # 复制依赖的 jdk 压缩包,如果是 tar 格式文件,使用 ADD
    COPY jdk-8u171-linux-x64.tar.gz /usr/local/
    # 执行命令
    RUN tar -zxvf /usr/local/jdk-8u171-linux-x64.tar.gz -C /usr/local/
    # 设置环境变量
    ENV JAVA_HOME=/usr/local/jdk1.8.0_171
    ENV PATH=$PATH:$JAVA_HOME/bin
    ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    # 复制依赖mycat压缩包
    COPY Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local/
    # 执行命令
    RUN tar -zxvf /usr/local/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
    # 设置环境变量
    ENV MYCAT_HOME=/usr/local/mycat

    RUN source /etc/profile
    RUN source ~/.bash_profile
    CMD ["/usr/local/mycat/bin/mycat", "console"]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    执行下面的命令,就可以生成我们需要的含jdk8的mycat1.6的镜像了( /home/mycat-server 这个是我的当前构建目录)

    docker build -t centos-jdk8-mycat1.6 -f Dockerfile /home/mycat-server
    1
    编写mycat的sechma.xml文件
    配置信息规则 请看mycat官网查询

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
    <!-- auto sharding by id (long) -->
    <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
    </schema>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
    /> -->
    <dataNode name="dn1" dataHost="mysql1" database="db1" />
    <dataNode name="dn2" dataHost="mysql2" database="db2" />
    <dataNode name="dn3" dataHost="mysql3" database="db3" />
    <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
    <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
    <dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
    <dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
    <dataHost name="mysql1" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostS1" url="172.18.0.2:3306" user="root"
    password="root" />
    </dataHost>
    <dataHost name="mysql2" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostS2" url="172.18.0.4:3306" user="root"
    password="root" />
    </dataHost>
    <dataHost name="mysql3" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostS3" url="172.18.0.6:3306" user="root"
    password="root" />
    </dataHost>
    </mycat:schema>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    拉取mysql镜像
    docker pull mysql:5.7

    创建docker-compose文件
    首先安装docker-compose

    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

    sudo chmod +x /usr/local/bin/docker-compose
    1
    2
    3
    查看安装是否成功

    docker-compose -v
    1
    编写docker-compose.yml 文件

    version: '2'
    services:
    mycat:
    image: centos-jdk8-mycat1.6
    networks:
    dcynet:
    ipv4_address: 172.18.0.10
    volumes:
    - /home/mycat-server/mycat/logs:/usr/local/mycat/logs
    - /home/mycat-server/schema.xml:/usr/local/mycat/conf/schema.xml
    - /home/mycat-server/wrapper.conf:/usr/local/mycat/conf/wrapper.conf
    ports:
    - "8066:8066"
    - "9066:9066"
    mysql-01:
    image: mysql:5.7
    networks:
    dcynet:
    ipv4_address: 172.18.0.2
    ports:
    - "3307:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=root
    mysql-02:
    image: mysql:5.7
    networks:
    dcynet:
    ipv4_address: 172.18.0.4
    ports:
    - "3308:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=root
    mysql-03:
    image: mysql:5.7
    networks:
    dcynet:
    ipv4_address: 172.18.0.6
    ports:
    - "3309:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=root
    networks:
    dcynet:
    driver: bridge
    ipam:
    driver: default
    config:
    - subnet: 172.18.0.0/16
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    对应配置文件中的ip 都需要对应自己docker 网络信息
    查询语句

    # 查看所有的网络信息
    docker network ls
    # 查询网络 详细信息
    docker network inspect mycat-server_dcynet
    1
    2
    3
    4

    docker-compose启动服务
    docker-compose up -d

    此时docker 已经启动多个mysql容器了端口分别为 3307,3308,3309
    和一个mycat容器了 端口是8066和9066

    实验sql
    create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);

    insert into travelrecord(id,user_id,traveldate,fee,days) values(1,'Victor',20160101,100,10);
    insert into travelrecord(id,user_id,traveldate,fee,days) values(5000001,'Job',20160102,100,10);
    insert into travelrecord(id,user_id,traveldate,fee,days) values(10000001,'Slow',20160103,100,10);

    1
    2
    3
    4
    5
    6
    注意 mycat 默认用户名密码 root 123456
    --------------------- 

  • 相关阅读:
    【应用安全】mssql db_owner权限拿shell
    【应用安全——XSS】input-hidden
    留言板
    Git配置多个SSH-Key
    13.InternalThreadLocalMap
    10.ChannelOutboundBuffer
    9.ChannelHandlerContext
    8.Future&Promise
    7.给大动脉来一刀-NioEventLoop 源码分析
    6.给大动脉来一刀
  • 原文地址:https://www.cnblogs.com/hyhy904/p/10971066.html
Copyright © 2011-2022 走看看