mycat

mycat是一个数据库中间件产品支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。

mycat的主要功能:读写分离,分库分表。

mycat是中间件服务器,就是通过mycat来访问数据库而不是直接访问数据库。

JDK:要求jdk必须是1.7及以上版本
MySQL:推荐mysql是5.5以上版本

在网上下载Jdk和mycat的包。

[root@mycat ~]# tar zxf Jdk-8u131-linux-x64.tar.gz -C /usr/local/

[root@mycat /usr/local]# ln -s jdk1.8.0_131/ java

[root@mycat /usr/local]# vim /etc/profile
	结尾添加
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

[root@mycat /usr/local]# . /etc/profile

校验:
[root@mycat /usr/local]# java -version
java version "1.8.0_131"

[root@mycat /usr/local]# ls $JAVA_HOME/lib/tools.jar
/usr/local/java/lib/tools.jar
[root@mycat /usr/local]# ls $JAVA_HOME/lib/dt.jar
/usr/local/java/lib/dt.jar

配置Java的环境变量。

配置mycat

[root@mycat ~]# tar zxf Mycat-server-1.6.tar.gz -C /usr/local/

[root@mycat /usr/local/mycat]# vim /etc/profile
export PATH=/usr/local/mycat/bin:$JAVA_HOME/bin:$PATH
添加环境变量

[root@mycat /usr/local/mycat]# . /etc/profile

[root@mycat ~]# echo $PATH
/usr/local/mycat/bin:/usr/local/java/bin:/usr/local/java/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

mycat的日志系统用的是log4j2

mycat的配置主要是修改两个配置文件:

1、server.xml
2、schema.xml

环境:
172.16.12.15 主从复制的从
172.16.12.50 主从复制的主
172.16.12.54 mycat
要做读写分离,从服务器做读,主服务器做写。

server.xml控制了mycat的用户名、密码及权限,分布式事务 等系统信息

schema.xml文件记录了逻辑库逻辑表,分片信息。

1、sevrver.xml

 <user name="root">
        <property name="password">000000</property>
        <property name="schemas">qqfarm,db2</property>
 </user>

root :用户名,访问mycat的用户。
password 密码
schmas,逻辑库,这个逻辑库是随便起的,但最好还是有点意义的,这个逻辑库一定要和schema.xml文件中的schema标签的名字能够匹配才行。

多个逻辑库之间用“,”逗号连接。

2、schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="qqfarm" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <schema name="db2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">
    </schema>
        <dataNode name="dn1" dataHost="localhost1" database="qqfarm" />
        <dataNode name="dn2" dataHost="localhost1" database="db2" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostS" url="172.16.12.50:3306" user="root"  password="000000">
            <readHost host="hoseC" url="172.16.12.15:3306" user="root" password="000000" />
            </writeHost>
            <writeHost host="hostS" url="172.16.12.50:3306" user="root"  password="000000">
            <readHost host="hoseC" url="172.16.12.15:3306" user="root" password="000000" />
            </writeHost>
       </dataHost>
</mycat:schema>

A、schema标签

<schema name="qqfarm" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>

schema,逻辑库,逻辑库和MySQL的database是一样的,在库下查询,查询2个库中 的表时要切换库。
一个mycat可以有多个逻辑库,没个逻辑库都有自己的属性信息。
如果不指定schema标签,name所有的表都会在同一个逻辑库中。

name属性,逻辑库的名字,要和server.xml文件的对应。

checkSQLschema 属性: 当该值为true时,例如我们执行语句
select * from qqfarm.company 。mycat会把语句修改为 select * from company 去掉qqfarm。

sqlMaxLimit 属性: 当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。
如果运行的schema为非拆分库的,那么该属性不会生效。需要自己sql语句加limit。

dataNode属性:指定了下边的dataNode 标签。

B、dataNode标签

<dataNode name="dn1" dataHost="localhost1" database="qqfarm" />

dataNode数据分片,这个标签是将具体的mysql数据库和分片绑定。

name属性:dataNode的名字。也是这个分片的唯一标识。

dataHost属性:数据库实例,对应下边的datahost标签。

database属性:数据库实例中真正存在的数据库。

C、datahost标签

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
     <heartbeat>select user()</heartbeat>
     <writeHost host="hostS" url="172.16.12.50:3306" user="root"  password="000000">
    	  <readHost host="hoseC" url="172.16.12.15:3306" user="root" password="000000" />
     </writeHost>
</dataHost>

这个标签有嵌套,里边包含了好多的数据库服务,每个服务中又有很多的database(将访问提供数据库服务的服务器简称为连接-连接也就是访问数据库的过程),每个连接都需要用户名和密码,就是我们直接访问数据库时要输入的用户名和密码,每一个连接就是一个数据库。

name属性:唯一标示dataHost标签,供上层使用

maxCon属性:指定每个读写实例连接池的最大连接。

minCon属性:指定每个读写实例连接池的最小连接,初始化连接池的大小

balance属性:负载均称类型
0:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
1:全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
2:所有读操作都随机的在writeHost、readHost上分发
3:所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。(1.4之后版本有)

writeType属性:负载均衡类型
0:所有的写操作发送到配置的第一个writeHost,第一个挂了切换到第二个。切换记录在文件dnindex.properties
1:所有的鞋操作都随机的发送到配置的writeHost,1.5以后版本废弃不推荐。

dbType属性:数据类型
还有mongodb,oracle,spark等

dbDriver属性
指定连接后段数据库使用的driver,目前可选的值有native和JDBC。

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

heartbeat:心跳语句,每隔一段时间就执行一下,确定数据库是否连接

writeHost 和 readHost:
mycat一般搭在主从复制的上边,实现读写分离,写写在主库上,读,读取的是从库。
write就是主,read就是从。

mysql 主 从 授权用户

mysql> grant all on qqfarm.* to root@'172.16.%' identified by '000000';
//让mycat能通过这个用户访问数据库

mysql> flush privileges;

启动mycat

[root@mycat ~]# mycat start
Starting Mycat-server...

[root@mycat ~]# mycat status
Mycat-server is running (1252).

测试读写分离:

首先开启通用查询日志。所有的操作都会被记录下来。
在这里插入图片描述从上图可以看到。左边是主从复制的主,右边是主从复制的从。

创建一个表。两边都创建了。因为写入主时,从也在向主请求二进制日志,也就执行了创建表的操作。

然后查询它表,这个操作只有从有,主没有。

后边的添加操作,主上有,从服务器从主哪里获取了二进制文件然后执行的。

select user()是心跳语句,用来检验是否通畅的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值