Mycat的安装与读写分离配置

Mycat:

一个可以用于MySQL读写分离和高可用的中间件

一个模拟为MySQL Server的超级数据库

一个能平滑扩展支持1000亿大表的分布式数据库系统

一个可管控多种关系数据库的数据库路由器

一个平滑从关系数据升级到大数据的应用中间件

 

准备工作:

两台mysql服务器(一主一从),一台mycat服务器,一台mysql客户机进行验证

为了方便,关闭所有主机防火墙

1.   配置mysql主从同步

1.png

创建数据库db1,db2,db3

创建表db1—test1,db2—test2,db3—test3

创建授权用户grant all on *.* to 'root'@'%' identified by '123456';

2.   mycat是由java开发的,所以需要先安装java,版本1.7以上

tar  zxf  jdk-8u20-linux-x64.tar.gz

mv  jdk1.8.0_20/  /usr/local/

添加环境变量(vim /etc/profile

export  JAVA_HOME=/usr/local/jdk1.8.0_20

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

2.png

3.   从官网下载mycat,并解压

tar  zxf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

mv mycat/ /usr/local/

添加环境变量

export  PATH=$PATH:/usr/local/mycat/bin

4.   配置

-bin :启动目录

-conf :配置文件

--server.xml:是Mycat服务器参数调整和用户授权的配置文件。

 

  --schema.xml:是逻辑库定义和表以及分片定义的配置文件。

 

  --rule.xml  是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT

 

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

 

  --autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties sequence_db_conf.properties 分片相关的id分片规则配置文件

 

  --lib         MyCAT自身的jar包或依赖的jar包的存放目录。

 

  --logs        MyCAT日志的存放目录。日志存放在logs/log中,每天一个文件

逻辑库配置

配置server.xml

3.png

配置schema.xml

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
<table name=”test1” dataNode=”dn1,dn2” rule=”rule1” />
</schema>
<schema name="test"  checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2" />
<schema name="user"  checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3" />
<dataNode name="dn1" dataHost="host" database="db1" />
<dataNode name="dn2" dataHost="host" database="db2" />
<dataNode name="dn3" dataHost="host" database="db3" />
 
<dataHost name="host" maxCon="1000" minCon="10" balance="1"
   writeType="0" dbType="mysql" dbDriver="native">
   <heartbeat>select 1</heartbeat>
   <!-- can have multi write hosts -->
   <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456”>
   <readhost="hostM2" url="192.168.0.3:3306" user="root" password="123456”>
</dataHost>


这里需要注意的是 balance, switchType, writeType

balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

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

balance="2",所有读操作都随机的在writeHostreadhost上分发。

balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

writeType表示写模式

writeType="0",所有的操作发送到配置的第一个writehost

writeType="1",随机发送到配置的所有writehost

writeType="2",不执行写操作

switchType指的是切换的模式,目前的取值也有4种:

switchType=‘-1‘ 表示不自动切换

switchType=‘1‘ 默认值,表示自动切换

switchType=‘2‘ 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status

switchType=‘3‘基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘

 

5.启动mycat

cd  /usr/local/mycat/bin

./mycat  start

4.png

6.客户机登录

mysql -uroot -p123456 -P8066 –h mycat服务器IP

7.验证

关闭主从同步stop slave;

 往mycat插入一条数据,提交刷新

观察刚插入的数据,发现mycat并没查看到这条数据

 观看主库,发现主库有这条通过mycat添加的数据
 
观看从库,发现从库没有通过mycat添加的数据
 
开启从数据库主从同步start slave;

通过从库查看发现有刚新添加的数据

通过mycat查看发现也有这条刚添加的数据


猜你喜欢

转载自blog.51cto.com/13555753/2314188