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 设置。

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

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

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

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

相关文章

【学习笔记】机器学习(Machine Learning) | 第六周|过拟合问题

机器学习&#xff08;Machine Learning&#xff09; 简要声明 基于吴恩达教授(Andrew Ng)课程视频 BiliBili课程资源 文章目录 机器学习&#xff08;Machine Learning&#xff09;简要声明 摘要过拟合与欠拟合问题一、回归问题中的过拟合1. 欠拟合&#xff08;Underfit&#x…

当算力遇上堵车:AI如何让城市血管不再“血栓”?

目录 一、算力治堵的“外科手术” 二、算力治堵的“内科检查” 三、算力治堵的“中医调理” 治堵如治水,算力是新时代的“大禹” “堵车”是每个大城市的通病,但鲜少有人意识到:交通拥堵的根源并非车辆过多,而在于车速过慢,不是因为堵车才慢,而是因为慢才堵车。中国工…

VM虚拟机安装CentOS7.9

目录 1.下载CentOS7.9 2.VM虚拟机选择自定义&#xff0c;然后一直傻瓜式下一步 3.选择编辑虚拟机设置&#xff0c;然后选择刚刚下载的ISO 4.输入 ip addr 获取ip地址 5.用Xshell连接 1.下载CentOS7.9 链接&#xff1a;https://pan.baidu.com/s/1kW2gGWnbcjNtq4kz46LKVw?p…

文本解析到大模型应用

文本解析到到大模型应用 一、背景 最近接到一个比较恶心的工作&#xff0c;之前有个同事将很多个小的文档整合到了一个大文档中&#xff0c;同时暴露出一个新的问题&#xff0c;大的文档虽然查找问题比较方便但是维护起来较为麻烦&#xff0c;所以需要将大的文档按照标题拆分…

AWS虚拟专用网络全解析:从基础到高级实践

导语 AWS虚拟专用网络是连接企业本地数据中心与AWS云环境的关键桥梁。本文将深入探讨AWS VPN的核心概念、配置方法、最佳实践以及常见问题解决方案,助您构建安全、可靠的混合云网络架构。 一、AWS VPN概述 1. 定义 AWS VPN是一种网络服务,允许用户通过加密隧道将本地网络…

【含文档+PPT+源码】基于微信小程序的校园快递平台

项目介绍 本课程演示的是一款基于微信小程序的校园快递平台&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带…

基于 Rancher 部署 Kubernetes 集群的工程实践指南

一、现状分析 在当今的云计算和容器化领域&#xff0c;Kubernetes&#xff08;K8S&#xff09;已经成为了容器编排和管理的事实标准。根据 Gartner 的数据&#xff0c;超过 70% 的企业在生产环境中使用 K8S 来管理容器化应用。然而&#xff0c;K8S 的安装和管理对于许多企业来…

Windows服务器提权实战:常见方法、场景与防御指南

在渗透测试中&#xff0c;​​权限提升&#xff08;提权&#xff09;​​是从低权限账户&#xff08;如IIS、Apache运行账户&#xff09;获取系统管理员&#xff08;如SYSTEM&#xff09;权限的关键步骤。本文将从实战角度解析Windows服务器提权的常见技术&#xff0c;并结合真…

C# | 基于C#实现的BDS NMEA-0183数据解析上位机

以下是一个基于C#实现的BDS NMEA-0183数据解析上位机的示例代码,包含基础功能和界面: using System; using System.Collections.Generic; using System.IO.Ports; using System.Windows.Forms; using System.Drawing; using System.Globalization;namespace BDS_NMEA_Viewer…

图像增强技术:从基础原理到企业级开发实战

简介 图像增强技术是提升图像质量、改善视觉效果和提高后续处理效果的核心方法。本文将全面解析图像增强的五大核心技术:灰度级修正、图像平滑、图像锐化、图像伪彩色处理和图像几何校正,并提供基于OpenCV和Elasticmagic的完整企业级开发实战代码。通过系统化的知识整理和可…

解决中文乱码:字符编码全攻略 - ASCII、Unicode、UTF-8、GB2312详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

体系学习1:C语言与指针1——预定义、进制打印、传参为数组

1、不对一段代码进行编译 #if 0 statement #endif2、输出地址 int d[3]{1,2,3}; printf("%p",(void*)d);//p期待的是void*类型的数据3、不同进制的打印 int data 1200; char hed[9];//为\0预留位置&#xff01;&#xff01;&#xff01; sprintf(hed,"%08X&…

Java 基础--数组(Array):存储数据的“排排坐”

作者&#xff1a;IvanCodes 发布时间&#xff1a;2025年5月1日&#x1f913; 专栏&#xff1a;Java教程 大家好&#xff01;&#x1f44b; 咱们在编程时&#xff0c;经常需要处理一批相同类型的数据&#xff0c;比如班级里所有同学的成绩 &#x1f4af;、一周每天的最高气温 …

CSS常用属性_(进阶)

目录 1.尺寸单位与颜色 &#xff08;1&#xff09;尺寸 &#xff08;2&#xff09;颜色 常用2种 &#xff08;3&#xff09;颜色属性值&#xff08;透明度&#xff09; 例如&#xff1a; 2.字体属性font 例如&#xff1a; **顺序 3.文本属性 ​编辑例如&#xff1a; …

【RabbitMQ】保证消息不丢失

要确保 RabbitMQ 在消费者&#xff08;Python 服务&#xff09;重启或挂掉时消息不丢失&#xff0c;需结合 消息持久化、确认机制&#xff08;ACK&#xff09; 和 死信队列&#xff08;DLX&#xff09; 实现高可靠性&#xff1a; 1. 消息持久化&#xff08;Durability&#xff…

Python基本语法(控制语句)

#控制语句 Python语言的控制语句和其他编程语言类似&#xff0c;常用的有if…else、while、for语句。 案例2一7控制语句 第1组代码&#xff0c;说明if-else语句&#xff1a; #1 print(\n1,if) x,y,z10,20,5 if x>y:print(x>y) else:print(x<y)输出结果: 1,if x<…

并发设计模式实战系列(10):Balking(犹豫模式)

&#x1f31f; 大家好&#xff0c;我是摘星&#xff01; &#x1f31f; 今天为大家带来的是并发设计模式实战系列&#xff0c;第10章Balking&#xff08;犹豫模式&#xff09;&#xff0c;废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 状态守护机制 2. 与状态模式的…

【强化学习系列】贝尔曼方程

首先回顾状态价值函数和动作价值函数的定义&#xff1a; 状态价值函数 v π ( s ) v_\pi(s) vπ​(s)是从状态 s s s出发&#xff0c;直至一幕结束后获得的回报的期望值 动作价值函数 q π ( s , a ) q_\pi(s,a) qπ​(s,a)是从状态 s s s出发&#xff0c;采取动作 a a a后&…

donet使用指定版本sdk

ps:来自微软官方方案,实测可行,就是在项目任意目录下在新建 global.json,并配置sdk版本 SDK 使用最新安装的版本 SDK 命令包括 dotnet new 和 dotnet run。 .NET CLI 必须为每个 dotnet 命令选择一个 SDK 版本。 即使在以下情况下&#xff0c;它也会默认使用计算机上安装的最新…

x-cmd install | Orbiton:极简至上的终端文本编辑器与轻量级 IDE

目录 核心特点安装适用场景优势 厌倦了臃肿复杂的 IDE&#xff1f;渴望一个轻巧、快速、专注的编码环境&#xff1f;Orbiton&#xff0c;一款极简主义的终端文本编辑器与轻量级 IDE&#xff0c;将带给你前所未有的编码体验。 核心特点 极简主义&#xff0c;专注编码&#xff1…