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

简介: 快速学习 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 指的是主从切换的类型,如果为负一代表的是不自动切换,如果是一代表的是自动切换。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
734 81
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
359 6
|
10月前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
1187 44
如何实现 MySQL 的读写分离?
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
563 0
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
408 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
243 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
206 1
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
159 0
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
165 3

热门文章

最新文章

推荐镜像

更多