千家信息网

MySQL中Router高可用的原理是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今天就跟大家聊聊有关MySQL中Router高可用的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Mysql route介绍什么是m
千家信息网最后更新 2026年11月01日MySQL中Router高可用的原理是什么

今天就跟大家聊聊有关MySQL中Router高可用的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Mysql route介绍

什么是mysql route

MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。

(1)Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。

(2)从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。

(3)主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。

读写分离原理

MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。

Mysql router用途

MySQL Router的主要用途是读写分离,主主故障自动切换,负载均衡,连接池等。

Mysql router主主故障自动切换的坑

Mysql router主主故障切换功能经过测试没有问题,但是有一个比较大的坑需要注意,具体是什么坑和解决方法在文章末尾,因为你之前要是没用接触过mysql router估计以我的表达能力,说了你就晕了。

mysql router实验架构介绍

实验环境架构图如下:

安装部署mysql route

(1)下载地址:提供不同平台,二进制包和rpm包,选择合适安装方式即可,我这里使用二进制包安装

(2)解压安装

[root@c7-node1 ~]# tar xf mysql-router-2.0.3-linux-glibc2.12-x86-64bit.tar.gz -C /usr/local/  [root@c7-node1 ~]# cd /usr/local/  [root@c7-node1 local]# ln -s mysql-router-2.0.3-linux-glibc2.12-x86-64bit/ mysql-router  [root@c7-node1 local]# cd mysql-router  [root@c7-node1 mysql-router]# ll  total 0  drwxr-xr-x 2 7161 wheel 24 Feb 23  2016 bin  drwxr-xr-x 4 7161 wheel 36 Feb 23  2016 include  drwxr-xr-x 3 7161 wheel 150 Feb 23  2016 lib  drwxrwxr-x 2 7161 wheel 6 Feb 23  2016 run  drwxr-xr-x 3 7161 wheel 16 Feb 23  2016 share

(3) 配置

1、创建配置文件目录,复制模版配置文件

[root@c7-node1 mysql-router]# mkdir /etc/mysql-route/  [root@c7-node1 mysql-router]# cp share/doc/mysqlrouter/sample_mysqlrouter.ini /etc/mysql-route/mysqlrouter.conf

2、配置文件设置,日志目录需要自己手动创建

[root@node1 ~]# cat /etc/mysql-route/mysqlrouter.conf  [DEFAULT]  # 日志存放目录  logging_folder = /data/log/mysql-route  # 插件存放目录  plugin_folder = /usr/local/mysql-router/lib/mysqlrouter  # 配置文件存放目录  config_folder = /etc/mysql-route  # 运行目录  runtime_folder = /var/run  [logger]  # 日志运行级别  level = INFO  # 主节点故障转移配置  [routing:basic_failover]  # 写节点地址  bind_address=192.168.100.10  # 写节点端口  bind_port = 7001  # 模式,读写  mode = read-write  # 主节点地址:默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库  destinations = 192.168.100.11:3306,192.168.100.12:3306  # 从节点负载均衡配置  [routing:balancing]  # 绑定的IP地址  bind_address=192.168.100.10  # 监听的端口  bind_port = 7002  # 连接超时时间  connect_timeout = 3  # 最大连接数  max_connections = 1024  # 后端服务器地址  destinations = 192.168.100.12:3306,192.168.100.13:3306  # 模式:读还是写  mode = read-only  [keepalive]  interval = 60

日志目录创建及授权

[root@c7-node1 ~]# mkdir /data/log/mysql-route/  [root@c7-node1 ~]# chown mysql:mysql /data/log/mysql-route/

(4) 启动:mysql route官方没有提供启动脚本,需要自己编写

[root@c7-node1 ~]# cat /usr/lib/systemd/system/mysqlrouter.service  [Unit]  Description=MySQL Router  After=syslog.target  After=network.target  [Service]  Type=simple  User=mysql  Group=mysql  ExecStart=/usr/local/mysql-router/bin/mysqlrouter -c /etc/mysql-route/mysqlrouter.conf  PrivateTmp=true  [Install]  WantedBy=multi-user.target

5、启动服务

[root@c7-node1 ~]# systemctl enable mysqlrouter  [root@c7-node1 ~]# systemctl start mysqlrouter

读写分离测试

1、创建测试帐号,测试库

MariaDB [(none)]> create database mysql_route;  MariaDB [(none)]> GRANT all ON mysql_route.* TO 'route'@'%' IDENTIFIED BY 'route';  MariaDB [(none)]> FLUSH PRIVILEGES;

2、验证读负载均衡:从结果看到每次读都是访问不同的主机

3、验证写:可以看到每次写都是写到主节点

从库down机测试

下面是从库down机测试截图,可以看到两个节点都正常的情况下,是轮训从两个从库取数据,如果其中一个从库故障,那么mysql router会自动下线故障的从库,如果从库恢复,mysql router会自动把从库上线。

主主故障切换测试

验证:正常情况下数据写入都是写到主库

我们手动停止主库的mysql服务,模拟故障,再次写入,可以看到写入数据的节点是主库的备份节点。

注意:

1、备份从库不能打开read-only = on,不然切换之后写入会报错

2、第一台主库DOWN后,MySQL Router如何处理?

默认情况下第一台主数据库为写主库,当第一台主数据库DOWN机后,第二台数据库被提升为主库,稍后如果第一台主库被修复后,那么默认仍然连接第二台为主库进行读写,不会自动切回到第一台主库。

3、如果第一台主数据库被修复后,又希望切换回第一台主库,怎么办?

可以重启MySQL Router

主主故障切换的坑

Mysql router的主主故障切换如果是运行在一主一从的情况下,从库作为主库的备份,这种情况是使用mysql router主主故障切换是没有问题的,但是在一主多从的情况下使用主主故障切换就会处在如下问题。

在一主多从的情况,如果主库down机,切换到备份节点,其他从库的主库地址连接还是故障的主库,这样就会造成一个从库slave_io线程connecting状态,造成复制延迟。我之前的主库地址是192.168.10.11,备份主库地址是192.168.10.12,但是主库故障之后,mysql route可以把写请求路由到新的主库,但是从库尝试连接的主库还是192.168.10.11,这种情况是正常的,因为mysql router主主故障切换原理就是这样,但是生产环境就不能这么玩了。

解决办法:

1、在切换时需要自己编写脚本触发一个shell脚本或者event来处理重连的问题。

2、不使用mysql router主主故障转移功能,而是自己使用其他方式保证mysql主库高可用。

看完上述内容,你们对MySQL中Router高可用的原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

故障 数据 切换 数据库 节点 情况 配置 地址 程序 目录 测试 应用 备份 端口 服务 查询 原理 应用程序 文件 日志 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技赋能下的互联网金融 互联网科技公司的优势 互联网科技开发公司 互联网科技金融 上海互联网科技有限公司 奇酷互联网科技公司 苏州互联网科技贷款公司 掌上梦互联网科技 哈尔滨新华互联网科技 云创客互联网科技公司 厦门千工互联网科技有限公司 中国航天科技大学国际工业互联网 浙南科技城互联网大厦建设工程 互联网公司黑科技创始人 科技互联网海报 杭州披云加互联网科技有限公司 互联网科技收购价值 互联网时代高科技布局 第三届互联网大会安防黑科技 青岛易易互联网科技 深圳市人人互联网科技有限公司 华宇互联网科技 互联网科技生活的内容 互联网科技革命什么开始 中科明德北京互联网科技 电子商务与互联网科技的关系 互联网科技实习生岗位 图游互联网科技 西安左小互联网科技有限公司 绵阳真晨互联网科技有限公司
0