简述
Mycat是国产的一套免费开源的分布式数据库中间件。想必做开发或者运维的朋友对中间件这个词应该是比较熟悉了,我们见到过java中间件,消息中间件等等,这里又来了一个数据库中间件。那么什么是中间件呢,很容易理解,就是处在中间的物件。处在谁中间呢,一定是处在客户端和服务端中间。那么数据库中间件就是处在数据库的客户端和数据库服务端中间的那个东西。
原来我们在连接数据库的时候,我们通过客户端直接来连接我们的服务端。那么现在为什么要通过一个中间件呢,这不是多此一举吗?对于我们简单的数据库结构来讲,这确实是多此一举,但是对于庞大的数据库集群来讲,中间件的作用可就大了。
- 我们知道为了提高数据库的吞吐量,可以对数据库进行切分,可以采用读写分离。
- 为了提高数据库的可用性,可以对数据库进行高可用集群。
现在我们的客户端面临的不再是单台数据库节点,而是多台节点所组成的庞大的数据库集群。以读写分离为例,可能有一个主节点,多个从节点,主节点负责数据的写操作,从节点负责数据的读操作,从节点做了负载均衡。那么这个时候其实客户端面临就是两台机器,在客户端中就要配置两个数据源,在进行数据库操作的时候就需要我们的客户端来进行判断,到底是选择哪一台机器来进行操作。两个节点还比较好选择,如果机器多的话,比如数据库节点有5万台,那么这个时候你还能再让客户端来进行选择吗?这个时候数据库中间件就派上用场了。再比如我们对数据库进行拆分,分到不同节点的不同数据库中,那么我们在进行sql操作的时候,我们还要手动的再进行数据库路由和表路由,这是一个重复造轮子的事情,为了避免每次都要这么做,这个时候也就显示出了数据库中间件的作用。
数据库中间件对客户端屏蔽后端所连接的数据库服务,而是对外提供一个门面,这个门面就是由中间件所管理的虚拟数据库和虚拟表。为什么说是虚拟的呢,因为数据库中间件并不进行数据的操作,数据的操作依然是分发到后端的数据节点上。后端的节点可能有多个,对于一张表,可能分布到多个节点上,但是数据库中间件展现给客户端的就一张。这样客户端操作数据库中间件的这一张表,就可以操作到中间件所维护的多个节点的多个表,而客户端并不需要关注是如何操作的。
mycat还有一个非常大的优势就是它并没有自己创建一个协议,而是使用的mysql的协议,这样我们在操作mycat的时候,就像操作我们的mysql一样,可以通过mysql的客户端连接mycat,可以使用mysql的命令等等,这样对于mycat的入门就非常的简单了。
mycat采用的编程语言是java,运行需要jvm的支持。另外因为mycat是开源的,对于mycat的改造是比较方便的,比如自定义切分的规则等等。
部署MyCat
MyCat是一个Java应用,因此部署MyCat首先要安装Java。Java的安装可以参考Java安装笔记。 Java有一大特性,就是一次编写,到处运行,就是说Java的项目,可以运行在多种平台之上。也就是说,MyCat既可以运行到Windows平时,也可以运行在Linux平台,也可以运行在Mac上等等。只要是安装了Java环境的机器上理论上是都可以运行的。 MyCat官方提供了Windows和Linux的下载,当然既然是开源的,也提供了源码的下载。我们可以下载现成的软件来部署,也可以下载源码进行编译后部署。这里我们就下载Windows下编译打包好的软件来进行部署。
官网
http://www.mycat.io/
下载 win.tar.gz格式和linux.tar.gz格式。这里不知道为什么把Windows下的也打成了tar包,不过好在WinRAR是支持tar格式的解压的。下载到本地之后直接通过WinRAR来进行解压就可以了。解压后的目录结构如下
这个目录结构算是比较中规中矩的了。对于熟悉Java的朋友来讲这个结构可以说一看就知道是干嘛的。bin是存放的可执行文件。进到bin下,有如下文件
Windows + R 输入 cmd 弹出一个dos命令行窗口。在窗口中切换到当前的路径下,输入 mycat.bat console 就可以启动了
启动完毕之后,可以通过MySQL的客户端工具来进行连接,默认的用户名为root 密码为123456.
建议将加压完毕的文件夹放到磁盘的根目录下,比如放到c盘下或者d盘下。目录中不要带有中文。
Linux下安装也是同样,先安装jdk,然后解压就可以了 tar -zxvf ..... 剩下的就都一样了
其实mycat的单节点部署是非常简单的。解压之后就可以使用,这也是Java项目的一大特征吧。
很多情况下如果是在虚拟机的环境下安装,而虚拟机的内存在设置的比较小的情况下,启动会有问题,这里需要修改mycat的配置文件,将指定的内存改小。
/conf/wrapper.xml这个文件
# Java Additional Parameters
#wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=2G
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx4G
wrapper.java.additional.11=-Xms1G
看到有 2G 4G 1G 这样的,改成 512M就可以了。当然了如果你的内存设置的如果还小的,你可以尝试的改的再小一些。
MyCat用户配置
我们在首次使用客户端登录的时候,我们可以使用一个名字为root,密码为123456的这么一个账户。这个账户是MyCat给我们创建的一个默认用户,那么这个用户是在哪里指定的,或者又如何创建的呢。 这个问题其实非常简单,我们看到在mycat的目录下有一个conf目录,这个目录就是用来存放配置文件的目录,其中有一个配置文件叫做server.xml。打开这个文件,我们就很清楚用户的配置了。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<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>
去掉了一些其他的配置,我们可以看到,通过user标签就可以配置要连接的用户,通过嵌套property标签来指定用户的配置。比如password就是密码,schemas就是能够连接的数据库。在user下还可以配置权限。
通过这个配置文件很清楚的就可以了解到mycat的用户配置。如果想要新增加一个用户,那么直接添加一个 user 标签就可以。在user标签下指定密码和所连接的数据库。当然了,这里的数据库是虚拟的库,是在schema.xml配置文件中配置的。多个schemas使用逗号隔开。
到这里关于mycat的用户配置就说完了。
链接
来源:oschina
链接:https://my.oschina.net/u/3421984/blog/1810672