`
m635674608
  • 浏览: 5031322 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MyCat部署运行(Windows环境)与使用步骤详解

 
阅读更多

1、MyCat概念

1.1 总体架构

MyCAT架构如下图所示:

MyCAT使用MySQL的通讯协议模拟成一个mysql服务器,并建立了完整的Schema数据库)、Table(数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNodeMySQL Instance)上的真实物理库中,这样一来,所有能使用MySQL的客户端以及编程语言都能将MyCAT当成是MySQLServer来使用,不必开发新的客户端协议。

MyCAT收到一个客户端发送的SQL请求时,会先对SQL进行语法分析和检查,分析的结果用于SQL路由,SQL路由策略支持传统的基于表格的分片字段方式进行分片,也支持独有的基于数据库E-R关系的分片策略,对于路由到多个数据节点(DataNode)的SQL,则会对收到的数据集进行“归并”然后输出到客户端。

SQL执行的过程,简单的说,就是把SQL通过网络协议发送给后端的真正的数据库上进行执行,对于MySQL Server来说,是通过MySQL网络协议发送报文,并解析返回的结果,若SQL不涉及到多个分片节点,则直接返回结果,写入客户端的SOCKET流中,这个过程是非阻塞模式(NIO)。

DataNodeMyCAT的逻辑数据节点,映射到后端的某一个物理数据库的一个Database,为了做到系统高可用,每个DataNode可以配置多个引用地址(DataSource),当主DataSource被检测为不可用时,系统会自动切换到下一个可用的DataSource上,这里的DataSource即可认为是Mysql的主从服务器的地址。

1.2 逻辑库

与任何一个传统的关系型数据库一样,MyCAT也提供了“数据库”的定义,并有用户授权的功能,下面是MyCAT逻辑库相关的一些概念:

  • schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table
  • table:表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode,这是通过表格的分片规则定义来实现的,table可以定义其所属的“子表(childTable)”,子表的分片依赖于与“父表”的具体分片地址,简单的说,就是属于父表里某一条记录A的子表的所有记录都与A存储在同一个分片上。
  • 分片规则:是一个字段与函数的捆绑定义,根据这个字段的取值来返回所在存储的分片(DataNode)的序号,每个表格可以定义一个分片规则,分片规则可以灵活扩展,默认提供了基于数字的分片规则,字符串的分片规则等。
  • dataNode: MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上,一般来说,为了高可用性,每个DataNode都设置两个DataSource,一主一从,当主节点宕机,系统自动切换到从节点。
  • dataHost:定义某个物理库的访问地址,用于捆绑到dataNode上。

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

·        MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容;

·        MYCAT_HOME/conf/rule.xml中定义分片规则;

·        MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。

下图给出了MyCAT一个可能的逻辑库到物理库(MySQL的完整映射关系),可以看出强大的分片能力以及灵活的Mysql集群整合能力。          


2、  MyCat基本使用教程

2.1 下载和安装

         MyCAT使用Java开发,因为用到了JDK 7的部分功能,所以在使用前请确保安装了JDK 7.0,要求是JDK 7.0以上,并设置了正确的Java环境变量

目前下载的版本是免安装,解压在任意磁盘、根目录下,避免路径中出现中文

目录下的“Mycat-server-1.2-GA-win.tar.gz”文件,解压后的目录结构如下图所示:
     

目录说明见下表所示:

目录名称

说明

bin

存放window版本和Linux版本,除了提供封装成服务的版本之外,也提供nowrapshell脚本命令,方便大家选择和修改。

Windows  运行:mycat.bat console在控制台启动程序,也可以装载成服务,若此程序运行有问题,也可以运行startup_nowrap.bat,确保java命令可以在命令执行。

Warp方式的命令,可以安装成服务并启动或停止。

mycat install (可选)

mycat start

注意,wrap方式的程序,其JVM配置参数在conf/wrap.conf中,可以修改为合适的参数,参数调整参照http://wrapper.tanukisoftware.com/doc/english/properties.html

conf

存放配置文件:

server.xml:是Mycat服务器参数调整和用户授权的配置文件。

schema.xml:是逻辑库定义和表以及分片定义的配置文件。

rule.xml:是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启MyCAT或者通过9066端口reload

wrapper.confJVM配置参数等设置。

log4j.xml:日志存放在logs/mycat.log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要,可以调整输出级别为debugdebug级别下,会输出更多的信息,方便排查问题。

lib

MyCAT自身的jar包或依赖的jar包的存放目录。

logs

MyCAT日志的存放目录。日志存放在logs/mycat.log中,每天一个文件


2.2 
启动和停止

安装mycat服务 :mycate install 

启动mycat服务 :mycate start

停止mycat服务 :mycate stop

注意:当修改配置文件后,需要重启mycat服务

3、使用教程

3.1 硬件配置和安装数据库

        本地          mycat    192.168.1.5

        服务器A    mysql    192.168.1.201

        服务器A    mysql    192.168.1.202

       

         安装MySQL服务器和MySQL客户端,笔者使用的MySQL服务器是免安装版本:mysql-noinstall-5.1.73-winx64MySQL客户端是:Navicat for MySQL,免安装版本安装方法请参考:http://blog.csdn.net/q98842674/article/details/12094777

3.2 创建数据库

        分别在服务器A、服务器B创建所用的分片数据库;
        CREATE database db1;

3.3 配置文件

    schema.xml配置文件,因为分库在不同的服务器,因此配置两个datahost;如果在一个datahost中配置多个writeHost,则为主从配置。type="global"时,为全局表,

 

 

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

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <!-- auto sharding by id (long) -->
        <table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" />

        <!-- global table is auto cloned to all defined data nodes ,so can join 
            with any table whose sharding node is in the same data node -->
        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2" />
        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />

        <!-- random sharding using mod sharind rule -->
        <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2"
            rule="mod-long" />
        <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
            needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
            rule="mod-long" /> -->
        <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
            rule="sharding-by-intfile" />
        <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
            rule="sharding-by-intfile">
            <childTable name="orders" primaryKey="ID" joinKey="customer_id"
                parentKey="id">
                <childTable name="order_items" joinKey="order_id"
                    parentKey="id" />
            </childTable>
            <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
                parentKey="id" />
        </table>
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost2" database="db1" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.1.201:3306" user="shopuser"
            password="123456">
        </writeHost>
    </dataHost>
    <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.1.202:3306" user="shopuser"
            password="123456">
        </writeHost>
    </dataHost>
</mycat:schema>

 

      server.xml配置文件,本实例很简单,就只定义user, 

      name:用户名

      password:密码

      schemas:实例名,和schema.xml定义的schema对应,这里的实例名是虚拟名,也就是对mycat服务的一种别名,是 应用程序以及客户端连接的入口。

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
    - you may not use this file except in compliance with the License. - You 
    may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
    - - Unless required by applicable law or agreed to in writing, software - 
    distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
    License for the specific language governing permissions and - limitations 
    under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
    <property name="defaultSqlParser">druidparser</property>
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
    <!-- <property name="processorBufferChunk">40960</property> -->
    <!-- 
    <property name="processors">1</property> 
    <property name="processorExecutor">32</property> 
     -->
        <!--默认是65535 64K 用于sql解析时最大文本长度 -->
        <!--<property name="maxStringLiteralLength">65535</property>-->
        <!--<property name="sequnceHandlerType">0</property>-->
        <!--<property name="backSocketNoDelay">1</property>-->
        <!--<property name="frontSocketNoDelay">1</property>-->
        <!--<property name="processorExecutor">16</property>-->
        <!-- 
            <property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
            <property name="mutiNodePatchSize">100</property> 亿级数量排序批量
            <property name="processors">32</property> <property name="processorExecutor">32</property>
            <property name="serverPort">8066</property> <property name="managerPort">9066</property>
            <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
            <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
    </system>
    <user name="test">
        <property name="password">test</property>
        <property name="schemas">TESTDB</property>
    </user>
</mycat:server>

 

 


3.4 登录mycat
在任意有mysql的客户端的机器连接Mycat, 执行以下命令
       mysql -utest -ptest -h192.168.1.5 -P8066 -DTESTDB   注意:8066登录mycat数据端口,9066登录mycat管理端口(能看到mycat内的配置、以及各个数据库连接情况,很有用)

3.5 测试
全局表:company

mysql> create table company(id int not null primary key,name varchar(100),sharding_id int not null);
      Query OK, 0 rows affected (0.30 sec)
      mysql> explain create table company(id int not null primary key,name varchar(100),sharding_id int not null);
     +-----------+------------------------------------------------------------------------------------------------+
     | DATA_NODE | SQL                                                                                            |
     +-----------+------------------------------------------------------------------------------------------------+
     | dn1       | create table company(id int not null primary key,name varchar(100),sharding_id int not null) |
     | dn2       | create table company(id int not null primary key,name varchar(100),sharding_id int not null) |
     +-----------+------------------------------------------------------------------------------------------------+
     2 rows in set (0.04 sec)

mysql> insert into company(id,name,sharding_id) values(1,'leader us',10000);
      ERROR 2006 (HY000): MySQL server has gone away
      No connection. Trying to reconnect...
      Connection id:    6
      Current database: TESTDB

 Query OK, 1 row affected (0.03 sec)
       mysql> explain insert into company(id,name,sharding_id) values(1,'leader us',10000);
       +-----------+-----------------------------------------------------------------------+
       | DATA_NODE | SQL                                                                   |
       +-----------+-----------------------------------------------------------------------+
      | dn1       | insert into company(id,name,sharding_id) values(1,'leader us',10000) |
      +-----------+-----------------------------------------------------------------------+
      1 row in set (0.00 sec)

 

 

水平分表:travelrecord

mysql> explain create table travelrecord(id int not null primary key,name varchar(100));
      +-----------+---------------------------------------------------------------------+
      | DATA_NODE | SQL                                                                 |
     +-----------+---------------------------------------------------------------------+
     | dn1       | create table travelrecord(id int not null primary key,name varchar(100)) |
     | dn2       | create table travelrecord(id int not null primary key,name varchar(100)) |
     | dn3       | create table travelrecord(id int not null primary key,name varchar(100)) |
     +-----------+---------------------------------------------------------------------+
     3 rows in set (0.01 sec)

  (7) 三个分片上都插入了3条数据
     mysql> explain insert into travelrecord(id,name) values(1,'hp');
     +-----------+---------------------------------------------+
     | DATA_NODE | SQL                                         |
     +-----------+---------------------------------------------+
     | dn1       | insert into travelrecord(id,name) values(1,'hp') | 
     | dn2       | insert into travelrecord(id,name) values(1,'hp') | 
     | dn3       | insert into travelrecord(id,name) values(1,'hp') | 
     +-----------+---------------------------------------------+
     3 rows in set (0.00 sec)

 

 

 

http://blog.csdn.net/Stubborn_Cow/article/details/46967407

 

分享到:
评论

相关推荐

    mycat如何部署

    【Mycat部署详解】 Mycat是一款开源的分布式数据库中间件,主要用于解决大数据场景下的高并发、海量数据处理问题,实现多逻辑库的水平分库。以下将详细介绍如何部署和配置Mycat。 首先,确保环境准备: 1. **安装...

    Mysql高可用架构集群--MyCat集群部署HAProxy+MyCat

    #### 五、关键步骤详解 1. **部署环境准备** - 安装所需软件包:在所有主机上安装基础软件包,如JDK、MySQL、MyCat等。 - 配置主机映射:在`/etc/hosts`文件中添加主机映射关系,便于主机间互相识别。 2. **...

    Mycat主从与读写分离配置详解与示例

    同时,下载“Mycat-Server-1.4-RC-Linux-RW-20150721.tar.gz”和“Mycat-server-1.4-RC.jar”这两个文件,按照文档中的步骤在Linux环境下部署Mycat服务器,这将帮助你亲手实践并加深理解。 总结,Mycat作为数据库...

    基于数据库中间件Mycat的MySQL主从与读写分离配置详解与示例

    在IT行业中,数据库管理是关键任务之一,尤其是在大型企业或高并发应用中。...使用提供的最新修正_Mycat主从与读写分离配置详解与示例_正能量_20150724文档,可以更直观地学习和实践这些配置和解决方案。

    linux jdk mycat环境变量配置.txt

    在Linux环境下进行开发或部署时,正确配置JDK(Java Development Kit)与Mycat数据库中间件的环境变量是非常重要的步骤。这不仅能够确保应用程序顺利运行,还能提高系统的稳定性和性能。下面将详细介绍如何在Linux...

    Hibernate连接Mycat例子详解

    "Hibernate 连接Mycat例子详解_正能量_20150507.docx"文档很可能包含了整个示例的详细步骤,包括项目构建、Mycat配置、Hibernate配置、实体类创建、DAO层接口及实现、以及如何运行和测试应用。这份文档会指导开发者...

    mycat 1.6 win和linux版

    5. **Windows和Linux安装**:Mycat在Windows和Linux上安装步骤有所不同,包括JDK的安装、Mycat的下载与解压、配置文件修改、启动服务等。 6. **配置文件详解**:如`server.xml`、`schema.xml`、`rule.xml`等,分别...

    windows mycat 1.6 免安装

    通过以上步骤,你可以在Windows系统上成功部署并运行Mycat 1.6免安装版,利用其强大的数据库中间件功能,实现高效、灵活的数据管理和处理。在实际使用过程中,不断学习和理解Mycat的配置与原理,将有助于提升数据库...

    第三版_基于Mycat的MySQL主从读写分离配置详解与示例

    1. 监控Mycat:使用Mycat提供的监控工具或第三方监控软件,实时查看系统运行状态,如QPS(每秒查询数)、TPS(每秒事务数)等。 2. 负载均衡优化:根据业务负载情况,调整Mycat的路由策略,平衡主从节点的负载。 3. ...

    mycat 使用demo

    **分布式数据库中间件Mycat详解与实战演示** 在当今大数据时代,单体数据库往往无法满足高并发、海量数据的处理需求。此时,分布式数据库中间件如Mycat应运而生,它能够将单一数据库扩展到多个节点,实现水平扩展,...

    基于MYCAT简单实现数据库水平分片测试示例详解

    总结来说,基于MYCAT实现数据库水平分片,涉及到的主要步骤包括:理解MYCAT的基本概念,设计合理的分片策略,部署MYCAT服务,配置分片规则,以及进行性能测试和故障恢复验证。这个过程需要结合业务需求,选择合适的...

    mycat安装配置.docx

    ### MyCat 安装配置详解 #### 一、部署前准备 在进行MyCat的部署之前,需要确保已经准备好了相应的系统环境及相关软件。 **1、部署环境与相关软件** - **系统环境**:CentOS 6.5 - **应用软件**: - JDK 1.8.0_...

    Mycat分库分表文档及demo.rar

    - 安装步骤:包括下载Mycat的最新版本,配置环境变量,启动Mycat服务器等。 - 配置文件解析:如server.xml、schema.xml、dataNode.xml、rule.xml等,这些文件定义了Mycat的运行规则、数据节点、分片策略等。 - 数据...

    Mycat高性能数据库中间件实战教程课件

    - 由于Mycat是基于Java开发的,因此无需复杂的安装步骤,直接解压即可使用。 - 此外,还需要确保环境中已经安装了其他必要的组件,如Tomcat、ZooKeeper、ActiveMQ等。 - **启动与停止** - 启动Mycat:进入Mycat...

    centos7下安装mycat

    ### CentOS 7 下安装 Mycat 与配置详解 #### 一、Mycat 简介 Mycat 是一款开源的数据库中间件,它基于 JDBC 实现,能够实现对后端 MySQL 数据库集群的读写分离、分库分表等功能。通过 Mycat 可以有效地提高 MySQL ...

    windows环境下MyCAT+mysql主从配置.pdf

    ### Windows环境下MyCAT+MySQL主从配置详解 #### 一、概述 在Windows环境下实现MySQL主从配置,以及在此基础上构建Mycat集群环境,能够有效地提升数据处理能力和服务可用性。本文档将详细介绍如何在Windows系统中...

    windows环境下MyCAT+mysql主从配置[参照].pdf

    ### Windows环境下MyCAT+MySQL主从配置详解 #### 一、引言 在现代软件开发领域,数据库的高效管理和稳定性至关重要。为了实现高可用性和负载均衡,常常采用MySQL的主从复制模式。此外,结合MyCAT这一开源分布式...

Global site tag (gtag.js) - Google Analytics