mycat基本概念及读写分离一

mycat基本概念及读写分离一

目录(?)[+]

  1. 安装与启动
  2. mycat目录介绍
  3. mycat三个最重要配置文件
  4. 验证读写分离

安装与启动

linux下可以下载Mycat-server-xxxxx.linux.tar.gz 解压在某个目录下,建议放在usr/local/mycat目录下,注意目录不能有空格。下载后改名,解压到/usr/server,工程名字mycat,配置环境变量,并使之生效:

1) vi /etc/profile,在系统环境变量文件中增加

[java] view plain copy

print?

  1. export MYCAT_HOME=/usr/local/mycat
export MYCAT_HOME=/usr/local/mycat 

2) 使环境变量生效

[java] view plain copy

print?

  1. source /etc/profile
source /etc/profile

[注]如果是在多台Linux系统中组建的 MyCAT集群,那需要在MyCAT Server所在的服务器上配置对其他ip和主机名的映射,配置方式如下:  vi /etc/hosts 
例如:我有4 台机器,配置如下: 
IP 主机名:

[java] view plain copy

print?

  1. 192.168.0.1 server_1
  2. 192.168.0.2 server_2
  3. 192.168.0.3 server_3
  4. 192.168.0.4 server_4
192.168.0.1 server_1 192.168.0.2 server_2 192.168.0.3 server_3 192.168.0.4 server_4 

3)启动mycat

[sql] view plain copy

print?

  1. ./mycat start
./mycat start

4)连接mycat

mycat默认的使用端口8066,管理端口9066

[sql] view plain copy

print?

  1. mysql -uroot -p123456 -P9066 -h127.0.0.1 -DTESTDB 用户名密码配置在server.xml,或者user/user
  2. mysql -uroot -p123456 -P8066 -h127.0.0.1
mysql -uroot -p123456 -P9066 -h127.0.0.1 -DTESTDB 用户名密码配置在server.xml,或者user/usermysql -uroot -p123456 -P8066 -h127.0.0.1

其中-u,-p,-h分别是用户名,密码和主机,-D是连接的逻辑库。

mycat目录介绍

1) bin目录: Linux下运行:./mycat console,首先要chmod +x *

注:mycat支持的命令{ console | start | stop | restart | status | dump }

2) conf目录下存放配置文件,server.xml是mycat服务器参数调整和用户授权的配置文件,schema.xml是逻辑库定义和表以及分片定义的配置文件,rule.xml是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启 mycat或者通过9066 端口reload.

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

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

mycat三个最重要配置文件

一、schema.xml

1、schema.xml作为 MyCat中重要的配置文件之一,管理着 MyCat的逻辑库、表、分片规则、DataNode以及DataSource。弄懂这些配置,是正确使用MyCat的前提。
schema 标签用于定义MyCat实例中的逻辑库,MyCat可以有多个逻辑库,每个逻辑库都有自己的相关配置。逻辑库的概念和 MYSQL数据库中Database的概念相同
checkSQLschema 设置为false,并且在提供SQL select * from TESTDB.travelrecord 语句的最好是不带TESTDB这个字段。 sqlMaxLimit 设置该值的话,MyCat默认会把查询到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减少过多的数据返回。 
2、table 标签定义了MyCat中的逻辑表,所有需要拆分的表都需要在这个标签中定义。 同一个schema标签中定义的name必须唯一。 database 属性所指定的是真实的数据库名称,需要在后面添加一个primaryKey 该逻辑表对应真实表的主键。rule属性用于指定逻辑表要使用的规则名字,规则名字在rule.xml中定义,必须与tableRule标签中name属性属性值一一对应。 type属性 该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和”普通表”两种类型。对应的配置: 全局表:global ,普通表:不指定该值为globla的所有表。有了全局表,这样可以使用join了,同时增加读写分离。
3、dataNode 标签定义了 MyCat中的数据节点,也就是我们通常说所的数据分片。一个dataNode 标签就是一个独立的数据分片。

[java] view plain copy

print?

  1. <dataNode name="dn1" dataHost="lch3307" database="db1" ></dataNode>
<dataNode name="dn1" dataHost="lch3307" database="db1" ></dataNode> 

使用名字为lch3307数据库实例上的db1物理数据库,这就组成一个数据分片,最后,我们使用名字dn1标识这个分片。 
dataHost 属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost标签上定义的name属性。 
4、dataHost属性 作为schema.xml中最后的一个标签,该标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。
1) maxCon与minCon 指定每个读写实例连接池的最大最小连接。
2) balance 负载均衡类型,目前的取值有 3种:  balance="1", 开启读写分离机制
3) writeType 负载均衡类型,目前的取值有 3种: 
1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
4) writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties . 其余不推荐
5) heartbeat 这个标签内指明用于和后端数据库进行心跳检查的语句。
6) writeHost 标签、readHost 标签 复杂看文档
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。

因此,该配置文件中的balance="1"意味着作为stand by writeHost的hostS1和hostS2将参与select语句的负载均衡,这就实现了主从的读写分离,switchType=‘-1‘意味着当主挂掉的时候,不进行自动切换,即hostS1和hostS2并不会被提升为主,仍只提供读的功能。这就避免了将数据写进slave的可能性,毕竟,单纯的MySQL主从集群并不允许将数据读进slave中,除非配置的是双master。

添加mycat1这个库

[java] view plain copy

print?

  1. <schema name="mycat1" checkSQLschema="false" sqlMaxLimit="100">
  2. <!-- auto sharding by id (long) -->
  3. <table name="food" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
  4. </schema>
<schema name="mycat1" checkSQLschema="false" sqlMaxLimit="100">    <!-- auto sharding by id (long) -->    <table name="food" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /></schema>

[java] view plain copy

print?

  1. database要与实际的数据库实例对应:
  2. <dataNode name="dn1" dataHost="localhost1" database="zy_mycat1" />
  3. <dataNode name="dn2" dataHost="localhost1" database="zy_mycat2" />
  4. <dataNode name="dn3" dataHost="localhost1" database="zy_mycat3" />
  5. dataHost是关键,用户名密码要与实际的数据库对应,不然mycat是启动不来的。这里我只配置了一个master,没有slave
  6. <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
  7. writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
  8. <heartbeat>select user()</heartbeat>
  9. <writeHost host="hostM1" url="172.23.29.111:3306" user="root" password="123456" />
  10. <writeHost host="hostS2" url="172.23.29.112:3306" user="changhf" password="123456"/> -->
  11. </dataHost>
database要与实际的数据库实例对应:<dataNode name="dn1" dataHost="localhost1" database="zy_mycat1" /><dataNode name="dn2" dataHost="localhost1" database="zy_mycat2" /><dataNode name="dn3" dataHost="localhost1" database="zy_mycat3" />dataHost是关键,用户名密码要与实际的数据库对应,不然mycat是启动不来的。这里我只配置了一个master,没有slave<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"          writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">    <heartbeat>select user()</heartbeat>    <writeHost host="hostM1" url="172.23.29.111:3306" user="root" password="123456" />    <writeHost host="hostS2" url="172.23.29.112:3306" user="changhf" password="123456"/> --></dataHost>

二、server.xml

system 这个标签内嵌套的所有property标签都与系统配置有关其他包括定义了用户名密码,指定访问到分片等,修改root用户属性,增加mycat1这个库。

[java] view plain copy

print?

  1. <user name="root">
  2. <property name="password">123456</property>
  3. <property name="schemas">TESTDB,mycat1</property>
  4. </user>
<user name="root">    <property name="password">123456</property>    <property name="schemas">TESTDB,mycat1</property></user>

重新启动mycat

[java] view plain copy

print?

  1. ./mycat restart
./mycat restart

三、rule.xml

rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。。这个文件里面主要有 tableRule 和function这两个标签。

验证读写分离

[java] view plain copy

print?

  1. create table food (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);
  2. insert into food (id,user_id,traveldate,fee,days)  values(1,@@hostname,20160101,100,10),(5000001,@@hostname,20160102,100,10),(10000001,@@hostname,20160103,100,10);
create table food (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);insert into food (id,user_id,traveldate,fee,days)  values(1,@@hostname,20160101,100,10),(5000001,@@hostname,20160102,100,10),(10000001,@@hostname,20160103,100,10);

关闭172.23.29.111的mysql服务,发现插入数据时提示连接失败,而查询并没有影响。

参考:http://www.cnblogs.com/ivictor/p/5111495.html 两篇文章

原文地址:https://www.cnblogs.com/jpfss/p/8136208.html

时间: 2024-10-10 23:34:48

mycat基本概念及读写分离一的相关文章

MyCAT部署及实现读写分离(转)

MyCAT是mysql中间件,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之.于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显.这篇文章主要是MyCAT的入门部署. 一.安装java 因Mycat是用java开发的,所以需要在实验环境下安装java,官方建议jdk1.7及以上版本 Java Oracle官方下载地址为: http://www.oracle.com/technetwork/java/javase/archive-139210.html 解压jdk

MyCAT实现MySQL的读写分离

在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受. 引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务. 作为当前炙手可热的MySQL中间件,MyCAT实现MySQL主从集群的读写分离

linux下mysql基于mycat做主从复制和读写分离之基础篇

Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , mycat1.6-RELEASE jdk1.7及其以上版本2.实现步骤一(mycat实现读写分离) 1.首先在两台服务器安装mysql 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp

通过mycat实现mysql的读写分离

mysql的主从配置沿用上一篇博客的配置:https://www.cnblogs.com/MasterSword/p/9434169.html mycat下载地址:http://www.mycat.io/ 试验版本:Mycat-server-1.6-release # cd /usr/local # mv ~/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local # tar -zxvf Mycat-server-1.6-R

mycat做Mysql的读写分离

在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受. 引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务. 作为当前炙手可热的MySQL中间件,MyCAT实现MySQL主从集群的读写分离

Mycat - 实现数据库的读写分离与高可用【转】

文章地址:https://www.cnblogs.com/youzhibing/p/9553766.html 前言 开心一刻 上语文课,不小心睡着了,坐在边上的同桌突然叫醒了我,并小声说道:“读课文第三段”.我立马起身大声读了起来.正在黑板写字的老师吓了一跳,老师郁闷的看着我,问道:“同学有什么问题吗?”,我貌似知道了什么,蛋定的说了一句:“这段写的真好!我给大伙念念!”,老师还较真了:“你说说看,好在哪里?”,顿时我就无语了,脸黑着望向了同桌了,心想着:“这是个畜生啊!” 路漫漫其修远兮,吾将

mycat 的安装和读写分离的配置

一.安装mycat MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用 了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行. 环境准备 1) JDK 下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 注:必须 JDK7 或更高版本. 2)Mysql下载安装 这个就正常的安装就行没有特殊

Mycat实现Mysql主从读写分离

一.概述 关于Mycat的原理网上有很多,这里不再详述,对于我来说Mycat的功能主要有如下几种: 1.Mysql主从的读写分离 2.Mysql大表分片 3.其他数据库例如Oracle,MSSQL,DB2等的读写分离和分片. 之所以第3点单独列出来只是因为它不常用,而且使用的JDBC,连接Mysql则是直接使用Mysql协议. 对于Mycat的分片功能,由于遇到了几个很严重的BUG,同时分片带来的一系列并发问题比较繁杂,因此测试之后放弃了,这里只讨论读写分离. 二.安装配置 1.安装JDK(要求

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

1.mycat二进制包安装 tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gzcd mycatmv mycat /opt/ useradd mycatchown -R mycat:mycat mycat 2.mysql操作搭建主库环境省略...... 创建数据库CREATE DATABASE `integration01` DEFAULT CHARACTER SET utf8 ; 创建物理表 CREATE TABLE