目录
一.Mycat读写分离原理
Mycat读写分离是基于MySQL集群的主从复制实现的,而Mycat负责SQL分析,并将分析出的结果分发至与Mycat读写分离机制所绑定的MySQL主从复制数据库,从而实现读写分离。
Mycat 是什么?
Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。
二.部署jdk
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。
这里已经将jdk下载到本地直接解压
[root@mycat ~]# tar xf jdk-8u211-linux-x64.tar.gz
[root@mycat ~]#mv jdk-8u211-linux /usr/local/java
配置环境变量
[root@mycat ~]# vim /etc/profile
export PATH=/usr/local/java/bin:$PATH
使环境变量生效
[root@mycat ~]# source /etc/profile
三.部署Mycat
1.下载mycat并解压到指定文件
[root@mycat ~]# wget http://dl.mycat.org.cn/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
2.配置server.xml文件
以下为代码片段
下面的用户和密码是应用程序连接到 MyCat 使用的,可以自定义配置
而其中的schemas 配置项所对应的值是逻辑数据库的名字,也可以自定义,但是这个名字需要和后面 schema.xml 文件中配置的一致。
在server.xml文件中用户名root和密码123456是java端登陆mycat的用户名和密码并非在真正的数据库中。
上面的配置中,假如配置了用户访问的逻辑库,那么必须在 schema.xml
文件中也配置这个逻辑库,否则报错,启动 mycat 失败。
3.配置schema.xml文件
逻辑库和分表设置 :
<schema name="TESTDB" // 逻辑库名称,与server.xml的一致
checkSQLschema="false" // 不检查sql
sqlMaxLimit="100" // 最大连接数
dataNode="dn1"> // 数据节点名称
</schema>
<schema name="test"
checkSQLschema="false"
sqlMaxLimit="100"
dataNode="dn2">
</schema>
数据节点
dataNode 数据节点是用来连接server.xml中虚假数据库和数据库集群的真实数据库的。
<dataNode name="dn1" // 此数据节点的名称
dataHost="myhost" // 主机组
database="db1" /> // 真实的数据库名称
<dataNode name="dn2"
dataHost="myhost"
database="l" />
主机组
<dataHost name="myhost" // 主机组
maxCon="1000" minCon="10" // 连接
balance="3" // 负载均衡
writeType="0" // 写模式配置
dbType="mysql" dbDriver="native" // 数据库配置
switchType="1" slaveThreshold="100">
读写配置
此配置适合双主从复制
host="master1" url="master1:3306" user="mycat" password="224216" 这里的user和password
是真实数据库集群中存在的授权用户
<heartbeat>select user()</heartbeat> **健康检查**
<writeHost host="master1" url="master1:3306" user="mycat"
password="224216">
<readHost host="slave1" url="slave1:3306" user="mycat" password="224216" />
</writeHost>
<writeHost host="master2" url="master2:3306" user="mycat"
password="224216">
<readHost host="slave2" url="slave2:3306" user="mycat" password="224216" />
</writeHost>
</dataHost>
balance 属性
负载均衡类型,目前的取值有 4 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2
互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
4. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
5. balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
4.启动mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat start
[root@mycat ~]# /usr/local/mycat/bin/mycat status
Mycat-server is running (2305).
四.测试
这里我们配置双主双从数据库服务集群,做好域名解析。
192.168.134.150 master1
192.168.134.152 master2
192.168.134.149 slave1
192.168.134.151 slave2
在配置两个主服务器时在配置文件中加入log-slave-updates 使每个从服务器上的数据保持一致。
下图为数据库集群上的数据库。
!!!注意
在数据库集群上一定要有schema.xml配置文件中的授权用户(user=mycat)和数据库(db1和l);因为java端是在部署mycat的服务器上用server.xml中的root和123456登录的,通过schema.xml配置文件里的映射条件,映射到数据库服务集群的授权用户(mycat)才能看到数据库。
1.登陆测试
通过客户端进行测试是否能登录到 mycat 上192.168.134.150 是 mycat 的主机地址注意端口号是 `8066`
[root@mycat ~]# mysql -uroot -p123456 -h192.168.134.150 -P 8066
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
| test |
+----------+
2 rows in set (0.00 sec)
mysql> use TESTDB;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| bba |
| t1 |
| test1 |
| test3 |
+---------------+
4 rows in set (0.00 sec)
mysql>
可以进入到数据库并且查看。