MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离 | 学习笔记

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 快速学习 MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/756/detail/13283


MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离

内容介绍:

一、配置

二、读写分离验证

 

一、配置

<?xm1 version="1.0"7>

<100CTYPE mycat:schema SYSTEM"schema. dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="ITCAST"checks QLschema

="true"sqIMaxLimit="100">

<table name="user"data Rode="dn1"primaryKey="id"/>

</schema>

<dataNode name="dn1"dataHost=

"localhostl"database="db03"/>

<dataHost name="localhost 1"maxCon="1000"minCon

="10"ba1ance="1"writeType="0 dbType="mysql"

dbDriver="native"switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host='hostM1"url="192,168,192,147:3306

"user="root"password="itcast'>

<readHost host="hostS1"ur1="192.168.192.149:3306

"user="root"password="itcast"/>

</writethost>

</dataHost>

</mycat:schema>

接下来通过 MyCat 完成 MySQL 双主双从的读写分离。对于这一块的配置,我们主要还是操作核心配置文件 scheme.xml,通过 schema.xml 当中的 balance 属性来控制读写分离的类型。首先需要到 157 服务器克隆一个窗口,在这个窗口当中,需要切换到 mycat 的目录下,在 mycat 目录当中有一个 conf 目录,这里面有一个 schema.xml。先把 steamer.xml 进行备份,把它改一个名字改为scheme_ms.xml。

image.png

修改完成之后,还需要复制一份配置文件,因为需要一份新的配置文件,叫 scheme_ms.xml 修改为 schema.xml。做这个操作就是将原有的配置文件进行一个备份,然后生成一个新的配置文件,在新的配置文件上进行改造,就可以了。

接下来通过 NotePad++ 里面的插件进行修改。选择 MyCat1,找到 usr 目录,以及 usr 下面的 local,下面的 mycat 当中的 conf,找到刚才的 schema.xml。我们要修改 schema.xml,把里面的配置全部删掉。在这里面需要把上面的配置复制过来。

第一个逻辑库是 ITCAST,第二个逻辑表 user,刚才创建的表就是 user 表,他的数据节点 dn1,这个 dn1 指向的是 localhost1。数据库是 db03,他指的是 local host1 这个 dataHost 里面的 db03,而下面那个dataHost  里面的配置,最大连接,最小连接以及 balance 是负载均衡的策略机制。balance 为 1,还有 writeHost 为 0,数据库的类型 mysql,数据库的驱动采用的是百内驱动,切换类型 switchType 选择的是 1。下面是心跳,还有就是 writeHost,需要配置两个 writeHost,因为现在是双主双从。两个 writeHost 需要对应两台主机,一个是157,一个是 159。157 这台主机对应的从是 158,所以需要把 149 改为 158,151 改为 160。用户名 root,密码 ITCAST。就相当于第一个主 hostM1 对应第一个从 hostS1,第二个主 hostM2 对应第二个从 hosts2,这一块的配置就配置完了。

<schema name="ITCAST"checks QLschema

="true"sqIMaxLimit="100">

<table name="user"data Rode="dn1"primaryKey="id"/>

</schema>

<dataNode name="dn1"dataHost=

"localhostl"database="db03"/>

<dataHost name="localhost 1"maxCon="1000"minCon

="10"ba1ance="1"writeType="0 dbType="mysql"

dbDriver="native"switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host='hostM1"url="192,168,192,157:3306

"user="root"password="itcast'>

<readHost host="hostS1"ur1="192.168.192.158:3306

"user="root"password="itcast"/>

</writethost>

<writeHost host='hostM1"url="192,168,192,159:3306

"user="root"password="itcast'>

<readHost host="hostS1"ur1="192.168.192.160:3306

"user="root"password="itcast"/>

</writethost>

</dataHost>

</mycat:schema>

配置完成之后,需要检查 server.xml,里面的执行权限信息逻辑库 itcast 不用改动。

 

二、读写分离验证

1、接下来需要重启 my cat 进行测试。到 157 执行 bin/mycat restart,重启完成之后需要连接 mycat。连接 mycat 需要执行 mysql  -h 192.168.192.157 -p 8066 -u root -p,这样就连接上了 mycat。执行 show databases,可以看到逻辑库 ITCAST 已经有了,执行 use ITCAST、show tables 在查看里面的逻辑表 user 也已经有了。接下来执行 select * from user,会发现数据可以查询出来,关键点就是所查询出来的 user 表当中的数据,是从四个节点中哪个节点中查询出来的呢?

2、这个时候需要再打开一个窗口,去看 mycat 的日志,切换到 local 下面的 mycat,在 logs 目录下,在 logs 目录下有一个 mycat.log 查看一下。找到 select * from user,

image.png

可以看到是从 160 这个节点查的。在 157 上再查一次,可以看到是从 158 节点查的。接下来再查询一次,还是 160。再查一次,是 158。一会儿 158,一会儿160,再来查询一次,现在是 159,再查询一次,是 160。也就是说 158、159、160 都查询过,但是 157 没有执行过查询,因为他是查询操作。为什么没有让 157来执行呢?原因就在于我们刚才配置的一个属性 balance,balance属性我们配置的是 1,balance 为 1 代表的是所有的 readHost,代表的是从节点,以及 stand by writeHost 代表的是备用的写节点,备用的写节点实际上就是第二个写节点,这三个节点会参与 select 语句的负载均衡。也就是说,当我们发送一条 select 语句的时候,如果 balance 为 1,备用的主节点以及两个从节点都会参与负载均衡。所以 158、159、160 都可能会执行这条语句,但是 157 不会。

3、还需要做一个测试,当执行的不是 select 语句,而是一条 insert 语句,要来看它插入到哪了。一定要在 mycat 当中来执行,去找一个 insert 语句,在 157 上执行。当再插入一次,insert 语句在 157 插入。实际上不管执行多少次 insert,写入的操作永远操作的是 157。当我们执行的是查询的操作,那么她所操作的这个节点可能是备用的主节点以及两个从节点,这是由 balance 为 1 来决定的。这里主要是验证一下 balance 为 1 的情况。

4、接下来还要进行一个操作,还需要挂掉一个节点。要让主节点挂掉,因为现在写入的操作都是经过 157 来执行的,都是转发到 157 这台节点上,当 157 节点挂掉之后,又是怎样的现象呢?我们可以试一下。现在执行插入操作都是没有问题的,还是在 157 上进行。接下来将 157 挂掉,执行 service mysql stop,现在 157这个节点正在进行关闭,正在进行停止,已经停止完毕了。停止完毕之后,MyCat 的心跳检测在连接 157 的时候没有连接上,连接被拒绝了。

image.png

接下来,在往 mycat 当中来执行写入操作。大家会发现,他尝试了一次写入,但是这次写入被拒绝了,当我们再次执行的时候,发现成功了。这次执行 insert 语句走的是 159 节点。再插入一个数据,插入数据的时候走的是 159 节点,而 159 是157 的备用节点,这就验证了双主双从从的情况下,如果主节点挂掉,那么备用节点会启动。这是我们验证 mycat 双主双从读写分离的一个配置。

5、这里面还有两个配置,一个就是 writeType,write Type 取决于两个,一个是0,一个是 1,0 代表的是写操作都转发到第一台 writeHost,writeHost 挂了,会切换到 writeHost2 上;1 代表的是写操作都随机的发送到配置的 writeHost 上。如果为 0,写操作只会转发到第一个 writeHost,如果为 1,写操作会随机的在两个 writeHost 转发,会转发到两个 writeHost 上。还有一个属性是 switchType,switch 是切换,Type 是类型,SwitchType 指的是主从切换的类型,如果为负一代表的是不自动切换,如果是一代表的是自动切换。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
45 0
|
3月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
49 0
|
3月前
|
存储 SQL 关系型数据库
二、MySQL高级分享2
二、MySQL高级分享2
35 0
|
3月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
71 0
|
3月前
|
关系型数据库 MySQL 数据库
深入理解MySQL:从基础到高级数据库管理
深入理解MySQL:从基础到高级数据库管理
109 0
|
4月前
|
Java 关系型数据库 MySQL
②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
40 0
|
27天前
|
关系型数据库 MySQL 数据库
使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤
使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤
59 0
|
2月前
|
关系型数据库 MySQL
MySQL学习笔记
MySQL学习笔记
|
2月前
|
安全 关系型数据库 MySQL
某教程学习笔记(一):09、MYSQL数据库漏洞
某教程学习笔记(一):09、MYSQL数据库漏洞
17 0
|
2月前
|
SQL 关系型数据库 MySQL
Java中的MySQL高级使用手册:解锁数据库之道
Java中的MySQL高级使用手册:解锁数据库之道
49 1

推荐镜像

更多