mysql router 介绍_MySQL Router 介绍篇

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服务器。

976715f236613448ab749bf1dd49cc96.png

部署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

例:

80973d34139f4ab936e4e732616f019a.png

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

1c8c862626c8fb13174e2f5436dcab99.png

在这里配置了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等中间件以外,还有一个更好的选择。

转文至此。

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

近期热文

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react 更新input 默认值setfieldsvalue_值得收藏的React面试题

react1、什么是虚拟DOM&#xff1f;难度: ⭐虚拟 DOM (VDOM)是真实 DOM 在内存中的表示。UI 的表示形式保存在内存中&#xff0c;并与实际的 DOM 同步。这是一个发生在渲染函数被调用和元素在屏幕上显示之间的步骤&#xff0c;整个过程被称为调和。2、类组件和函数组件之间的区…

实验二Step1-有序顺序表

1 #include<stdio.h>2 3 struct job4 {5 char name[10];//作业名称6 char status;//当前状态7 int arrtime;//到达时间8 int reqtime;//要求服务时间9 int startime;//调度时间 10 int finitme;//完成时间 11 float TAtime,TAWtime;//周转时…

ocx控件 postmessage消息会消失_APP控件之二——弹框

弹框分为两种&#xff1a;模态弹框和非模态弹框一、模态弹框模态弹框和非模态弹框最大的区别就是是否强制用户交互。模态弹框会打断用户的当前操作流程&#xff0c;用户不在弹框上操作的话&#xff0c;其余功能都使用不了。优点是&#xff1a;可以很好的获取的用户的视觉焦点缺…

结对编程(1)

我的结对编程项目搭档是王以正&#xff0c;我们的代码也是基于他个人项目的代码修改的。 由于王以正同学不在宿舍住也不怎么会宿舍&#xff0c;我们结对编程的时间较少&#xff0c;不过他将他的代码代码放到了github上面&#xff0c;这也让我有机会学习了github的使用。感觉这个…

伪代码block转换成程序流程图_程序设计基础

1、程序与程序设计语言的基本知识1&#xff09;程序&#xff1a;为解决某一问题而采用程序设计语言编写的一个指令集合。程序算法&#xff08;对操作的描述&#xff09;数据结构&#xff08;对数据的描述&#xff09;程序设计语言语言工具和环境。2&#xff09;程序的特点&…

mysql 内联函数_C++之内联函数

C继承C的一个重要特性是效率&#xff0c;在C中保护效率的一个方法是使用宏(macro),宏的实现是使用预处理器而不是编译器&#xff0c;预处理器直接用宏代码替换宏调用&#xff0c;所以就没有了参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN的时间花费&#xff…

10桌面管理文件收纳_二十余件精选桌面好物推荐,让学习工作生活满满正能量!...

这些提升办公桌幸福感的好物&#xff0c;能让你的学习与工作正能量满满&#xff01;01 笔记本支架笔记本是为了人们出行方便而设计的&#xff0c;显示器的位置并没有照顾到长期对着显示器码字的人群&#xff0c;许多以笔记本为主力的办公族也被迫成为了低头族。绿巨能(llano)笔…

hash 值重复_面试题:HashSet是如何保证元素不重复的

面试官&#xff1a;你能简单介绍List和Set有什么区别吗&#xff1f;小憨&#xff1a;List是一个有序的集合&#xff0c;在内存是连续存储的&#xff0c;可以存储重复的元素&#xff0c;List查询快&#xff0c;增删慢&#xff1b;Set是一个无序的集合&#xff0c;在内存中不连续…

RabbitMQ 原文译03--发布和订阅

发布/订阅 在之前的案例中我们创建了一个工作队列,这个工作队列的实现思想就是一个把每一个任务平均分配给每一个执行者,在这个篇文章我们会做一些不一样的东西,把一个消息发送给多个消费者,这种模式就被称作"发布/订阅". 为了说明这个模式,我们将要创建一个简单的日…

html富文本编辑器插件_vue中使用vuequilleditor富文本编辑器

点击上方“小姚同学技术栈”快速关注我哟&#xff01;vue-quill-editor是一个基于quill、适用于vue的富文本编辑器开源项目&#xff0c;支持服务端渲染和单页应用。目前项目热度还算可以&#xff0c;如果不考虑使用markdown&#xff0c;vue-quill-editor是一个比较好的选择。本…

二元函数图像生成器_GAN生成图像综述

点击上方“CVer”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达作者&#xff1a;YTimo(PKU EECS) 研究方向&#xff1a;深度学习&#xff0c;计算机视觉本文转载自&#xff1a;SIGAI摘要生成对抗网络(Generative adversarial network, GAN)…

设计模式之禅读书笔记

》设计原则《 》Single Responsibility Principle&#xff08;单一职责原则&#xff09;类只有一个修改的原因。 ●类的复杂性降低&#xff0c;实现什么职责都有明确的定义。 ●可读性高 ●可维护性高 ●变更引起的风险降低。 PS&#xff1a;基本不可能实现 》里氏替换原则&…

mysql mysql_set_charset_SQL注入攻击之 mysql_set_charset [转]

本文转载地址&#xff1a;http://hi.baidu.com/cuttinger/blog/item/e9a93901934755147bec2cb0.html1。老话题&#xff0c;mysql_real_escape_string单引号&#xff0c;大多数情况下&#xff0c;防止sql注入攻击足够了。$mysql mysql_connect("host","user&quo…

idea导入maven项目依赖报错_解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?

1、何为依赖冲突Maven是个很好用的依赖管理工具&#xff0c;但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子&#xff0c;现在你的项目中&#xff0c;使用了两个Jar包&#xff0c;分别是A和B。现在A需要依赖另一个Jar包C&#xff0c;B也需要依赖C。但…

java线程创建方式_Java创建线程安全的方法

原文链接 译者&#xff1a;秦建平 校对&#xff1a;方腾飞首先来看一个问题&#xff1a;下面这个方法是线程安全的吗&#xff1f;如何才能让这个方法变成线程安全的&#xff1f;public class MyCount {private static int counter 0;public static int getCount(){return coun…

win7 能下node什么版本_微软从未公开的win10版本,3GB+极度精简,老爷机有救了

在windows家族中&#xff0c;最好用的就是win7和XP系统。堪称经典&#xff0c;而且还是发展最成功的系统版本。前几天韩博士也发布一篇关于XP系统的文章&#xff0c;评论区引发极大争论。大家众说纷纭&#xff0c;觉得XP系统是顺畅&#xff0c;但是很多软件硬件都不支持&#x…

【Swift学习】Swift编程之旅(一)

学习一门新语言最经典的例子就是输出“Hello World&#xff01;” print("Hello World!")  swift就是这样来输出的。 如果你使用过其他语言&#xff0c;那么看上去是非常的熟悉吧。但比一些c要简单的多吧 1、不需要导入一些单独的库&#xff0c;比如输入/输出或字符…

孔夫子二手书采集

文章目录 项目演示软件采集单本数据网页搜索数据对比 使用场景概述部分核心逻辑Vb工程图数据导入与读取下拉框选择参数设置线程 使用方法下载软件授权导入文件预览处理后的数据 项目结构附件说明 项目演示 操作视频详见演示视频&#xff0c;以下为图文演示 软件采集单本数据 …

为什么用redis做缓存而不是mybatis自带的缓存_如何用Java设计一个本地缓存,涨姿势了...

最近在看Mybatis的源码&#xff0c;刚好看到缓存这一块&#xff0c;Mybatis提供了一级缓存和二级缓存&#xff1b;一级缓存相对来说比较简单&#xff0c;功能比较齐全的是二级缓存&#xff0c;基本上满足了一个缓存该有的功能。当然如果拿来和专门的缓存框架如ehcache来对比可能…

process 类 java_编写可执行jar——java的Process类的使用(二)

你知道怎么在控制台使用ping吗&#xff1f;那你知道怎么在java中使用ping吗&#xff1f;1.批处理文件批处理文件大家一定不陌生。接触最多的应该就是tomcat中的start.bat或者start.sh了。bat是在windows环境下运行的批处理文件&#xff0c;sh则是linux的shell脚本。2.adb指令安…