MySQL Router 是什么?相信还有很多人没有听说过MySQL Router,很多人对它还不了解,在这篇文章里,将对MySQL Router进行一个简明介绍。

首先,介绍一下MySQL Router推出的背景。

MySQL Router 是一个轻量级的中间件,它可以为应用程序和后端的MySQL服务器提供透明路由。它可以应用到很多的使用场景,例如,提供高可用性,可伸缩性等等。最重要的是,MySQL Router 是官方推出的中间件产品,推出目的是为了配合MGR(MySQL Group Replication)来实现一个完整的MySQL解决方案——MySQL Innodb Cluster。因此,它的地位至关重要,它需要配合MySQL的发展路线图来设计与开发,它会始终与官方版本的MySQL一起发展并保持一致性。

在MySQL使用场景中,部署多台MySQL服务器,利用主从复制或者是群组复制功能,实现高可用性是非常主流的方式。谈及系统的高可用性,MySQL在数据库层面,通过半同步方式的主从复制以及群组复制可以实现数据零丢失,达成了RPO(Recovery Point Object)=0,那么对于另一个指标RTO(Recovery Time Object)的要求,则是时间越短越好。经过用户的实测,使用MGR时,发生故障转移的切换时间< 30ms。

在数据库层面上,MySQL已经完全达到了企业级应用所需要的高级别要求。

此外,在应用程序与数据库连接的中间件层,为了实现发生故障转移时,应用程序能够透明连接到(无需人工干预或修改代码)可用的数据库服务器这一目的,推出了MySQL Router这款中间件产品,改变了以往只能依靠由社区提供的中间件产品或由第三方提供的商业产品来实现的情况。最大的好处是使得用户可以在官方得到一个完整的支持,而不是像以往,官方的支持只能提供到数据库层面,如果中间件层出现问题,则无法解决的尴尬现象。

其次,介绍一下MySQL Router的功能。

前面已经提到,MySQL Router 是作为 InnoDB Cluster的一个组件出现的,它要配合MGR实现应用程序的透明路由。对于应用程序来说,当其需要处理故障转移时,需要知道MySQL InnoDB Cluster的拓扑,并且需要知道群组里面哪一个节点是主节点。这些信息虽然可以通过应用程序的逻辑来获取,但是MySQL Router可以为应用程序提供这些功能并处理这些信息。

MySQL Router 位于应用程序和MySQL服务器之间。应用程序连接到MySQL Router,就像连接到普通的MySQL服务器一样。当应用程序连接到MySQL Router时,MySQL Router从它所知道的候选服务器池中选择一个合适的MySQL服务器,然后将其连接。从那一刻起,MySQL Router转发应用程序和MySQL之间的所有网络通信,包括从应用程序返回的响应。

MySQL Router 会将在线的MySQL服务器列表,或配置的InnoDB Cluster的配置状态保存在缓存里,这些信息在初始化时,从MySQL Router的配置文件读入缓存。为了保持缓存的更新,元数据缓存组件与包含元数据的InnoDB Cluster 服务器之间保留一个开放的连接。

它通过查询元数据和MySQL的performance schema中的实时状态信息来实现缓存更新。每当修改InnoDB Cluster (例如使用MySQL Shell添加或删除MySQL服务器)时,集群元数据就会更改,当检测到集群状态更改时,MySQL服务器的群组复制插件就会实时更新performance_schema表。

当MySQL Router检测到一个已连接的MySQL服务器关闭,例如,由于元数据缓存丢失了连接,无法重新连接,它尝试连接到另一个MySQL服务器,从新的MySQL服务器获取元数据和InnoDB Cluster 状态。

MySQL服务器的应用程序连接将自动关闭。然后它们必须重新连接到MySQL Router,MySQL Router将它们重定向到一个在线MySQL服务器。

再次,介绍一下MySQL Router 的工作流程、部署方法。

MySQL Router的工作流程如下:

1.MySQL客户端或连接器连接到MySQL Router,例如端口6446。

2.MySQL Router检查可用的MySQL服务器。

3.MySQL Router开启一个适当的MySQL服务器的连接。

4.MySQL Router在应用程序和MySQL服务器之间来回转发数据包

5.如果连接的MySQL服务器发送故障,MySQL Router将断开应用程序的连接。然后,应用程序可以重新尝试连接到MySQL Router,MySQL Router将选择一个新的可用的MySQL服务器。

部署MySQL Router,为了获得最佳的性能,推荐将MySQL Router 和应用程序部署在同一台主机上,这样可以利用UNIX的socket连接,降低网络延迟。可以将多个MySQL Router 部署在你的网络环境里面,无需将其隔离并单独部署。

这篇文章里不介绍详细的安装配置说明,仅仅介绍一下最基本的部署方法。相关的详细安装请参照官网手册:

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-installation.html

配置 :

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-configuration.html

下面是一个简单的例子,演示如何使用引导程序部署MySQL Router

例:

执行该脚本后,会生成MySQL Router的配置文件,内容类似如下:

在这里配置了4个端口和socket,分别用来供群组复制里面的Primary节点的读写,Secondary节点的读取使用,2个用于执行普通的SQL(6446和6447),其余两个用于执行NoSQL(64460和64470)。

之后,您可以使用应用程序或者客户端,通过连接这4个端口进行数据操作。

例如:

shell>mysql-uroot-h127.0.0.1-P6446-p

最后,介绍一下使用MySQL Router的常见问题。

1.MySQL Router 安装在哪里?

为了获得最佳性能,通常安装在与应用程序相同的主机上。这样做可以减少网络延迟。但是,这不是必须的,因为路由器可以安装在任何主机上。

2.可以运行多个MySQL Router实例吗?

可以。

3.MySQL Router检查数据包吗?

4.MySQL Router影响性能吗?

无论何时在通信流中引入组件,都会产生一定的开销,并受到工作负载的严重影响。与直接连接数据库相比较,MySQL Router会产生大约1%的影响。

5.MySQL Router的版本有2.xx和8.xx,我该使用哪个版本?

使用8.xx版本,2.xx版本是为了与早期产品兼容。

6.每个MySQL Router实例支持多少并发连接?

根据操作系统的poll()限制,在MySQL路由器2.1.5和8.0.4中,支持5000,而在早期版本中,由于内部使用select()而不是poll(),支持500。

总结。

这篇文章里简明介绍了MySQL官方的中间件——MySQL Router,希望让各位能够对该产品有一个初步的了解,让MySQL的用户知道,除了使用MHA、虚拟IP等中间件以外,还有一个更好的选择。

转文至此。

以下为个人公众号“一森咖记”,欢迎关注。

近期热文

你可能也会对以下话题感兴趣。点击链接便可查看。

mysql router 介绍_MySQL Router 介绍篇相关推荐

  1. mysql分区要求_MySQL 分区介绍总结

    介绍 分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区规则将表进行水平切分:逻辑上没有发生变化但实际上表已经被拆分成了多个物理对象,每个分成被划分成了一个独立的对象.相 ...

  2. mysql的基本介绍_mysql基本介绍

    IBM 2 MySql 基础知识 2.1 关系结构数据模型数据库 2.2 SQL... 常用mysql command 介绍 MySQL 常用操作基本操作,以下都是 MySQL5.0 下测试通过首先说 ...

  3. mysql router手册_mysql router

    https://www.cnblogs.com/hbxZJ/p/10224984.html mysqlrouter --user=root [DEFAULT] # 日志路径 logging_folde ...

  4. mysql索引参数_MySQL索引介绍

    索引由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 创建索引是指在某个表的一列或者多列上建立一个索引,用来提高对表的访问速度, 创建索引由三种方法:在创建表的时候创建,在已存在的 ...

  5. mysql 主从复制介绍_MySQL 主从复制介绍

    一.MySQL 主从复制简介 (1) MySQL 主从复制通过逻辑的 binlog 日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的 SQL 语句,重新应用到 MySQL 数据库中 (2) ...

  6. mysql图片字符集_MySQL字符集介绍及配置

    1.MySQL编码集 查看MySQL支持的字符集 mysql> show character set; 查看MySQL当前的字符集 mysql> show variables like ' ...

  7. mysql技术简介_MySQL数据类型介绍

    前言 数据类型(data_type)是指系统中所允许的数据的类型.数据库中的每个列都有适当的数据类型,它用于限制或允许该列中可以存储什么样的数据. MySQL数据类型 1.数值类型 数值类型包括严格数 ...

  8. mysql 数据库视图_MySQL视图介绍

    /* 视图 */ ------------------ 什么是视图: 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形 ...

  9. mysql事物介绍_MySQL事务介绍

    从事务理论的角度来说,可以把事务分为以下几种类型: 扁平事务类型(Flat Transaction) 带有保存点的扁平事务(Flat Transaction with Savepoints) 链事务( ...

  10. jdbc mysql url写法_MySQL第04篇:JDBC

    核心概述:在实际开发中,我们需要通过Java程序来操作数据库,此时Java给我们提供了Java访问数据库的标准规范就是JDBC,我们可以通过调用JDBC接口中的方法实现操作数据库. 第一章:JDBC快 ...

最新文章

  1. 视觉Transformer最新综述
  2. 网络推广软文浅谈网站优化过程中图片的优化技巧和注意事项!
  3. 中信证券新基建专题报告《5G和数据中心的投资机会》
  4. 猫咪藏在哪个房间python作业_python练习题之 猫2
  5. 2021衢二中高考成绩查询入口,2021衢州市地区高考成绩排名查询,衢州市高考各高中成绩喜报榜单...
  6. git clone 解决Permission Denied (publickey)问题
  7. java bundle类_java ResourceBundle介绍
  8. 基于移动最小二乘的图像变形
  9. 怎样在Windows 2016 Hyper-V上创建虚拟机
  10. 【RQNOJ86】智捅马蜂窝【最短路】
  11. 路畅畅云固件升级教程_【图】E-Link功能/智能语音 路畅畅云+车载导航评测_汽配中国网...
  12. meson和pkg-config
  13. focus和onfocus区别
  14. [UE4]接入steam sdk的plugin,可以获取到用户id和name,steam userid playerid
  15. 史上最详细的 Windows 10 ApacheTomcat 安装 后续 环境配置 + 微解 (狗头保个命)
  16. HTML table 属性 运用实例
  17. 十六、Barrier类(*)
  18. RPG的地牢猎手(优先队列广搜)
  19. java完成经典坦克大战项目源码
  20. 基于jsp的电影订票网站的设计与开发

热门文章

  1. 力扣刷题(347. 前 K 个高频元素)快速排序
  2. 屏蔽网站、网页和弹窗的方法
  3. 【Unity Shader】(十) ------ UV动画原理及简易实现
  4. Metadata-extractor读取图片的EXIF信息
  5. String intern方法
  6. magicbook大学计算机系,大学开学选择哪款笔记本? Redmibook 14全面对比荣耀Magicbook...
  7. 虚拟机VM12磁盘扩容
  8. HTML之基本布局设计之三栏式、两栏式设计
  9. 【渝粤教育】电大中专中药学基础作业 题库
  10. centos7 “v篇n“工具