当前位置: 首页 > news >正文

Mysql数据库高可用解决方案-Mysql Router

目录

一.MySQL Router介绍

1. 什么是 MySQL Router?

2. MySQL Router 的主要用途

3. MySQL Router 的工作原理

4. MySQL Router 的核心组件

5. MySQL Router 的部署和配置

6. MySQL Router 的优势

7. 注意事项

8. MySQL Router 与其他工具的对比

9. 总结

二.Mysql Router配置

1. MySQL Router 配置文件概述

2. 配置文件的常用部分和参数

2.1 [DEFAULT] 部分

2.2 [logger] 部分

2.3 [metadata_cache] 部分

2.4 [routing] 部分

3. 配置示例

4. 使用引导(Bootstrap)生成配置

5. 配置时的注意事项

6. 验证配置

7. 高级配置示例

8. 总结


一.MySQL Router介绍

MySQL Router 是一个轻量级中间件,用于在应用程序和后端 MySQL 服务器之间提供透明的连接路由。它是 MySQL 高可用性(HA)解决方案的重要组成部分,特别是在 MySQL InnoDB Cluster 和 Group Replication 环境中。以下是对 MySQL Router 的详细介绍,包括其功能、用途、架构和工作原理。

1. 什么是 MySQL Router?

MySQL Router 是 MySQL 官方提供的一个工具,旨在简化应用程序与 MySQL 数据库集群之间的连接管理。它通过智能路由数据库流量到合适的后端 MySQL 服务器,支持高可用性、可扩展性和负载均衡等功能。MySQL Router 不直接处理数据包内容,而是基于连接进行路由,因此性能开销低,适合高吞吐量场景。

核心特性:

  1. 透明路由:应用程序连接到 MySQL Router 就像连接到单个 MySQL 实例,无需修改应用程序逻辑。
  2. 高可用性:自动处理主节点故障并将连接重定向到可用节点。
  3. 负载均衡:支持多种路由策略(如轮询、首选可用),分发连接到不同服务器。
  4. 插件化架构:允许开发者通过插件扩展功能,满足自定义需求。
  5. 与 InnoDB Cluster 集成:作为 InnoDB Cluster 的核心组件,自动从集群元数据获取拓扑信息。

版本支持:

  1. MySQL Router 8.0 支持 MySQL Server 5.7 和 8.0。
  2. MySQL Router 8.4 支持 MySQL Server 8.0 和 8.4,但不支持更高版本(如 9.0)。

2. MySQL Router 的主要用途

MySQL Router 广泛应用于以下场景:

高可用性(HA):

  1. 在主从复制或 InnoDB Cluster 中,MySQL Router 自动将连接路由到当前主节点(Primary)。
  2. 当主节点故障时,Router 检测集群拓扑变化并将连接重定向到新的主节点,无需应用程序干预。

负载均衡:

  1. 对于读操作,Router 可以将连接分发到从节点(Secondary),减轻主节点压力。
  2. 支持轮询(Round-Robin)或首选可用(First-Available)等策略。

简化应用程序开发:

  1. 应用程序无需实现复杂的故障转移逻辑,只需连接到 Router 的端口,Router 负责路由和故障处理。
  2. 对应用程序透明,连接方式与直接连接 MySQL 服务器一致。

集群管理:

  1. 在 InnoDB Cluster 中,Router 通过元数据缓存插件(Metadata Cache Plugin)与集群通信,动态获取主从拓扑信息。

自定义扩展:

插件化架构允许开发者添加自定义路由逻辑或功能,例如特定的负载均衡策略。

示例场景:

应用程序连接到 Router 的端口(如 6446),Router 将写请求路由到主节点,读请求分发到从节点。

如果主节点故障,Router 自动将后续连接路由到新的主节点,应用程序只需重试连接。

3. MySQL Router 的工作原理

MySQL Router 作为应用程序和 MySQL 服务器之间的代理,负责管理连接路由。其工作流程如下:

客户端连接:

  1. 应用程序(MySQL 客户端或连接器)连接到 MySQL Router 监听的端口(如 6446 或 6447)。
  2. Router 提供多个端口,通常分为读写(Read/Write)和只读(Read-Only)端口。

路由决策:

  1. Router 根据配置的路由策略(如轮询、首选可用)和集群元数据,选择合适的后端 MySQL 服务器。
  2. 对于 InnoDB Cluster,Router 通过元数据缓存插件动态获取主从拓扑。

连接转发:

  1. Router 将客户端的 MySQL 数据包直接转发到目标服务器,不解析或修改数据包内容(连接路由方式),确保高性能。
  2. 如果目标服务器不可用,Router 返回连接错误,应用程序需重试连接,Router 会选择其他可用服务器。

故障处理:

  1. 如果连接的 MySQL 服务器故障,Router 断开客户端连接,客户端重试后 Router 选择新的可用服务器。
  2. 在 InnoDB Cluster 中,Router 定期刷新元数据,检测主从角色变化。

示例配置(简化):

[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-write[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = metadata-cache://mycluster/default?role=SECONDARYmode = read-only
  1. 6446 端口处理写请求,路由到主节点。
  2. 6447 端口处理读请求,路由到从节点(轮询分发)。

4. MySQL Router 的核心组件

MySQL Router 的功能通过插件实现,主要包括以下核心插件:

Connection Routing Plugin:

连接路由插件 :

  1. 负责基于连接的路由,直接转发 MySQL 数据包,提供最大吞吐量。
  2. 支持多种路由策略:

Round-Robin:轮询分发连接,适合读负载均衡。

First-Available:优先连接列表中的第一个可用服务器,适合主节点路由。

Next-Available:故障时切换到下一个可用服务器。

Round-Robin-with-Fallback:结合轮询和故障转移。

Metadata Cache Plugin:

与 InnoDB Cluster 或 Group Replication 集成,定期从集群元数据服务器获取主从拓扑信息。

确保 Router 始终路由到正确的节点(主节点或从节点)。

Keepalive Plugin:

防止 Router 在无服务配置时立即退出,适用于某些部署场景。

Logger Plugin:

记录 Router 的运行日志,用于调试和监控。

插件化架构:

开发者可以通过编写自定义插件扩展 Router 功能,例如实现特定的路由逻辑或监控功能。

5. MySQL Router 的部署和配置

MySQL Router 通常部署在应用程序所在的同一主机上,以减少网络延迟并支持本地 Unix 域套接字连接。以下是部署和配置的典型步骤:

安装 MySQL Router:

从 MySQL 官方网站下载(如 MySQL Router 8.4 或 8.0):https://dev.mysql.com/downloads/router/

支持多种平台(Linux、Windows、macOS 等)。

示例(Linux):

tar -xvf mysql-router-8.4.0-linux-glibc2.17-x86_64.tar.gz

配置 MySQL Router:

创建配置文件(通常为 mysqlrouter.conf),指定路由策略、端口和目标服务器。

示例(InnoDB Cluster):

[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter[logger]level = INFO[metadata_cache:mycluster]router_address = 127.0.0.1bootstrap_server_addresses = mysql://127.0.0.1:3310user = router_userpassword = router_pass[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-write[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = metadata-cache://mycluster/default?role=SECONDARYmode = read-only

引导(Bootstrap):

使用 --bootstrap 选项自动配置 Router,从 InnoDB Cluster 获取元数据:

mysqlrouter --bootstrap 127.0.0.1:3310 --directory /opt/myrouter --user snoopy

这会生成配置文件、启动/停止脚本和日志目录。

启动 MySQL Router:

使用配置文件启动:

mysqlrouter --config /path/to/mysqlrouter.conf

或使用引导生成的启动脚本:

/opt/myrouter/start.sh

设置为开机启动:

配置系统服务(如 systemd)以自动启动 Router,类似于 MySQL 服务器的设置。

推荐部署方式:

将 Router 部署在应用程序主机上,绑定到 localhost(bind_address=127.0.0.1)。

使用不同的端口(如 6446 用于读写,6447 用于只读)以区分流量类型。

6. MySQL Router 的优势

  1. 高性能:基于连接路由,不解析数据包,延迟低,吞吐量高。
  2. 透明性:应用程序无需修改代码,只需连接到 Router 的端口。
  3. 自动故障转移:与 InnoDB Cluster 集成,动态适应主从角色变化。
  4. 灵活性:支持多种路由策略和插件扩展,适应不同场景。
  5. 易于管理:通过引导功能自动配置,减少手动配置工作。

7. 注意事项

应用程序重试逻辑:

Router 不解析数据包,服务器故障时会返回连接错误,应用程序需实现重试逻辑。

示例:应用程序检测到连接错误后,重新连接到 Router 的同一端口。

权限要求:

引导时需要具有足够权限的 MySQL 用户(如对 mysql_innodb_cluster_metadata 表的访问权限)。

示例权限:

GRANT SELECT, EXECUTE ON mysql_innodb_cluster_metadata.* TO 'router_user'@'%';GRANT INSERT, UPDATE, DELETE ON mysql_innodb_cluster_metadata.routers TO 'router_user'@'%';

端口冲突:

如果多个 Router 实例运行在同一主机上,需通过 base-port 配置避免端口冲突。

示例:base-port=3307。

性能影响:

Router 的性能开销极低,但建议部署在应用程序主机上以减少网络延迟。

版本兼容性:

确保 Router 版本与 MySQL 服务器版本兼容。例如,MySQL Router 8.4 不支持 MySQL 9.0。

日志和监控:

检查 Router 日志(默认在 logging_folder 指定目录)以排查问题。

示例日志:

2025-04-23 19:00:00 INFO [routing:read_write] started: listening on 0.0.0.0:6446; read-write2025-04-23 19:00:00 INFO [metadata_cache] Connected with metadata server running on 127.0.0.1:3310

8. MySQL Router 与其他工具的对比

特性

MySQL Router
MySQL 路由器

ProxySQL
代理 SQL

HAProxy

用途

MySQL 集群路由、HA、负载均衡

高级查询路由、缓存、负载均衡

通用 TCP/HTTP 负载均衡

数据包解析

不解析,直接转发(连接路由)

解析 SQL 查询

不解析,直接转发

性能

高(低开销)

中(解析开销)

高(通用负载均衡)

与 InnoDB Cluster 集成

原生支持,自动配置

需要手动配置

需要手动配置

复杂性

简单,专注于 MySQL HA

功能丰富,配置复杂

通用性强,配置中等

典型场景

InnoDB Cluster、Group Replication
InnoDB 集群、组复制

复杂查询路由、读写分离

通用负载均衡

选择建议:

  1. 如果使用 InnoDB Cluster 或 Group Replication,优先选择 MySQL Router,因其原生集成和简单配置。
  2. 如果需要 SQL 级别路由或查询缓存,考虑 ProxySQL。
  3. 如果需要通用负载均衡,HAProxy 是一个灵活的选择。

9. 总结

MySQL Router 是一个轻量、高效的中间件,专为 MySQL 高可用性和负载均衡设计。它通过透明路由和自动故障转移简化了应用程序与 MySQL 集群的交互,特别适合 InnoDB Cluster 和 Group Replication 环境。其插件化架构和低性能开销使其成为构建可扩展数据库架构的理想选择。

快速入门建议:

下载并安装 MySQL Router(推荐 8.4 版本)。

使用 --bootstrap 选项自动配置与 InnoDB Cluster 的连接。

配置读写和只读端口,启动 Router 并测试连接。

确保应用程序支持连接重试以处理故障转移。

信息来源于15个网页:

1、https://www.mysql.com/products/enterprise/router.html

2、https://dev.mysql.com/doc/mysql-router/8.0/en/

3、https://dev.mysql.com/doc/mysql-router/8.4/en/mysql-router-innodb-cluster.html

4、

https://medium.com/%40umairhassan27/mysql-router-with-mysql-ndb-cluster-a-quick-guide-ed81e1410ece

5、https://dev.mysql.com/blog-archive/setting-up-mysql-router/

6、GitHub - mysql/mysql-router: MySQL Router is lightweight middleware that provides transparent routing between your application and any backend MySQL Servers.

7、

https://www.quora.com/What-is-the-purpose-behind-bootstrapping-a-MySQL-router-for-use-with-an-InnoDB-cluster

8、

https://blogs.oracle.com/cloud-infrastructure/post/simple-guide-deploying-mysql-router-mysql-database-service-oci

9、

https://hub.docker.com/r/mysql/mysql-router

10、

https://dev.mysql.com/doc/mysql-router/8.4/en/

11、

MySQL Router 8.0

12、

https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-general-using-developing.html

13、

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

14、

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

15、

https://dev.mysql.com/doc/mysql-shell-gui/en/mysql-shell-vscode-consoles-mysql-router.html

二.Mysql Router配置

MySQL Router 的配置是其核心功能实现的关键,通过配置文件(通常为 mysqlrouter.conf)定义路由策略、端口、目标服务器以及与 MySQL 集群的交互方式。本文将详细讲解 MySQL Router 的配置,包括配置文件结构、常用参数、配置示例以及配置时的注意事项,特别针对与 MySQL InnoDB Cluster 或 Group Replication 的集成。

1. MySQL Router 配置文件概述

MySQL Router 的配置文件采用 INI 格式,分为多个部分(Section),每个部分定义特定的功能模块或路由策略。配置文件通常位于安装目录或通过 --bootstrap 自动生成。

配置文件路径:

默认路径:<安装目录>/mysqlrouter.conf 或通过 --config 指定。

引导(Bootstrap)模式生成路径:<引导目录>/mysqlrouter.conf。

基本结构:

[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter[logger]level = INFO[metadata_cache:cluster_name]...[routing:strategy_name]...

主要部分:

  1. [DEFAULT]:全局设置,例如日志和运行时目录。
  2. [logger]:日志级别和输出设置。
  3. [metadata_cache]:与 InnoDB Cluster 的元数据交互,用于动态获取集群拓扑。
  4. [routing]:定义具体的路由策略,例如读写分离或负载均衡。

2. 配置文件的常用部分和参数

以下是 MySQL Router 配置中最常用的部分及其关键参数,附带说明:

2.1 [DEFAULT] 部分

定义全局设置,适用于所有模块。

logging_folder:日志文件存储目录。

示例:logging_folder = /var/log/mysqlrouter

默认:空(日志输出到控制台)。

runtime_folder:运行时文件(如 PID 文件或套接字文件)存储目录。

示例:runtime_folder = /var/run/mysqlrouter

默认:当前工作目录。

plugin_folder:插件所在目录(通常无需手动设置)。

示例:plugin_folder = /usr/lib/mysqlrouter

config_folder:配置文件目录(通常无需设置)。

示例:config_folder = /etc/mysqlrouter

示例:

[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter

2.2 [logger] 部分

控制日志输出级别和行为。

level:日志级别。

可选值:DEBUG、INFO(默认)、WARNING、ERROR、FATAL。

示例:level = INFO

filename(可选):日志文件名,覆盖 [DEFAULT] 中的 logging_folder。

示例:filename = mysqlrouter.log

说明:

DEBUG 提供最详细的日志,适合排查问题。

INFO 是生产环境的推荐级别,记录关键操作。

2.3 [metadata_cache] 部分

用于与 InnoDB Cluster 或 Group Replication 集成,动态获取集群主从拓扑信息。

group_replication_id(可选):指定 Group Replication 的组 ID。

示例:group_replication_id = aaabbbccc-dddd-eeee-ffff-gggghhhhiiii

bootstrap_server_addresses:集群元数据服务器的地址列表(MySQL 实例)。

格式:mysql://host:port[,host:port,...]

示例:bootstrap_server_addresses = mysql://127.0.0.1:3310,mysql://127.0.0.1:3320

user:访问元数据的 MySQL 用户名。

示例:user = router_user

password:元数据用户的密码(建议加密存储)。

示例:password = router_pass

ttl:元数据缓存的生存时间(秒),控制拓扑刷新的频率。

示例:ttl = 0.5(每 0.5 秒刷新)。

默认:0.5 秒。

metadata_cluster:集群名称。

示例:metadata_cluster = mycluster

示例: metadata_cluster = mycluster

connect_timeout:连接元数据服务器的超时时间(秒)。

示例:connect_timeout = 30

read_timeout:读取元数据的超时时间(秒)。

示例:read_timeout = 30

示例:

[metadata_cache:mycluster]bootstrap_server_addresses = mysql://127.0.0.1:3310,mysql://127.0.0.1:3320,mysql://127.0.0.1:3330user = router_userpassword = router_passttl = 0.5metadata_cluster = mycluster

说明:

bootstrap_server_addresses 应包含所有可能的元数据服务器地址(通常是集群中的所有节点)。

user 需要具有访问 mysql_innodb_cluster_metadata 表的权限。

ttl 值越小,拓扑更新越频繁,但会增加元数据查询开销。

2.4 [routing] 部分

定义具体的路由策略,例如读写分离或只读负载均衡。每个 [routing] 部分对应一个路由实例。

bind_address:Router 监听的地址。

示例:bind_address = 0.0.0.0(监听所有接口)。

默认:127.0.0.1。

bind_port:Router 监听的端口。

示例:bind_port = 6446

destinations:目标服务器或元数据缓存的引用。

静态路由:host:port[,host:port,...]

动态路由:metadata-cache://cluster_name/replicaset_name?role=ROLE

示例:destinations = metadata-cache://mycluster/default?role=PRIMARY

角色选项:

  1. PRIMARY:主节点(读写)。
  2. SECONDARY:从节点(只读)。
  3. PRIMARY_AND_SECONDARY:主从节点混合。

mode:路由模式。

read-write:路由到主节点,适合写操作。

read-only:路由到从节点,适合读操作。

示例:mode = read-write

protocol:连接协议。

可选值:classic(默认,MySQL 经典协议)、x(X Protocol)。

示例:protocol = classic

routing_strategy:路由策略。

first-available:选择第一个可用服务器。

next-available:故障时切换到下一个服务器。

round-robin:轮询分发连接。

round-robin-with-fallback:轮询为主,故障时回退。

示例:routing_strategy = round-robin

max_total_connections:Router 接受的最大连接数。

示例:max_total_connections = 512

默认:512。

connect_timeout:连接目标服务器的超时时间(秒)。

示例:connect_timeout = 1

client_ssl_mode:客户端到 Router 的 SSL 模式。

可选值:DISABLED、PREFERRED(默认)、REQUIRED。

示例:client_ssl_mode = PREFERRED

server_ssl_mode:Router 到服务器的 SSL 模式。

示例:server_ssl_mode = PREFERRED

示例:

[routing:read_write]
bind_address = 0.0.0.0
bind_port = 6446
destinations = metadata-cache://mycluster/default?role=PRIMARY
mode = read-write
routing_strategy = first-available
protocol = classic[routing:read_only]
bind_address = 0.0.0.0
bind_port = 6447
destinations = metadata-cache://mycluster/default?role=SECONDARY
mode = read-only
routing_strategy = round-robin
protocol = classic

说明:

read_write 路由用于写操作,连接到主节点(role=PRIMARY)。

read_only 路由用于读操作,轮询分发到从节点(role=SECONDARY)。

端口 6446 和 6447 是常用约定,实际可自定义。

3. 配置示例

以下是一个完整的 MySQL Router 配置文件示例,适用于 InnoDB Cluster,提供读写分离和负载均衡。


[DEFAULT]logging_folder = /var/log/mysqlrouterruntime_folder = /var/run/mysqlrouter[logger]level = INFO[metadata_cache:mycluster]bootstrap_server_addresses = mysql://192.168.1.1:3306,mysql://192.168.1.2:3306,mysql://192.168.1.3:3306user = router_userpassword = router_passttl = 0.5metadata_cluster = myclusterconnect_timeout = 30read_timeout = 30[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-writerouting_strategy = first-availableprotocol = classicmax_total_connections = 512connect_timeout = 1client_ssl_mode = PREFERREDserver_ssl_mode = PREFERRED[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = metadata-cache://mycluster/default?role=SECONDARYmode = read-onlyrouting_strategy = round-robinprotocol = classicmax_total_connections = 512connect_timeout = 1client_ssl_mode = PREFERREDserver_ssl_mode = PREFERRED

配置说明:

  1. Router 监听 6446(读写)和 6447(只读)端口。
  2. 元数据从三个 MySQL 节点(192.168.1.1:3306 等)获取,每 0.5 秒刷新。
  3. 写操作路由到主节点,读操作轮询分发到从节点。
  4. 使用经典协议,支持 SSL 连接。

4. 使用引导(Bootstrap)生成配置

MySQL Router 提供 --bootstrap 选项,自动从 InnoDB Cluster 获取元数据并生成配置文件,简化配置过程。

运行引导命令:

mysqlrouter --bootstrap mysql://router_user@192.168.1.1:3306 --directory /opt/myrouter --user snoopy

mysql://router_user@192.168.1.1:3306:集群中任一节点的地址。

--directory:生成配置文件的目录。

--user:运行 Router 的系统用户。

生成内容:

配置文件:/opt/myrouter/mysqlrouter.conf。

启动脚本:/opt/myrouter/start.sh。

停止脚本:/opt/myrouter/stop.sh。

日志目录:/opt/myrouter/log。

运行时目录:/opt/myrouter/run。

启动 Router:

/opt/myrouter/start.sh

引导的优势:

自动检测集群拓扑,生成正确的 metadata_cache 和 routing 配置。

自动设置默认端口(6446、6447 等)。

减少手动配置错误。

引导时的权限要求:

CREATE USER 'router_user'@'%' IDENTIFIED BY 'router_pass';GRANT SELECT, EXECUTE ON mysql_innodb_cluster_metadata.* TO 'router_user'@'%';GRANT INSERT, UPDATE, DELETE ON mysql_innodb_cluster_metadata.routers TO 'router_user'@'%';GRANT SELECT ON performance_schema.replication_group_members TO 'router_user'@'%';

5. 配置时的注意事项

端口冲突:

确保 bind_port(如 6446、6447)未被占用。

如果多个 Router 实例运行在同一主机,使用 --base-port 指定端口范围:

mysqlrouter --bootstrap ... --base-port 7000

元数据用户权限:

确保 metadata_cache 部分的 user 有足够权限访问 mysql_innodb_cluster_metadata 表。

避免使用 root 用户,建议创建专用用户。

SSL 配置:

如果 MySQL 集群启用了 SSL,设置 client_ssl_mode 和 server_ssl_mode 为 REQUIRED。

提供 SSL 证书路径(如果需要):

client_ssl_cert = /path/to/client-cert.pem

client_ssl_key = /path/to/client-key.pem

性能优化:

调整 ttl 值:较小的 ttl(如 0.1 秒)适合快速故障转移,但增加元数据查询开销;较大的 ttl(如 5 秒)适合稳定集群。

增加 max_total_connections 以支持高并发。

日志监控:

检查日志文件(logging_folder 指定目录)以排查问题。

示例日志:

2025-04-23 19:00:00 INFO [routing:read_write] Started: listening on 0.0.0.0:6446

2025-04-23 19:00:00 INFO [metadata_cache] Connected to metadata server at 192.168.1.1:3306

应用程序重试逻辑:

Router 不处理 SQL 重试,应用程序需在连接失败时重试连接到同一端口。

示例:配置连接池(如 Java 的 HikariCP)设置重试间隔。

版本兼容性:

确保 Router 版本与 MySQL 服务器版本兼容。例如,MySQL Router 8.4 支持 MySQL 8.0 和 8.4,但不支持 9.0。

检查文档:https://dev.mysql.com/doc/mysql-router/8.4/en/

6. 验证配置

配置完成后,验证 Router 是否正常工作:

启动 Router:

mysqlrouter --config /path/to/mysqlrouter.conf

检查日志:

确认 Router 是否成功连接到元数据服务器并监听端口:

cat /var/log/mysqlrouter/mysqlrouter.log

测试连接:

使用 MySQL 客户端连接 Router 的端口:

mysql -u app_user -p -h 127.0.0.1 -P 6446

连接 6446 测试写操作(主节点)。

连接 6447 测试读操作(从节点)。

模拟故障转移:

停止主节点,观察 Router 是否将写连接路由到新的主节点。

示例:关闭主节点的 MySQL 服务:

systemctl stop mysql

7. 高级配置示例

以下是一些高级配置场景的示例:

7.1 静态路由(不使用元数据缓存)

如果不使用 InnoDB Cluster,可以手动指定目标服务器:

[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = 192.168.1.1:3306mode = read-writerouting_strategy = first-available[routing:read_only]bind_address = 0.0.0.0bind_port = 6447destinations = 192.168.1.2:3306,192.168.1.3:3306mode = read-onlyrouting_strategy = round-robin

适用场景:简单的读写分离,不依赖集群元数据。

7.2 使用 Unix 域套接字

在本地部署时,使用 Unix 域套接字减少网络开销:

[routing:read_write]bind_address = /var/run/mysqlrouter/rw.sockdestinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-writerouting_strategy = first-availableprotocol = classic

连接方式:

mysql -u app_user -p --socket=/var/run/mysqlrouter/rw.sock

7.3 高并发配置

为高并发场景增加连接数并优化超时:

[routing:read_write]bind_address = 0.0.0.0bind_port = 6446destinations = metadata-cache://mycluster/default?role=PRIMARYmode = read-writerouting_strategy = first-availablemax_total_connections = 2048connect_timeout = 2client_ssl_mode = REQUIREDserver_ssl_mode = REQUIRED

8. 总结

MySQL Router 的配置通过 INI 格式的配置文件实现,核心包括全局设置([DEFAULT])、日志([logger])、元数据缓存([metadata_cache])和路由策略([routing])。通过 --bootstrap 模式可以简化配置,自动生成与 InnoDB Cluster 集成的设置。配置时需注意端口冲突、权限设置、SSL 配置和应用程序重试逻辑。

推荐配置流程:

使用 --bootstrap 生成初始配置文件。

根据需求调整端口、路由策略和 SSL 设置。

验证日志和连接,确保路由正常。

配置系统服务以实现开机启动。

相关文章:

Mysql数据库高可用解决方案-Mysql Router

目录 一.MySQL Router介绍 1. 什么是 MySQL Router&#xff1f; 2. MySQL Router 的主要用途 3. MySQL Router 的工作原理 4. MySQL Router 的核心组件 5. MySQL Router 的部署和配置 6. MySQL Router 的优势 7. 注意事项 8. MySQL Router 与其他工具的对比 9. 总结 …...

windows系统 压力测试技术

一、CPU压测模拟 工具&#xff1a;CpuStres v2.0 官网&#xff1a;https://learn.microsoft.com/en-us/sysinternals/downloads/cpustres 功能&#xff1a;是一个工具类&#xff0c;用来模拟在一个进程中启动最多64个线程&#xff0c;且可以独立控制任何一个线程的启动/暂停、…...

汽车免拆诊断案例 | 2015款奔驰C200L车发动机起动延迟

故障现象  一辆2015款奔驰C200L车&#xff0c;搭载274发动机&#xff0c;累计行驶里程约为15.6万km。该车发动机起动延迟&#xff0c;且发动机故障灯异常点亮。 故障诊断  用故障检测仪检测&#xff0c;发动机控制单元中存储有故障代码“P001685 进气凸轮轴&#xff08;气缸…...

Python AI图像艺术创作:核心技术与实践指南

Python与AI技术的结合为图像艺术创作开辟了全新维度,通过生成对抗网络(GANs)、扩散模型(如Stable Diffusion)和神经风格迁移等技术,创作者可以轻松生成具有高度创意和艺术性的图像作品。 这些技术不仅突破了传统艺术创作的局限性,还大幅降低了专业创作门槛,使艺术创作…...

比亚迪再获国际双奖 以“技术为王”书写中国汽车出海新篇章

近日&#xff0c;全球汽车行业权威奖项“2025世界汽车大奖”&#xff08;World Car Awards&#xff09;在纽约国际车展举行颁奖典礼&#xff0c;比亚迪海鸥&#xff08;BYD SEAGULL/BYD DOLPHIN MINI&#xff09;摘得“2025世界城市车&#xff08;World Urban Car&#xff09;”…...

虚幻商城 Quixel 免费资产自动化入库(2025年版)

文章目录 一、背景二、问题讲解1. Quixel 免费资产是否还能一键入库?2. 是不是使用了一键入库功能 Quixel 的所有资产就能入库了?3. 一键入库会入库哪些资产?三、实现效果展示四、实现自动化入库五、常见问题1. 出现401报错2. 出现429报错3. 入库过于缓慢4. 入库 0 个资产一…...

斯坦福RGA软件 老版本和兼容Windows 11版本可选

斯坦福RGA软件 老版本和兼容Windows 11版本可选...

RHCSA Linux 系统 文件系统权限

1. 文件的一般权限 &#xff08;1&#xff09;文件权限标识解读 drwxr - xr - x. 12 root root 144 Feb 17 16:51 usr ➤d&#xff1a;文件类型&#xff08;d 表示目录&#xff09; ➤rwx&#xff1a;文件所有者权限&#xff08;读 r&#xff0c;写 w&#xff0c;执行 x&am…...

【补题】Codeforces Global Round 20 D. Cyclic Rotation

题意&#xff1a;偷懒 思路&#xff1a; D. Cyclic Rotation - Yaqu - 博客园 1.有个观察&#xff0c;如果操作过的序列&#xff0c;一定是连续相同的数字&#xff0c;当然这不代表一定操作过了&#xff0c;由于操作过1次后连续就没有意义&#xff0c;可以假设全都操作…...

2025年“深圳杯”数学建模挑战赛C题-分布式能源接入配电网的风险分析

布式能源接入配电网的风险分析 小驴数模 背景知识&#xff1a; 随着我国双碳目标的推进&#xff0c;可再生分布式能源在配电网中的大规模应用不可避免&#xff0c;这对传统配电网运行提出挑战。为了量化分析配电网中接入分布式能源的风险&#xff0c;需要对其进行建模与分析…...

微调 LLaMA 2:定制大型语言模型的分步指南

微调 LLaMA 2&#xff1a;定制大型语言模型的分步指南 深入了解如何运用新技术在 Google Colab 平台上对 Llama-2 进行微调操作&#xff0c;从而有效克服内存与计算方面的限制&#xff0c;让开源大型语言模型变得更加易于获取和使用。自从 Meta 发布了 LLaMA 的首个版本后&…...

react-11使用vscode开发react相关扩展插件(相关的快捷生成)

1.快速搭建react组件模板 2.相关搭建命令 2.1 导入导出 前缀方法imp→import moduleName from moduleimn→import moduleimd→import { destructuredModule } from moduleime→import * as alias from moduleima→import { originalName as aliasName} from moduleexp→expo…...

人工智能数学基础(六):数理统计

数理统计是人工智能中数据处理和分析的核心工具&#xff0c;它通过收集、分析数据来推断总体特征和规律。本文将系统介绍数理统计的基本概念和方法&#xff0c;并结合 Python 实例&#xff0c;帮助读者更好地理解和应用这些知识。资源绑定附上完整资源供读者参考学习&#xff0…...

组网技术知识点

1.port-isloate enable命令用于实现两个接口之间的二层数据隔离&#xff0c;三层数据互通。 2.交换机最多支持4096个VLAN&#xff0c;编号为1-4094 3.display bfd session all&#xff1a;查看BFD会话状态是否UP 4.RJ45通过双绞线连接以太网&#xff1b; AUI端口&#xff1…...

常用电机类型及其特点对比

1. 直流电机 直流电机里边固定有环状永磁体&#xff0c;电流通过转子上的线圈产生安培力&#xff0c;当转子上的线圈与磁场平行时&#xff0c;再继续转受到的磁场方向将改变&#xff0c;因此此时转子末端的电刷跟转换片交替接触&#xff0c;从而线圈上的电流方向也改变&#x…...

SVTAV1源码-set_all_ref_frame_type

set_all_ref_frame_type函数的主要作用是为当前图像设置所有可能用到的参考帧类型&#xff0c;并将这些参考帧类型存储到一个数组中&#xff0c;同时记录总共有多少个参考帧类型&#xff0c;以下是该函数的各部分解释&#xff1a; 初始化和准备 MvReferenceFrame rf[2]; *tot_r…...

Can‘t create thread to handle bootstrap

MySQL在docker里面启动失败 关键性报错Cant create thread to handle bootstrap rootubuntu:/data# docker logs 6835ec900d8c 2025-04-30 23:29:4308:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.42-1.el9 started. 2025-04-30 23:29:4308:00 [Note] […...

用Power shell脚本批量发布rdl文件到SQL Server Reporting Service

本文用于介绍如何用Power shell脚本批量发布rdl文件到SQL Server Reporting Service. 用户可根据自己的需要创建类似Publish_All_SSRS.ps1的脚本。 目录 1. 目录结构 2. 创建Base_PublishSSRS.ps1 3. 创建Publish_All_SSRS.ps1 4.注意事项 1. 目录结构 目录结构&#xff…...

2025-03 机器人等级考试四级理论真题 4级

1 2025年蛇年春晚&#xff0c;节目《秧BOT》机器人舞蹈表演节目点燃了全国观众的热情&#xff0c;请问参加节目表演的机器人是由哪家公司研发&#xff1f;&#xff08; &#xff09; A.大疆 B.华为 C.优必选 D.宇树科技 【参考答…...

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档)

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档) SpringDoc OpenAPI 是一个基于 OpenAPI 3.0/3.1 规范的工具&#xff0c;用于为 Spring Boot 应用生成 API 文档。它是 springfox&#xff08;Swagger 2.x&#xff09;的现代替代方案&#xff0c;完全支持 Spring Boot 3.x…...

Java 实用时间工具类:DateUtils 与 DurationFormatUtils

前言 在 Java 项目中&#xff0c;处理日期时间相关的操作极为常见。Apache Commons Lang 提供了两个非常实用的时间工具类&#xff1a;DateUtils 和 DurationFormatUtils&#xff0c;它们分别负责简化日期处理和格式化时间间隔&#xff0c;帮助开发者更高效地进行时间操作。 一…...

Unity3D仿星露谷物语开发40之割草动画

1、目标 当Player选择Scythe后&#xff0c;鼠标悬浮在草上&#xff0c;会显示绿色光标。鼠标左击&#xff0c;会触发割草的动画。 2、优化Settings.cs脚本 添加以下两行代码&#xff1a; // Reaping&#xff08;收割&#xff09; public const int maxCollidersToTestPerRe…...

量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解

量化交易之数学与统计学基础2.4——线性代数与矩阵运算 | 矩阵分解 第二部分&#xff1a;线性代数与矩阵运算 第4节&#xff1a;矩阵分解&#xff1a;奇异值分解&#xff08;SVD&#xff09;在数据压缩和风险分解的应用 一、奇异值分解&#xff08;SVD&#xff09;基础&#xf…...

ES使用之查询方式

文章目录 ES中的数据查询返回字段含义track_total_hits 精准匹配(term)单值匹配多值匹配 全文检索(match)range查询高级查询布尔查询 ES中的数据查询 返回字段含义 track_total_hits track_total_hits是 Elasticsearch 中用于 ‌控制匹配文档总数统计行为‌ 的关键参数。就算…...

力扣-数组-41缺失的第一个正数

思路 关键有两点 原地哈希 把1-len的数分别映射到下标为0 - len-1的地方中 交换后&#xff0c;接着查看下标i被交换过来的数&#xff0c;直到他到了该到的位置或者超出范围 使用while&#xff0c;把不满足映射关系的点一直交换&#xff0c;直到下标指向的位置符合要求 代…...

Nginx — http、server、location模块下配置相同策略优先级问题

一、配置优先级简述 在 Nginx 中&#xff0c;http、server、location 模块下配置相同策略时是存在优先级的&#xff0c;一般遵循 “范围越小&#xff0c;优先级越高” 的原则&#xff0c;下面为你详细介绍&#xff1a; 1. 配置继承关系 http 块&#xff1a;作为全局配置块&…...

管家婆易指开单如何设置零售开单

一&#xff0c;零售设置 1&#xff0c;登录管理员账号-基本信息--职员信息-新建职员及其属于哪个门店。 2&#xff0c;系统维护-系统管理-用户配置-系统配置-切换为“触摸屏模式或者普通零售模式” 3&#xff0c;用户及权限设置-给该员工开通零售及开单等相关的权限 4&#xff…...

深入浅出循环神经网络(RNN):原理、应用与实战

1、引言 在深度学习领域&#xff0c;循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种专门用于处理**序列数据**的神经网络架构。与传统的前馈神经网络不同&#xff0c;RNN 具有**记忆能力**&#xff0c;能够捕捉数据中的时间依赖性&#xff0c;广泛应…...

【Java】打印运行环境中某个类引用的jar版本路径

背景 正式环境出现jar版本不匹配问题&#xff0c;不知道正式环境用的哪个jar版本。通过一下可以打印出类调用的jar // 获取 POIFSFileSystem 类的加载器并打印其来源路径 ClassLoader classloaderPOIFS org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoade…...

【效率提升】Vibe Coding时代如何正确使用输入法:自定义短语实现Prompt快捷输入

AI时代的效率神器&#xff1a;用搜狗拼音自定义短语实现Prompt快捷输入 在日益依赖AI工具的今天&#xff0c;我们经常需要输入各种复杂的prompt来指导AI完成特定任务。有些同学完全忽视了这一层工作的意义&#xff0c;实际上不同质量的prompt对模型的表现影响是巨大的。&#…...

C# 类的基本概念(从类的内部访问成员和从类的外部访问成员)

本章内容&#xff1a; 类的概述 程序和类&#xff1a;一个简单的示例 声明类 类成员 创建变量和类的实例 为数据分配内存 实例成员 访问修饰符 从类的内部访问成员 从类的外部访问成员 综合应用 从类的内部访问成员 如前所述&#xff0c;类的成员仅用其他类成员的名称就可以访…...

端到端观测分析:从前端负载均衡到后端服务

前言 我们在做系统运维保障的时候&#xff0c;关注从前端负载均衡到后端服务的流量情况是很有必要的&#xff0c;可以了解每个后端服务实例接收的流量大小&#xff0c;这有助于确定资源分配是否合理&#xff0c;能够帮助找出后端服务中的性能瓶颈。同时&#xff0c;当系统出现…...

Axure疑难杂症:全局变量跨页面赋值、中继器交互(玩转全局变量)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:全局变量高级交互 主要内容:数据跨页面传递、赋值、中继器交互 应用场景:页面间值的传递、赋值 案例展示:…...

css 数字从0开始增加的动画效果

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 在有些时候比如在做C端项目的时候&#xff0c;页面一般需要一些炫酷效果&#xff0c;比如数字会从小值自动加到数据返回的值 css 数字从0开始增加的动画效果 分析&#xff1a; 提示&#xff1a;这里填…...

【MongoDB篇】MongoDB的索引操作!

目录 引言第一节&#xff1a;天生的“索引小能手”——_id 索引 &#x1f194;第二节&#xff1a;自己动手&#xff0c;丰衣足食——创建索引 &#x1f511;&#x1f6e0;️第三节&#xff1a;索引的“类型”——因“材”施“索”&#xff01;&#x1f333;&#x1f511;第四节…...

写劳动节前的 跨系统 文件传输

功能说明&#xff1a; 协议隐身&#xff1a;流量伪装为HTTPS图片传输 动态混淆&#xff1a;每个数据包添加随机填充 军用级擦除&#xff1a;临时文件三次覆写清除 抗分析&#xff1a;随机传输时间间隔和端口跳跃 隐蔽通道&#xff1a;ALTSHIFTC触发隐藏控制台 网络架构建…...

腾讯元宝桌面客户端:基于Tauri的开源技术解析

2025年3月,腾讯元宝宣布上线电脑客户端版本,支持Windows和macOS系统。作为腾讯旗下的AI助手产品,腾讯元宝桌面端采用了Tauri而非传统的Electron作为其跨平台开发框架,这一技术选择体现了腾讯对应用性能、安全性和用户体验的重视。本文将依据腾讯元宝桌面客户端的用户规则中…...

重塑驾乘体验!哈曼Ready系列引爆「人车交互革命」

AI定义汽车趋势下&#xff0c;AI加速赋能整车辅助驾驶、智能座舱、智能底盘等各域。 以智能座舱为例&#xff0c;AI大模型的快速应用与迭代&#xff0c;推动智能座舱加速迈入“多模交互”阶段&#xff0c;融合视觉、听觉、触觉等感知技术&#xff0c;智能座舱向着终极形态演进…...

第二章-科学计算库NumPy

第二章-科学计算库NumPy Numpy 作为高性能科学计算和数据分析的基础包,是其他重要数据分析工具的基础, 掌握 NumPy 的功能及其用法, 将有助于后续其他数据分析工具的学习. 2.1 认识 NumPy 数组对象 NumPy 中最重要的一个特点就是其 N 维数组对象, 即 ndarray(别名 array) 对象…...

3.2goweb框架GORM

GORM 是 Go 语言中功能强大的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;支持 MySQL、PostgreSQL、SQLite、SQL Server 等主流数据库。以下是 GORM 的核心概念和用法详解&#xff1a; ​​一、基础入门​​ 1. 安装 go get -u gorm.io/gorm go get -u gorm.io…...

KUKA机器人不同的用户权限详细介绍

对于KUKA机器人&#xff0c;主菜单里有一个“用户组”的登录&#xff0c;不同的用户组对应不同的权限。 一、KUKA示教器正常开机后显示以下界面&#xff0c;对于8.5及以上的系统&#xff0c;增加了快捷登录用户组的符号 &#xff0c;直接点击即可打开。在 smartHMI 上&…...

AI对IT行业的重塑:挑战与机遇并存的技术革命

一、必要性&#xff1a;AI成为IT行业的基础设施 在云计算、大数据和物联网构成的数字生态中&#xff0c;AI技术已成为IT行业的"水电煤"。以微软Azure为例&#xff0c;其AI云服务支撑着全球超过85%的《财富》500强企业&#xff0c;通过机器学习模型自动优化服务器集群…...

利用IEEE异常机制优化Fortran浮点数计算

利用IEEE异常机制优化Fortran浮点数计算 在Fortran程序中&#xff0c;IEEE浮点异常机制可以帮助你检测和优化浮点数计算&#xff0c;提高数值稳定性和程序健壮性。以下是几种利用IEEE异常机制优化浮点数计算的方法&#xff1a; 1. 启用和检测IEEE异常 现代Fortran&#xff0…...

构建网页版IPFS去中心化网盘

前言&#xff1a;我把它命名为无限网盘 Unlimited network disks&#xff08;ULND&#xff09;&#xff0c;可以实现简单的去中心化存储&#xff0c;其实实现起来并不难&#xff0c;还是依靠强大的IPFS&#xff0c;跟着我一步一步做就可以了。 第一步&#xff1a;准备开发环境…...

【solidity基础】一文说清楚合约函数的大小事

在 Solidity 里,函数是合约的关键构成部分,用于执行特定任务或操作的代码块,可以包含逻辑、访问状态变量、进行计算,并且可以接受参数和返回值。 但是solidity 的函数与其他语言不太一样,经常会有同学搞混,这里开一篇文章完整介绍一下 solidity 函数的用法。 1. 函数定…...

用Python构建自动驾驶传感器融合算法:从理论到实践

用Python构建自动驾驶传感器融合算法:从理论到实践 随着自动驾驶技术的飞速发展,传感器在自动驾驶系统中的作用愈发重要。传感器不仅是车辆感知外部环境的“眼睛”,它们提供的信息也是自动驾驶决策系统的基础。然而,单一传感器的感知能力是有限的。为了提升自动驾驶系统的…...

PLC与工业电脑:有什么区别?

随着工业部门的快速发展&#xff0c;自动化已经从奢侈品转变为绝对必需品。世界各地的工业越来越多地采用工业自动化来提高效率、提高精度并最大限度地减少停机时间。这场自动化革命的核心是两项关键技术&#xff1a;可编程逻辑控制器&#xff08;PLC&#xff09;和电脑&#x…...

机器学习:在虚拟环境中使用 Jupyter Lab

机器学习&#xff1a;在虚拟环境中使用 Jupyter Lab 第一步&#xff1a;激活虚拟环境 打开终端&#xff08;CMD/PowerShell&#xff09;并执行&#xff1a; $cmd #激活虚拟环境 $conda activate D:\conda_envs\mll_env 激活后&#xff0c;终端提示符前会显示环境名称&…...

Arduino项目实战与编程技术详解

一、智能避障小车:超声波传感器与PWM电机控制 1.1 硬件需求与工作原理 智能避障小车的核心在于超声波传感器与电机驱动模块的协同工作。超声波传感器(HC-SR04)通过发射高频声波并接收回波来测量距离,而L298N电机驱动模块则负责控制两个直流电机的转向与速度。 1.1.1 超声…...

AI数字人:人类身份与意识的终极思考(10/10)

文章摘要&#xff1a;AI数字人技术正在引发从"像素复刻"到"意识投射"的范式革命&#xff0c;多模态交互、神经辐射场等技术突破推动数字人从工具属性迈向虚拟主体。其发展伴随身份认同危机、伦理困境&#xff0c;促使人类重新思考自我认知与"人之为人…...