当前位置: 代码迷 >> 综合 >> Mycat 读写分离,主从切换
  详细解决方案

Mycat 读写分离,主从切换

热度:3   发布时间:2023-12-15 00:50:33.0

一. 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