Mycat安装测试使用

Mycat安装测试使用

Mycat简介
MyCAT 是一款开源的Mysql企业级集群应用,它是基于阿里的开源产品Cobar发展出来的。MyCAT提供了类似Mysql的接口,可以平滑的将单机Mysql迁移到Mysql集群上,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
安装:
环境需要JDK1.8,mysql5.5-5.7版本之间(稳定版)
在这里插入图片描述

下载安装mycat安装包
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar 解压mycat安装包
tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
在这里插入图片描述
在这里插入图片描述

安装完成
测试修改配置文件
主要配置文件 :
schema.xml中定义逻辑库,表、分片节点等内容;
rule.xml中定义分片规则;
server.xml中定义用户以及系统相关变量,如端口等
在这里插入图片描述
wrapper.conf是控制mycat jvm的一些启动参数。
server.xml是Mycat服务器参数调整和用户授权的配置文件。
schema.xml是逻辑库定义和表以及分片定义的配置文件。
rule.xml是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启Mycat。
server.xml是MyCAT对外的“虚拟数据库”配置文件。所谓的“虚拟数据库”是说,MyCAT将多个Mysql集群整合起来对外提供服务,提供服务的接口仍然采用Mysql的形式,因此,通过仿造Mysql接口,让调用程序以为自己是在访问Mysql数据库,就是所谓的“虚拟数据库”。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
        <system>
                <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
                <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->
                <!--配置id(序列)的生成方式-->
                <property name="sequnceHandlerType">1</property>
                <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
               <!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
                <!-- <property name="processorBufferChunk">40960</property> -->
                <!-- <property name="processors">1</property> -->
                <!--<property name="processorExecutor">32</property>  -->
                <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
                <property name="processorBufferPoolType">0</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="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> -->
                <property name="handleDistributedTransactions">0</property>
                <property name="useOffHeapForMerge">1</property>
                <!--单位为m-->
                <property name="memoryPageSize">1m</property>
                <!--单位为k-->
                <property name="spillsFileBufferSize">1k</property>
                <property name="useStreamOutput">0</property>

                <!--单位为m-->
                <property name="systemReserveMemorySize">384m</property>
                <!--是否采用zookeeper协调切换  -->
                <property name="useZKSwitch">true</property>
        </system>

        <!-- 全局SQL防火墙设置 -->
        <!-- 
                        <firewall> 
                   <whitehost>
                      <host host="127.0.0.1" user="mycat"/>
                      <host host="127.0.0.2" user="mycat"/>
                   </whitehost>
               <blacklist check="false">
               </blacklist>
                </firewall>
        -->

        <!-- 配置mycat服务连接用户名密码 ,在项目中的数据源的用户名密码则使用这个,不再直连mysql-->
        <user name="root">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>

                <!-- 表级 DML 权限设置 -->
                <!--            
                                                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>           
                 -->
        </user>

<!--    <user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>
        </user> -->

</mycat:server>

表明该虚拟数据库有一个schema,TESTDB;
有2个用户test和user,密码分别是root和user,
user用户是只读的,root用户未设置只读,有增删改查权限;
默认的SQL解析器是druidparser。
schema.xml 逻辑库定义和表以及分片定义的配置文件

<?xml version="1.0"?>

<mycat:schema xmlns:mycat=“http://io.mycat/”>

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <!-- 配置物理表在mycat中的逻辑关系,这里指定了mycat中有一张逻辑表名为user,这张表的实际数据分散在dn1,dn2,dn3中对应的不同数>据库里面,且分片规则采用了mod-long,当然可以指定不同的分片规则,分片规则在rile.xml配置 -->
            <table name="users" dataNode="dn1,dn2,dn3" rule="rule1">
                    <!-- userInfo表是user表的关联表,用于关联查询的情况下,mycat的分片采用er模型,joinKey="userId"为userInfo表的字段,联user表的id,当然也不定非得是id,通过parentKey="xx"可以指定关联user表的字段 -->
                    <childTable name="userInfo"  joinKey="userId" parentKey="id"/>
            </table>
    </schema>
    <!-- 配置3个节点,该节点的三个属性依次为:节点的名称,服务器ip,数据库实例(MySQL真正的实例) -->
    <dataNode name="dn1" dataHost="bogon" database="db0" />
    <dataNode name="dn2" dataHost="bogon" database="db1" />
    <dataNode name="dn3" dataHost="bogon" database="db2" />

    <!-- 配置连接的数据库,需配置好连接数据库的用户名和密码及ip,这个可以配置多个地址,且可分为读数据库和写数据库 -->
    <dataHost name="bogon" maxCon="1000" minCon="10" balance="0"
                      writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <!-- 心跳,mycat服务每隔一段时间会发出该sql语句,验证该服务器是否被停掉 -->
            <heartbeat>select user()</heartbeat>
            <!-- 指定自己mysql的地址及用户名密码 -->
            <writeHost host="bogon" url="192.168.1.142:3306" user="root"
                               password="123456">
            </writeHost>
    </dataHost>

</mycat:schema>
Schema中主要配置 Mycat 数据库,MySQL表,分片规则,分片类型。
schema
第1块是schema块,主要描述了虚拟数据库的schemaTESTDB中有哪些表,每个表分布在哪些数据节点上,分布的方法采用哪种算法。例如

,表示user表分布在dn1,dn2,dn3这3个节点上,分布的方法采用rule1算法(rule.xml文件中的配置)。
dataNode
第2块是dataNode,表示该数据库有哪些数据节点,以及这些数据节点实际对应的数据服务器和数据库名,这里配置了3个节点dn1,dn2,dn3,都是在bogon服务器上,数据库名分别是db0,db1,db2,其实,这也正是前面schema块中用到的。
dataHost
第3块是dataHost,这部分是实际的数据库服务器配置,这里测试配置了本地Mysql数据库,地址在“192.168.1.142:3306”,用户名都是root,密码是123456,并且指定了心跳是select user()。
这里面有两个参数需要注意,balance和 switchType。
balance指的负载均衡类型,目前的取值有4种:
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不负担读压力
switchType指的是切换的模式,目前的取值也有4种:
switchType=’-1’ 表示不自动切换
switchType=‘1’ 默认值,表示自动切换
switchType=‘2’ 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
switchType='3’基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’。

rule.xml 定义分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件。

<?xml version="1.0" encoding="UTF-8"?>

<mycat:rule xmlns:mycat=“http://io.mycat/”>


id
mod-long

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- how many data nodes -->
    <property name="count">3</property>
</function>

</mycat:rule>
数据切分中作为表切分规则中最重要的配置,表的切分方式决定了数据切分后的性能好坏,因此也是最重要的配置。
如上面例子配置了一个切分规则,名为rule1 对应的切分方式(function )是按日期切分,该配置中:
tableRule
name 为schema.xml 中table 标签中对应的 rule=“rule1” ,也就是配置表的分片规则,
columns 是表的切分字段: id 。
algorithm 是规则对应的切分规则:映射到function 的name。
function
function 配置是分片规则的配置。
name 为切分规则的名称,名字人员取,但是需要与tableRule 中匹配。
class 是切分规则对应的切分类,写死,需要哪种规则则配置哪种,例如本例是求模法:io.mycat.route.function.PartitionByMod
(上面columns 标识将要分片的表字段,algorithm 分片函数,
此种配置非常明确即根据id与count(你的结点数)进行求模预算,相比方式1,此种在批量插入时需要切换数据源,id不连续)。
property 标签是切分规则对应的不同属性,不同的切分规则配置不同。
登录演示mycat
登录方式类似于 mysql 的服务端登陆,目前 mycat 有两个端口,8066 数据端口,9066 管理端口。
mysql -h192.168.1.142 -uroot -p -P8066
-h 后面是主机,即当前 mycat 按照的主机地址,本地可用 127.0.0.1 远程需要远程 ip
-u Mycat server.xml 中配置的逻辑库用户
-p Mycat server.xml 中配置的逻辑库密码
-P 后面是端口 默认 9066,注意 P 是大写
-d Mycat server.xml 中配置的逻辑库
数据端口与管理端口的配置端口修改:
数据端口默认 8066,管理端口默认 9066 ,如果需要修改需要配置 serve.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

登录查看真实数据库查看内容是否在db0,db1,db2库的users表中
在这里插入图片描述
在这里插入图片描述
成功!!!
注意:
启动MyCAT之前,需要先检查一些配置:
1、java的版本需要是1.7或以上;
2、Mysql的配置文件需要加一行lower_case_table_names = 1在[mysqld]栏目中,这个设置为Mysql大小写不敏感,否则可能会发生表找不到的问题;
3、ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:1
这个有可能是Mycat和MySQL部署在同一台机器上,而在schema.xml是使用了IP的,但是账号只能使用localhost登陆,所以会出现本地的Mycat无法连接MySQL
4、添加MYCAT_HOME环境变量指向解压的mycat目录,主要是为了一些bin目录下的脚本的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值