Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统。
Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。
1. MyCAT安装配置
MyCAT系统安装环境:
192.168.149.128 MyCAT
192.168.149.129 MYSQL-MASTER
192.168.149.130 MYSQL-SLAVE
MyCAT安装之前,需要先安装jdk (Java Development Kit) ,JDK是 Java 语言的软件开发工具包(SDK)),本文安装版本为:jdk1.7.0_75.tar.gz
tar -xzf jdk1.7.0_75.tar.gz mkdir -p /usr/java/ mv jdk1.7.0_75 /usr/java/ |
配置java环境变量,vi /etc/profile 添加如下语句:
export JAVA_HOME=/usr/java/jdk1.7.0_75 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin |
source /etc/profile //使环境变量立刻生效。
java -version //查看java版本,显示版本为1.7.0_75,证明安装成功。
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar xzf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv mycat/ /usr/local/
MyCAT配置目录详解如下:
- bin程序目录,存放了 window版本和linux版本启动脚本,除了提供封装服务的版本之外,也提供了 nowrap的 shell脚本命令,方便大家选择和修改,进入到bin目录:
- Linux 下运行:./mycat console,首先要 chmod +x *
- mycat 支持的命令{ console | start | stop | restart | status | dump }
- conf目录下存放配置文件,其中:
- server.xm 丨Mycat服务器参数调整和用户授权的配置文件;
- schema.xm丨逻辑库定义和表及分片定义的配置文件;
- rule.xml |分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启Mycat或者通过9066端口 reload;
- lib目录下主要存放mycat依赖的一些jar文件;
- 日志存放在logs/mycat.log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要,可以调整输出级别为debug , debug级别下;
- Catlet |支持跨分片复杂SQL实现以及存储过程支持。
本文基于MyCAT实现读写分离,只需要涉及到两个MyCAT配置文件,分别是:server.xml和schema.xml文件:
其中Server.xml文件主要配置段内容如下:
<user name="abc1"> <property name="password">123456</property> <property name="schemas">testdb</property> </user> <user name="abc2"> <property name="password">123456</property> <property name="schemas">testdb</property> <property name="readOnly">true</property> </user> |
- 创建abc1、abc2两个用户用于连接MyCAT中间件:
- 用户名abc1、密码123456,对逻辑数据库testdb具有增删改查的权限,也即WEB连接MyCAT的用户名和密码;
- 用户名abc2,密码123456,该用户对逻辑数据库testdb只读的权限;
其中Schema.xml文件主要配置内容如下:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="localhost1" database="discuz" /> <dataHost name="localhost1" maxCon="2000" minCon="1" balance="0" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.149.129:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.149.130:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema> |
如上配置逻辑数据库testdb必须和server.xml中的用户指定的testdb数据库名称一致,否则会报错!如下为配置文件详解:
<?xml version="1.0"?> xml文件格式; <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 文件标签属性; <mycat:schema xmlns:mycat="http://io.mycat/"> Mycat起始标签 <schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"> </schema> 配置逻辑库,与server.xml指定库名保持一致,绑定数据节点dn1; <dataNode name="dn1" dataHost="localhost1" database="discuz" /> 添加数据节点dn1,设置数据节点host名称,同时设置数据节点真实database为discuz; <dataHost name="localhost1" maxCon="2000" minCon="1" balance="0" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 数据节点主机,绑定数据节点,设置连接数及均衡方式、切换方法、驱动程序、连接方法; Balance均衡策略设置: 1) balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehost; 2) balance=1 全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。 3) balance=2 所有读操作都随机的在readhost和writehost上分发; 4) balance=3 所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力。 writeType 写入策略设置 1) writeType=0, 所有写操作发送到配置的第一个writeHost; 2) writeType=1,所有写操作都随机的发送到配置的writeHost; 3) writeType=2,不执行写操作。 switchType 策略设置 1) switchType=-1,表示不自动切换; 2) switchType=1,默认值,自动切换; 3) switchType=2,基于MySQL 主从同步的状态决定是否切换; 4) switchType=3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。 <heartbeat>select user()</heartbeat> 检测后端MYSQL实例,SQL语句; <writeHost host="hostM1" url="192.168.149.129:3306" user="root" password="123456"> <readHost host="hostS1" url="192.168.149.130:3306" user="root" password="123456" /> </writeHost> 指定读写请求,同时转发至后端MYSQL真实服务器,配置连接后端MYSQL用户名和密码(该用户名和密码为MYSQL数据库用户名和密码); </dataHost> 数据主机标签; </mycat:schema> mycat结束标签; |
2. MyCAT读写分离测试
MyCAT配置完毕,直接启动即可;/usr/local/mycat/bin/mycat start即可,如图所示:
查看8066和9066端口是否启动,其中8066用于WEB连接Mycat,9066用于SA|DBA管理端口;
netstat -ntl|grep -E --color "8066|9066"
进入MyCAT命令行界面:
mysql -h192.168.149.128 -uabc1 -p123456 -P8066
进入9066 管理端口:
mysql -h192.168.149.128 -uabc1 -p123456 -P9066
执行命令如图所示:
show @@datasource;
停止Slave数据库:
所有读写请求均读取MASER数据库:
3. MyCAT管理命令
MyCAT 自身有类似其他数据库的管理监控方式,可以通过 Mysql 命令行,登录管理端口(9066)执行相应 的 SQL 进行管理,也可以通过 jdbc 的方式进行远程连接管理,本小节主要讲解命令行的管理操作。
其中8066 数据端口,9066 管理端口,命令行的登陆是通过9066 管理端口来操作,登录方式类似于 mysql 的服务端登陆。
mysql -h192.168.149.128 -uabc1 –p123456 -P8066
mysql -h192.168.149.128 -uabc1 –p123456 -P9066
- -h 后面是主机,即当前 mycat 按照的主机地址;
- -u Mycat server.xml 中配置的逻辑库用户;
- -p Mycat server.xml 中配置的逻辑库密码;
- -P 后面是端口 默认 9066,注意 P 是大写;
数据端口与管理端口的配置端口修改,数据端口默认 8066,管理端口默认 9066 ,如果需要修改需要配置 server.xml,加入如下代码,例如将数据库端口改成3306:
<property name="serverPort">3306</property> <property name="managerPort">9066</property> |
9066 管理端口登陆后,执行show @@help可以查看到所有命令:
常见管理命令如下:
1) 查看mycat版本
show @@version;
2) 查看当前的库
show @@database;
3) 查看MyCAT数据节点的列表,dataNode节点:
mysql> show @@datanode;
其中,“NAME”表示 dataNode 的名称;“dataHost”表示对应 dataHost 属性的值,即数据主机; “ACTIVE”表示活跃连接数;“IDLE”表示闲置连接数;“SIZE”对应总连接数量。
有1个空闲连接,那我们去主从节点用 netstat -ntp 命令看看建立的连接情况:
4) 查看心跳报告:
mysql> show @@heartbeat; 该命令用于报告心跳状态
5) 查看Mycat的前端连接状态,即应用与mycat的连接:
mysql> show @@connection\G
从上面获取到的连接 ID 属性,可以手动杀掉某个连接。
kill @@connection id,id,id
6) 显示后端连接状态:
mysql> show @@backend\G
7) 显示数据源:
mysql> show @@datasource;
4. MyCAT状态监控
MyCAT-WEB是基于mycat的一个性能监控工具,可以更有效的使用mycat管理mycat监控Mycat,让Mycat工作更加高效。Mycat-web的运行依赖 zookpeer ,需要提前安装Zookeeper服务,Zookeeper作为配置中心;
MyCAT监控 支持如下特点:
- 支持对Mycat、Mysql性能监控 ;
- 支持对Mycat的JVM内存提供监控服务 ;
- 支持对线程的监控;
- 支持对操作系统的CPU、内存、磁盘、网络的监控 ;
Zookeeper安装配置:
wget http://apache.opencas.org/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/ cd /usr/local/zookeeper-3.4.6/ cd conf cp zoo_sample.cfg zoo.cfg cd /usr/local/zookeeper-3.4.6/bin/ ./zkServer.sh start |
安装配置MyCAT-WEB:
wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
tar -xvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz -C /usr/local/
#修改zookeeper注册中心地址:
cd /usr/local/mycat-web/mycat-web/WEB-INF/classes
vim mycat.properties
zookeeper=127.0.0.1:2181
#启动MyCAT-WEB服务即可:
cd /usr/local/mycat-web/
./start.sh &
#通过浏览器访问如图所示:
访问地址是:http://192.168.149.128:8082/mycat/
连接MyCAT服务器,填写如下配置即可: