MyCAT+MYSQL读写分离实战

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) JDKJava 语言的软件开发工具包(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版本启动脚本,除了提供封装服务的版本之外,也提供了 nowrapshell脚本命令,方便大家选择和修改,进入到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.xmlschema.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名称,同时设置数据节点真实databasediscuz

<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  全部的readHoststand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1M2->S2,并且M1M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

3) balance=2  所有读操作都随机的在readhostwritehost上分发

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即可,如图所示:

查看80669066端口是否启动,其中8066用于WEB连接Mycat9066用于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

  1. -h 后面是主机即当前 mycat 按照的主机地址
  2. -u Mycat server.xml 中配置的逻辑库用户
  3. -p Mycat server.xml 中配置的逻辑库密码
  4. -P 后面是端口 默认 9066,注意 是大写

数据端口与管理端口的配置端口修改数据端口默认 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监控 支持如下特点:

  • 支持对MycatMysql性能监控 
  • 支持对MycatJVM内存提供监控服务 
  • 支持对线程的监控
  • 支持对操作系统的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服务器,填写如下配置即可:

 

猜你喜欢

转载自www.cnblogs.com/zhangan/p/10968283.html