一. mycat原理图如下:
如上篇文章,在搭建好mysql主从数据库的基础上,现在开始利用mycat实现一主一从读写分离,主要有以下几个步骤:
二. 准备工作(后面会用到)
1. 主从机名称修改
主机:192.168.1.10 从机:192.168.1.108
修改主从机的名字:
hostnamectl set-hostname 192.168.108
hostnamectl set-hostname 192.168.108
修改完毕通过hostname,查看机器名
三. mycat解压安装
mycat官方使用文档:https://github.com/MyCATApache/Mycat-Server/wiki
去官网下载mycat:http://dl.mycat.io/1.6.7.3/20190927161129/
Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
利用ftp上传到主机上,然后在主机上解压安装mycat
mv Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz /usr/local
tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
mv Mycat-server-1.6.7.3-release-20190927161129-linux mycat
四. mycat 配置
/usr/local/mycat/conf 下有几个文件
1. server.xml : 定义用户以及系统相关变量,如端口等
vim server.xml 修改如下部分,设置登录mycat的用户名,密码,以及逻辑库名
<user name="mycat"> // 用户名<property name="password">123456</property> // 密码<property name="schemas">TESTDB</property> // 逻辑库名称</user>
2.rule.xml:分片规则
3.schema.xml:定义逻辑库,表分片,节点
这里我们主要配置下schema.xml
负载均衡类型,目前的取值有4 种:
(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",所有读操作都随机的在 writeHost、readhost 上分发。
(4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema><!-- 配置物理数据库名testDB --><dataNode name="dn1" dataHost="localhost1" database="testDB" /><!-- 为了能看到读写分离的效果,把balance设置成2,会在两个主机间切换查询 --><dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><!-- 主机写库ip--><writeHost host="hostM1" url="192.168.1.10:3306" user="root"password="123456"><!-- 从机读库ip--><readHost host="hostS1" url="192.168.1.108:3306" user="root"password="123456"/></writeHost></dataHost></mycat:schema>
4. 远程连接主机数据库,从机数据库,看看是否可以连得上。
cd /usr/local/mysql/bin
./mysql -u root -p -h 192.168.1.10 -P3306 //主机
密码123456
./mysql -u root -p -h 192.168.1.108 -P3306 // 从机
密码123456
五. 启动&登录mycat
1. 启动等命令
启动程序 mycat是用Java写的
(1) 控制台启动:去mycat/bin目录下执行./mycat console 使用控制它启动,可以看到日志-------使用这个
(2) 后台启动:去mycat/bin目录下 ./mycat start
./mycat restart
./mycat status
./mycat start
./mycat stop
启动成功输出:Starting Mycat-server...
两种登录方法:
登录管理窗口(运维管理): mysql -umycat -p123456 -h 192.168.1.10 -P9066
登录数据窗口:mysql -umycat -p123456 -h 192.168.1.10 -P8066 使用这个
2. 测试mycat的配置是否正常
(1)先启动搭建好的主从模式
(2)进入到mycat命令行中可以测试下,是否可以通过mycat可以查询到主从数据。可以查到的话,就代表我们配置正常。然后就可以进行下面的读写分离了。
六. 验证读写分离
1. 在写主机插入:insert into mytable values (1, @@hostname);
主从主机数据不一致了
2. 在Mycat里查询:select * from mytable