MySQL Router是MySQL Proxy的替代方案,MySQL官方不建议将MySQL Proxy用于生产环境,并且已经不提供MySQL Proxy的下载。在后期的使用中,没有出色的表现,因为proxy除了读写分离,没有其他作用,也无法动态更改配置。

InnoDB Cluster中MySQL Router充当代理,向应用程序隐藏网络上的多个MySQL实例,并将数据请求映射到其中一个集群实例。MySQL Router的推荐部署模型是与InnoDB Cluster集成。

功能

1.Failover
一个高可用的MySQL设置由一个主服务器和多个从服务器组成,由应用程序处理故障转移,以防MySQL主服务器变得不可用。使用MySQL路由器,应用程序连接将根据负载平衡策略透明地进行路由

2.Load Balancing
MySQL路由器通过在一个服务器池中分布数据库连接来提供额外的可伸缩性和性能。例如,如果您有一组复制的MySQL服务器,MySQL路由器可以以循环方式将应用程序连接分发给它们。

3.Pluggable Architecture:
MySQL用户提供了创建自己的定制插件的能力,从而提供了无限的可能性。MySQL路由器目前提供了一些核心插件,包括:

  • 连接路由插件,它做基于连接的路由,这意味着它将MySQL数据包转发到后端服务器,而不检查或修改它们,从而提供最大的吞吐量。

  • 元数据缓存插件,它提供透明的客户端负载平衡、路由和故障转移到组复制和InnoDB集群

    Router中间件本身不会对请求“拆包”(unpackage),所以无法在Router中间件上实现比如“SQL审计”、“隔离”、“限流”、“分库分表”等功能。但是Router提供了plugin(C语言)机制,用户可以开发自己的plugin来扩展Router的额外特性。

原理:

Router作为一个流量转发层,位于应用与MySQL服务器之间,其功能类似于LVS。

MySQL Router的工作流程如下:
1.MySQL客户端连接到MySQL Router。
2.Router检查可用的MySQL服务器。
3.Router打开一个适用MySQL服务器的TCP连接。
4.Router在应用程序和MySQL服务器之间来回转发数据包
5.如果连接的MySQL服务器出现故障, Router将断开连接。当应用程序重试连接到Router时,Router选择另一个可用MySQL服务器。

简单理解,应用不再直连MySQL Servers,而是与Router相连,根据Router的配置,将会把应用程序的读写请求转发给MySQL Servers。当有多个MySQL Servers,无论主、从,Router可以对读写请求进行负载均衡。当某个Server失效时,Router可以将其从Active列表中移除,当其online后再次加入Active列表,即提供了Failover特性。如果使用InnoDB Cluster模式,那么Router还能基于metaCache(metaServers)机制,感知MySQL的主从切换、从库增减等集群拓扑变更,而且基于变更能够实现Master自动切换、Slaves列表自动装配等。

安装部署:

发现一个现象,router之前是2.0之后的版本下载,跟mysql版本一样,都有有小版本。有些环境下 router版本和mysql 版本不对称,出现比较严重的故障。


安装地址:https://dev.mysql.com/downloads/router/
官方说明:https://www.mysql.com/cn/products/enterprise/router.html

1.安装

[root@ss30 softwares]# tar -xvf mysql-router-8.0.19-linux-glibc2.12-x86_64.tar.xz
mysql-router-8.0.19-linux-glibc2.12-x86_64/bin/mysqlrouter_keyring
mysql-router-8.0.19-linux-glibc2.12-x86_64/bin/mysqlrouter
mysql-router-8.0.19-linux-glibc2.12-x86_64/bin/mysqlrouter_passwd
mysql-router-8.0.19-linux-glibc2.12-x86_64/bin/mysqlrouter_plugin_info
mysql-router-8.0.19-linux-glibc2.12-x86_64/README.router[root@ss30 softwares]# mv mysql-router-8.0.19-linux-glibc2.12-x86_64 mysqlRouter8.0.19[root@ss30 bin]# vi /etc/profile
#MySQLRouter8.0.19
export PATH=/opt/idc/softwares/mysqlRouter8.0.19/bin:$PATH
[root@ss30 bin]# source /etc/profile

2.创建目录

[root@ss30 mysqlrouter]# mkdir -p /opt/mysqlrouter/data
[root@ss30 mysqlrouter]# mkdir -p /opt/mysqlrouter/log
[root@ss30 mysqlrouter]# mkdir -p /opt/mysqlrouter/run
[root@ss30 mysqlrouter]# mkdir -p /opt/mysqlrouter/config
[root@ss30 mysqlrouter]# cp /opt/idc/softwares/mysqlRouter8.0.19/share/doc/mysqlrouter/sample_mysqlrouter.conf /opt/mysqlrouter/config/mysqlrouter.conf

读写分离配置

配置信息:

[root@ss30 mysqlrouter]# vi /opt/mysqlrouter/config/mysqlrouter.conf
[DEFAULT]
logging_folder         = /opt/mysqlrouter/log
plugin_folder          = /opt/idc/softwares/mysqlRouter8.0.19/lib/mysqlrouter
config_folder          = /opt/mysqlrouter/config
runtime_folder         = /opt/mysqlrouter/run
data_folder            = /opt/mysqlrouter/dataclient_connect_timeout = 2
connect_timeout        = 2
read_timeout           = 30
max_connections        = 2048# keyring_path = /var/lib/keyring-data
# master_key_path = /var/lib/keyring-key[logger]
level = DEBUG
timestamp_precision = second[routing:primary]
# To be more transparent, use MySQL Server port 3306
bind_address     = 0.0.0.0
bind_port        = 7001
routing_strategy = first-available
mode             = read-write
destinations     = 192.168.244.130:3410[routing:secondary]
# To be more transparent, use MySQL Server port 3306
bind_address     = 0.0.0.0
bind_port        = 7002
routing_strategy =  round-robin
mode             = read-only
destinations     = 192.168.244.144:4310,192.168.244.130:3410# If no plugin is configured which starts a service, keepalive
# will make sure MySQL Router will not immediately exit. It is
# safe to remove once Router is configured.
[keepalive]
interval         = 60

启动

[root@ss30 mysqlrouter]# mysqlrouter -c /opt/mysqlrouter/config/mysqlrouter.conf &

从安装到部署,非常简单。涉及的参数也少。

MGR节点

配置信息:通过命令 相关的配置信息会自动生成

[root@ss30 mysqlrouter]# mysqlrouter --bootstrap root@192.168.244.129:3380 --directory /opt/mysqlrouter/mgr --user=root

目录结构

mysqlrouter.conf配置文件

# File automatically generated during MySQL Router bootstrap
[DEFAULT]
user=root
logging_folder=/opt/mysqlrouter/mgr/log
runtime_folder=/opt/mysqlrouter/mgr/run
data_folder=/opt/mysqlrouter/mgr/data
keyring_path=/opt/mysqlrouter/mgr/data/keyring
master_key_path=/opt/mysqlrouter/mgr/mysqlrouter.key
connect_timeout=15
read_timeout=30
dynamic_state=/opt/mysqlrouter/mgr/data/state.json[logger]
level = INFO[metadata_cache:mgrCluster]
cluster_type=gr
router_id=1
user=mysql_router1_zesa3g471bns
metadata_cluster=mgrCluster
ttl=0.5
use_gr_notifications=0[routing:mgrCluster_rw]
bind_address=0.0.0.0
bind_port=6446
destinations=metadata-cache://mgrCluster/?role=PRIMARY
routing_strategy=first-available
protocol=classic[routing:mgrCluster_ro]
bind_address=0.0.0.0
bind_port=6447
destinations=metadata-cache://mgrCluster/?role=SECONDARY
routing_strategy=round-robin-with-fallback
protocol=classic[routing:mgrCluster_x_rw]
bind_address=0.0.0.0
bind_port=64460
destinations=metadata-cache://mgrCluster/?role=PRIMARY
routing_strategy=first-available
protocol=x[routing:mgrCluster_x_ro]
bind_address=0.0.0.0
bind_port=64470
destinations=metadata-cache://mgrCluster/?role=SECONDARY
routing_strategy=round-robin-with-fallback
protocol=x

mgr,router集群创建构成中,创建的账号

备份账号,元数据账号:

链接测试

[root@ss30 config]# mysql -h192.168.244.130 -P6447 -udbadmin -p
##mysql -h192.168.244.130 -P6447 -udbadmin -p123456 --protocol=TCP -N -r -B -e"select @@hostname;show variables like 'server_uuid';"


注意:

  • mysql_innodb_cluster_metadata是shell命令自动生成库
  • Innodb cluter 结合mysql router使用必须借助于mysql shell实现

参数

抽取了几个重要的参数,进行说明
官网地址:https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-conf-options.html

基础参数

  • connect_timeout:连接到MySQLrouter服务器时超时值。默认值是30秒。

路由参数

  • max_connections:每条路由都可以限制路由或连接的数量。一种可能的用途是帮助防止可能的拒绝服务(DOS)攻击。默认值是512,有效范围是1到65536。
  • thread_stack_size:为每个线程分配的堆栈大小。单位是kb,默认为64。
  • read_timeout:从MySQL元数据服务器读取时,MySQL路由器使用的超时值。默认值是30秒。
  • mode : read-write ,read-only
  • routing_strategy:负载模式
    1.first-available 新连接选择列表路由到第一个可用的服务器。如果出现故障,则使用下一个可用的服务器。这个循环一直持续到所有服务器都不可用为止。
    2.next-available 新连接选择列表路由到第一个可用的服务器。如果出现故障,则使用下一个可用的服务器。这个循环一直持续到所有服务器都不可用为止。
    与first-available不同的是,如果一个服务器被标记为不可到达,那么它将被丢弃,并且再也不会使用
    3.round-robin 每个新连接都以循环方式连接到下一个可用的服务器。
    4.round-robin-with-fallback 每个新连接都以循环方式连接到下一个可用的辅助服务器。如果辅助服务器不可用,则以循环方式使用主列表中的服务器
    默认:PRIMARY,SECONDARY,PRIMARY_AND_SECONDARY round-robin is default

元数据缓存

  • bootstrap_server_addresses:指向可以连接到的具有元数据的MySQL服务器列表。在访问元数据之后,元数据缓存切换到主副本集中的服务器来获取元数据。它们也被称为引导服务器。此选项在MySQL路由器8.0.14中被弃用,不再由引导进程生成。相反,添加了dynamic_state选项作为替代。
  • dynamic_state:跟踪和存储活动的MySQL InnoDB集群元数据服务器地址,并在路由器重启时加载它们。这个功能是由bootstrap激活的

MySQL Router的常见问题。

个人实际经验中总结。

1.MySQL Router 安装在哪里?
建议主要出于性能考虑。每当在网络中引入通信组件时,都会产生一定的开销,一般在与应用程序相同的主机上安装并运行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 Router从原理、安装、配置到部署使用都是如此轻而易举,可满足简单高可用应用场景的需求。Mgr配置无法手动进行,因为元数据mysql_innodb_cluster_metadata数据库上。现阶段不支持一些动态加载参数。其实这部分功能是非常实用的。
希望官方考虑把这部分容纳进去。

MySQL8.0环境下 MySQL Router介绍相关推荐

  1. mysql8.0卸载出现问题,Windows环境下MySQL 8.0 的安装、配置与卸载

    软件版本 Windows:Windows10 MySQL:mysql-8.0.17-winx64.zip 安装步骤 1.配置环境变量 2.新建my.ini文件 文件位置:C:\Program File ...

  2. 安装mysql8.0配置环境_Windows环境下MySQL 8.0 的安装、配置与卸载

    软件版本 Windows:Windows10 MySQL:mysql-8.0.17-winx64.zip 安装步骤 1.配置环境变量 name:Path value:C:\Program Files\ ...

  3. mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例

    官方网址 https://dev.mysql.com/downloads/mysql/ 社区版本分析 MySQL5.5:默认存储引擎改为InnoDB,提高性能和可扩展性,增加半同步复制 MySQL5. ...

  4. Windows环境下MySQL 8.0 的安装、配置与卸载

    MySQL官方下载地址 安装步骤 1.新建my.ini文件 文件位置:C:\ProgramFiles\MySQL\mysql-8.0.26-winx64\my.ini (这是我的安装目录,你们根据自己 ...

  5. windows环境下MySQL服务端和客户端安装,超详细

    windows环境下MySQL服务端和客户端安装,超详细 MySQL简介 MySQL的安装步骤 服务端安装 客户端安装 MySQL简介 MySQL是关系型数据库,由n张互相关联的表组成.一般是c或c+ ...

  6. JDK5.0环境下配置PKCS#11

    JDK5.0环境下配置PKCS#11 发表日期:2008-1-5 新浪微博 QQ空间 QQ微博 百度搜藏 腾讯朋友 QQ收藏 百度空间 人人网 开心网 这篇文章不介绍具体的编程方法,而是针对PKCS# ...

  7. Ubuntu 18.x 环境下mysql创建用户并更改用户权限

    Ubuntu 18.x 环境下mysql创建用户并更改用户权限 1,在安装好mysql后 root用户的密码 就是刚才自己安装mysql 过程中设置的密码. 2,现在创建一个新的用户 xxx 密码 1 ...

  8. windows 环境下mysql的操作浅析

    windows 环境下mysql的操作 一,MYSQL 的连接 在下载安装好mysql后,访问数据控之前我们需要先连接数据库: 建立一个connect.php 的文件: (面向过程) <?php ...

  9. 在Linux环境下mysql的root密码忘记解决方法(三种)

    这篇文章主要介绍了在Linux环境下mysql的root密码忘记解决方法,详细的介绍了3种解决办法,具有一定的参考价值,有兴趣的可以了解一下. MySQL密码的恢复方法之一 1.首先确认服务器出于安全 ...

最新文章

  1. 小猿圈之学习java web需要有什么基础?
  2. 1.7 Java字符流的使用:字符输入/输出流、字符文件和字符缓冲区的输入/输出流
  3. PaddlePaddle训练营——公开课——AI核心技术掌握——第2章机器能“看”的现代技术
  4. [转]一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
  5. koa2 mysql_koa2+vue+mysql 全栈开发记录
  6. python中的is_python中的is
  7. string input must not be null解决办法
  8. Android中的动画详解系列【2】——飞舞的蝴蝶
  9. 中秋祝福网页制作_幼儿园中秋节活动方案(附环创)
  10. python微信开发入门_python tornado微信开发入门代码
  11. Interval GCD
  12. 强化学习——从最简单的开始入手
  13. .net MVC小尝试
  14. VMware搭建PXE无盘工作站,出现这种问题各位遇到过吗?
  15. php网站源码 一品资源网,一品资源网自用官网模板源码下载站(带手机模板)...
  16. ipad分屏功能怎么开启_win10录屏功能怎么开启
  17. 位(bit)、字节(Byte)、KB、MB、GB ... 之间的关系
  18. 游戏角色设计具体步骤
  19. RabbitMQ的Queue详解;
  20. 新手入门PS人像磨皮教程

热门文章

  1. EPSON墨盒及打印机型号对照
  2. 什么是用户故事及用户故事在敏捷开发中如何编写
  3. 重庆市第九届大学生程序设计大赛Day1.题D代码
  4. 年龄大了学计算机,年龄大了就“不值钱”的专业,30岁开始走下坡路,学生要慎重选择...
  5. drupal 7 ajax,解决Drupal安装模块返回发生一个AJAX HTTP错误。
  6. 学生用计算机电池能用多久,笔记本电脑的电池又坏了?这些方法能够延长它的使用寿命...
  7. 无线充电鼠标垫 B.FRIENDit壁虎忍者MP20办公游戏鼠标垫 RGB发光电竞防滑加厚鼠标垫黑色
  8. vb mysql加载控件_VB如何连接ACCESS数据库详解
  9. “德宏古茶”平台 开创互联网+茶叶新模式
  10. 秋招记录总结---加油,陌生人