乐趣区

MySQL路由器80

MySQL Router 8.0

文件生成于:2019-09-13(修订:63490)

摘要

MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它可用于各种用例,例如通过有效地将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。可 插拔架构 还使开发人员能够针对自定义用例扩展 MySQL 路由器。有关用 MySQL 路由器如何构建 InnoDB 群集的其他详细信息,请参阅 InnoDB 群集。

强烈建议 MySQL Router 8.0 与 MySQL Server 8.0 或 5.7 版一起使用。

有关详细说明每个版本中的更改的说明,请参阅 MySQL Router 发行说明。

如果您尚未安装 MySQL Router,请从 下载站点下载。

有关使用 MySQL 的帮助,请访问 MySQL 论坛,在那里您可以与其他 MySQL 用户讨论您的问题。

MySQL Router 分商业版本和社区版本,许可信息不太一样。

目录

  1. 一般信息
  2. 安装 MySQL Router
  3. 部署 MySQL Router
  4. 配置
  5. MySQL Router 应用程序
  6. MySQL Router 常见问题解答

第 1 章一般信息

目录

1.1 MySQL InnoDB 集群的路由
1.2 集群元数据和状态
1.3 连接路由
1.4 应用注意事项
1.5 MySQL Router 8.0 的新功能
MySQL 路由器是高可用性(HA)解决方案的构建块。它通过智能地将连接路由到 MySQL 服务器来简化应用程序开发,从而提高性能和可靠性。

MySQL Router 8 完全支持 MySQL 5.7 和 MySQL 8,它取代了 MySQL Router 2.x 系列。如果您当前使用的是 Router 2.0 或 2.1,那么我们建议您将安装升级到 MySQL Router 8。

1.1 MySQL InnoDB 集群的路由

MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由。它用于各种用例,例如通过将数据库流量路由到适当的后端 MySQL 服务器来提供高可用性和可伸缩性。可插拔架构还使开发人员能够针对自定义用例扩展 MySQL 路由器。

有关 Router 如何成为 InnoDB 集群的其他详细信息,请参阅 InnoDB 集群。

介绍

对于客户端应用程序来处理故障转移,他们需要了解 InnoDB 集群拓扑并知道哪个 MySQL 实例是 PRIMARY。虽然应用程序可以实现该逻辑,但 MySQL 路由器可以为您提供和处理此功能。

MySQL 使用组复制在多个服务器之间复制数据库,同时在服务器发生故障时执行自动故障转移。当与 MySQL InnoDB 集群一起使用时,MySQL 路由器充当代理,以隐藏网络上的多个 MySQL 实例,并将数据请求映射到其中一个集群实例。只要有足够的在线副本并且组件之间的通信完好无损,应用程序就能够联系其中一个。MySQL 路由器也可以让应用程序连接到 MySQL 路由器而不是直接连接到 MySQL。

使用 MySQL InnoDB 集群部署路由器
MySQL 路由器的推荐部署模型是 InnoDB 集群,其中 Router 与应用程序位于同一主机上。

配置集群后,使用 InnoDB 集群部署 MySQL 路由器的步骤如下:

安装 MySQL 路由器。

Bootstrap InnoDB 集群,并进行测试。

Bootstrapping 通过使用 –bootstrap 和其他命令行选项自动为现有 InnoDB 集群配置 MySQL 路由器。在引导期间,路由器连接到群集,获取其元数据,并配置自己使用。Bootstrapping 是可选的。

有关其他信息,请参阅 第 3 章,部署 MySQL 路由器。

设置 MySQL 路由器以实现自动启动。

将系统配置为在重新引导主机时自动启动 MySQL 路由器,该过程类似于 MySQL 服务器配置为自动启动的过程。有关其他详细信息,请参见 第 5.1 节“启动 MySQL 路由器”。

例如,在创建 MySQL InnoDB 集群后,您可以使用以下命令配置 MySQL 路由器:

shell> mysqlrouter --bootstrap localhost:3310 --directory /opt/myrouter --user snoopy

此示例将 MySQL 路由器引导至现有的 InnoDB 集群,其中:

localhost:3310 是 InnoDB 集群的成员,PRIMARY 或引导程序将重定向到集群中的 PRIMARY。

由于使用了可选的 –directory 引导选项,因此本示例创建一个包含所有生成的目录和文件的自包含安装 /opt/myrouter/。这些文件包括 start.sh,stop.sh,log/,和一个全功能的 MySQL 路由器配置文件名为 mysqlrouter.conf。

只有主机的系统用户 snoopy 才能访问 /opt/myrouter/*。

有关 –bootstrap 修改引导程序配置过程的方法,请参阅相关选项。例如,传入 –conf-use-sockets 启用 Unix 域套接字连接,因为默认情况下仅启用 TCP / IP 连接。

1.2 集群元数据和状态

MySQL 路由器通过坐在应用程序和 MySQL 服务器之间工作。应用程序通常连接到路由器,就好像它们连接到普通的 MySQL 服务器一样。每当应用程序连接到路由器时,路由器从其知道的候选池中选择合适的 MySQL 服务器,然后连接到它。从那一刻开始,Router 转发应用程序和 MySQL 之间的所有网络流量,包括从它返回的响应。

MySQL 路由器保留在线 MySQL 服务器的缓存列表,或配置的 InnoDB 集群的拓扑和状态。最初,当路由器启动时,列表从路由器的配置文件加载。当使用该 –bootstrap 选项引导路由器时,此列表是使用 InnoDB 群集服务器生成的。

为了更新缓存,元数据缓存组件与包含元数据的 InnoDB 集群服务器之一保持开放连接。它通过从 MySQL 的性能模式查询元数据数据库和实时状态信息来实现。每当修改 InnoDB 集群时都会更改集群元数据,例如使用 MySQL Shell 添加或删除 MySQL 服务器,并且只要检测到集群状态更改,就会通过 MySQL 服务器的 Group Replication 插件实时更新 performance_schema 表。例如,如果其中一个 MySQL 服务器出现意外关闭。

当路由器检测到连接的 MySQL 服务器关闭时,例如因为元数据缓存已丢失其连接而无法再次连接,它会尝试连接到不同的 MySQL 服务器以从新的 MySQL 服务器获取元数据和 InnoDB 集群状态。

关闭的 MySQL 服务器的应用程序连接会自动关闭。然后,他们必须重新连接到 Router,后者将它们重定向到在线 MySQL 服务器。

1.3 连接路由

连接路由意味着将 MySQL 连接重定向到可用的 MySQL 服务器。MySQL 数据包完整路由,无需检查。有关使用基本连接路由的示例部署,请参见 第 3.3 节“基本连接路由”。

应用程序连接到 MySQL 路由器而不是直接连接到 MySQL 服务器,如果连接失败,则应用程序将重试连接,因为 MySQL 路由器在尝试失败后选择新的 MySQL 服务器。这也称为简单重定向连接路由,因为它需要应用程序重试连接。也就是说,如果从 MySQL 路由器到 MySQL 服务器的连接中断,则应用程序遇到连接失败。但是,新的连接尝试会触发路由器查找并连接到另一台 MySQL 服务器。

路由服务器和路由策略在配置文件中定义。例如,以下部分告诉 MySQL 路由器监听 localhost 的端口 7002 上的连接,然后将这些连接重定向到由该 destinations 选项定义的 MySQL 实例,包括在本地主机上运行的服务器侦听端口 3306,3307 和 3308。我们还使用该 routing_strategy 选项来使用循环形式的负载平衡。有关其他信息,请参见 第 4.3 节“配置选项”

[routing:simple_redirect]
bind_port = 7002
routing_strategy = round-robin
destinations = localhost:3306,localhost:3307,localhost:3308

此示例部分标题为 routing:simple_redirect。第一部分 routing 是内部使用的部分名称,用于确定要加载的插件。第二部分 simple_redirect 是可选的部分键,用于区分其他路由策略。

当服务器不再可访问时,MySQL 路由器将移动到列表中的下一个服务器目标,如果列表按照循环策略耗尽,则循环回第一个服务器目标。

注意
在 MySQL Router 8.0 之前,使用了现已弃用的 mode 选项,而不是 routing_strategy MySQL Router 8.0 中添加的选项。

1.4 应用注意事项

MySQL 路由器使用不需要特定的库或接口。除了管理 MySQL 路由器实例之外,编写应用程序就像 MySQL 路由器是典型的 MySQL 实例一样。

使用 MySQL 路由器的唯一区别是如何建立与 MySQL 服务器的连接。必须更新在启动时使用单个 MySQL 连接而不测试连接错误的应用程序。这是因为 MySQL 路由器在尝试连接时重定向连接,并且不读取数据包或执行分析。如果 MySQL 服务器出现故障,Router 会将连接错误返回给应用程序。

出于这些原因,应编写应用程序以测试连接错误,如果遇到,则重试连接。如果在您的应用程序中使用此技术或类似技术,那么使用 MySQL 路由器将不需要任何额外的努力。

以下内容更好地说明了为什么您可能希望使用 MySQL 路由器并从应用程序的角度研究它的使用方式。

方案

MySQL 路由器有几种可能的场景,包括:

作为开发人员,我希望我的应用程序连接到服务,以便默认情况下连接到组复制集群的当前主服务器。

作为管理员,我想设置多个服务,以便 MySQL 路由器在每个高可用副本集的不同端口上进行侦听。

作为管理员,我希望能够在端口 3306 上运行连接路由服务,以使其对用户或应用程序更加透明。

作为管理员,我想为每个连接路由服务配置一个模式,以便指定是返回主服务器还是辅助服务器。

MySQL 路由器的工作流程
使用 MySQL 路由器的工作流程如下:

  • MySQL 客户端或连接器连接到 MySQL 路由器,例如,端口 6446。
  • 路由器检查可用的 MySQL 服务器。

    • 路由器打开与合适的 MySQL 服务器的连接。
    • 路由器在应用程序和 MySQL 服务器之间来回转发数据包
    • 如果连接的 MySQL 服务器出现故障,路由器将断开连接。然后,应用程序可以重试连接到路由器,然后路由器选择一个不同的可用 MySQL 服务器。

使用 MySQL 路由器连接

应用程序连接到 MySQL 路由器,路由器将应用程序连接到可用的 MySQL 服务器。

此示例演示连接是否透明地连接到其中一个 InnoDB 集群实例。因为此示例使用沙盒 InnoDB 集群,其中所有实例都在同一主机上运行,​​所以我们检查 port 状态变量以查看连接了哪个 MySQL 实例。

使用 MySQL 客户端连接 MySQL 路由器,例如:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p

这些端口号取决于您的配置,但在此示例中比较端口:

mysql> select @@port;
+--------+
| @@port |
+--------+
|   3310 |
+--------+
1 row in set (0.00 sec)

总而言之,客户端(应用程序)连接到端口 6446 但连接到端口 3310 上的 MySQL 实例。

建议

以下是使用 MySQL 路由器的建议。

在与应用程序相同的主机上安装并运行 MySQL Router。有关原因的列表,请参阅 第 3 章,部署 MySQL 路由器。

bind_port = 127.0.0.1:<port> 在配置文件中 使用路由器绑定到 localhost。或者,在 Linux 上,禁用 TCP 连接(请参阅参考资料 –conf-skip-tcp)并将其限制为仅使用 Unix 套接字连接(请参阅参考资料 –conf-use-sockets)。

1.5 MySQL Router 8.0 的新功能

本节总结了 MySQL Router 8.0 中添加的许多与 MySQL Router 2.1 相关的新功能。

版本编号

MySQL Router 8.0.3 是第一个使用新编号的 8.0.x 版本,是 MySQL Router 2.1.4 的后续版本。

MySQL 连接器和其他 MySQL 客户端工具和应用程序现在将其版本号的第一个数字与它们支持的(最高)MySQL 服务器版本同步。此更改使您可以轻松直观地确定要将哪个客户端版本用于哪个服务器版本。同样,MySQL 路由器现在使用与 MySQL 服务器相同的版本号。

新功能和变化

routing_strategy 添加了 可选 配置选项。可用的值是 first-available,next-available,round-robin,和 round-robin-with-fallback。

以前,这些策略通过 mode 配置选项描述为调度模式,其中读写模式默认为第一个可用策略,而只读模式默认为循环策略。这保留了这些模式的先前行为。

在 –ssl-key 和 –ssl-cert 可选的引导命令行选项添加。他们直接使用 MySQL 客户端的对应方,并指定客户端证书和私钥以方便客户端身份验证。当在引导期间使用的 root 帐户是使用 REQUIRE X509 创建时,这很有用,这需要客户端在登录时进行身份验证。

添加了 新的 connect_timeout 和 read_timeout 元数据配置文件选项。它们在 [DEFAULT] 命名空间下定义,并影响内部操作,例如元数据服务器连接。

Bootstrap 现在接受 InnoDB 集群的任何成员,并自动查找并重新连接到可写主服务器。以前,只接受了初级。

Bootstrap 现在接受该 –config 选项并读取[logger] level 选项的定义。

最大并发客户端连接数从大约 500 增加到超过 5000,这个限制现在取决于操作系统。为此,基于 select()的 fd 事件调用被 poll()(或 Windows 上的 WSAPoll())取代。

添加了 一个新的 mysqlrouter_plugin_info 实用程序来帮助调试 MySQL 路由器插件。它提供了诸如插件版本,描述,ABI 版本,要求和函数指针之类的信息。

其他变更

有关 MySQL Router 8.0 中引入的所有更改的完整列表,请参阅 MySQL Router 8.0 发行说明

第 2 章安装 MySQL 路由器

目录

2.1 在 Linux 上安装 MySQL 路由器
2.2 在 macOS 上安装 MySQL 路由器
2.3 在 Windows 上安装 MySQL 路由器
2.4 从源代码安装 MySQL 路由器
本章介绍如何获取和安装 MySQL 路由器。可从 下载站点下载。

2.1 在 Linux 上安装 MySQL 路由器

MySQL 路由器的二进制发行版可用于几种 Linux 版本,包括 Fedora,Oracle Linux,Red Hat 和 Ubuntu。

安装选项包括:

官方 MySQL Yum 或 APT 存储库包:这些二进制文件由 MySQL Release 团队构建。有关安装这些的详细信息,请参阅使用 Yum 或 APT 安装它们的快速指南。

下载官方 MySQL 软件包:可从 https://dev.mysql.com/downloa…。使用首选软件包管理器下载并安装。

或者,从 MySQL 路由器 8.0.13 开始,MySQL 路由器包含在 MySQL 服务器的源和单片二进制包中。

下载源代码并自行编译:源代码可在 https://dev.mysql.com/downloa… tar.gzRPM 或 RPM 包的形式获得。或者,源代码也 可以在 GitHub 上获得。

有关编译 MySQL 路由器的信息,请参阅 从源代码安装 MySQL 路由器。

在 Linux 上安装的过程取决于您的 Linux 发行版。

使用官方 DEB 或 RPM 软件包安装 MySQL 路由器会在 MySQL 路由器默认运行的主机上创建一个名为“mysqlrouter”的本地系统用户和组。有关其他信息,请参阅系统 user 的配置选项。

安装 DEB 包
在 Ubuntu 和其他使用 Debian 软件包方案的系统上,您可以下载并安装.deb 软件包或使用 APT 软件包管理器。

使用 APT 包管理器
按照 MySQL APT Repository 文档中的描述安装 MySQL APT 存储 库。例如:

注意
从这里下载 APT 配置包。

shell> sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb

在配置屏幕上启用“MySQL 工具和连接器”。

更新您的 APT 存储库:

shell> sudo apt-get update

安装 MySQL 路由器。例如:

shell> sudo apt-get install mysql-router

手动安装包
您也可以下载.deb 软件包并从命令行安装它

shell> sudo dpkg -i package.deb

package.deb 是 MySQL 路由器包名称; 例如,MySQL 路由器版本号在哪里。mysql-router-version-1ubu1604-amd64.debversion

安装 RPM 包
在基于 RPM 的系统上,您可以下载并安装 RPM 软件包,也可以使用 Yum 软件包管理器。

使用 Yum Package Manager
首先,按照 MySQL Yum Repository 文档中的描述安装 MySQL Yum 存储 库。例如:

注意
从这里下载 Yum 配置包。

shell> sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm

接下来,安装 MySQL 路由器。例如:

shell> sudo yum install mysql-router

手动安装 RPM 包

shell> sudo rpm -i package.rpm

package.rpm 是 MySQL 路由器包名称; 例如,MySQL 路由器版本号在哪里。mysql-router-version-el7.x86_64.rpmversion

卸载
在 Linux 上卸载 MySQL 路由器的过程取决于您使用的软件包。

卸载 DEB 包
要卸载 Debian 软件包,请使用以下命令:

shell> sudo dpkg -r mysql-router

此命令不会删除配置文件。要删除它们和数据目录,请使用:

shell> sudo dpkg --purge mysql-router

注意
或者,使用 apt-get remove mysql-router 或 apt-get purge mysql-router。

卸载 RPM 包
要卸载 RPM 软件包,请使用以下命令:

shell> sudo rpm -e mysql-router

注意
同样,使用 yum remove mysql-router。

此命令不会删除配置文件。

什么不被删除
不清除时,卸载过程不会删除配置文件。在 Debian 系统上,这可能包括以下文件:

/etc/init.d/mysqlrouter
/etc/mysqlrouter/mysqlrouter.conf
/etc/apparmor.d/usr.sbin.mysqlrouter

第 3 章部署 MySQL 路由器

目录

3.1 引导 MySQL 路由器
3.2 在沙盒中试用 MySQL 路由器
3.3 基本连接路由
绩效建议
为了获得最佳性能,MySQL 路由器通常与使用它的应用程序安装在同一主机上。可能的原因包括:

允许本地 UNIX 域套接字连接到应用程序,而不是 TCP / IP。

注意
Unix 域套接字可以与连接到 MySQL 路由器的应用程序一起使用,但不适用于连接到 MySQL 服务器的 MySQL 路由器。

减少网络延迟。

允许 MySQL 路由器连接到 MySQL,而不需要为路由器的主机提供额外的帐户,对于专门为应用程序主机创建的 MySQL 帐户,例如 myapp@198.51.100.45 而不是像 myapp @%这样的值。

通常,应用程序服务器最容易扩展。

您可以在网络上运行多个 MySQL 路由器实例,而无需将 MySQL 路由器隔离到单个计算机上。这是因为 MySQL 路由器对任何特定服务器或主机都没有亲和力。


图 3.1 MySQL 路由器部署示例

示例部署显示了一个中央组复制和高可用性设置,其中有三个实体指向或连接到它:MySQL Shell 和两个堆栈,每个堆栈包括 MySQL 路由器,MySQL 连接器和应用程序。

3.2 在沙盒中试用 MySQL 路由器

通过使用 InnoDB 集群设置路由器沙箱来测试 MySQL 路由器安装。在这种情况下,路由器充当中间节点,将客户端连接重定向到服务器列表。如果一台服务器出现故障,客户端将重定向到列表中的下一个可用服务器。

设置 MySQL 服务器沙箱
首先启动三个 MySQL 服务器。您可以通过多种方式执行此操作,包括:

使用 InnoDB 集群提供的 MySQL Shell AdminAPI 接口。这是推荐且最简单的方法,本节将对此进行介绍。有关其他信息,请参阅 InnoDB Cluster。

有关脚本方法,请参阅 Scripting AdminAPI 或 https://github.com/mattlord/D…。

通过在三个不同的主机上或在同一主机上安装三个 MySQL Server 实例。

使用 mysql-test-run.plMySQL Test Suite 框架中的脚本。有关其他信息,请参阅 MySQL 测试套件。

使用 mysqlcloneserver MySQL 实用程序。

以下示例使用 AdminAPI 方法设置我们的群集沙箱。这是一个简要的概述,请参阅 InnoDB 集群手册中的 InnoDB Cluster 的 Sandbox 部署以获取更多详细信息。以下假设您安装了当前版本的 MySQL Shell,MySQL Server 和 MySQL Router。

部署沙箱群集
此示例使用 MySQL Shell AdminAPI 来设置具有三个 MySQL 实例(一个主要和两个辅助实例)的 InnoDB 集群,以及带有生成配置文件的自举独立 MySQL 路由器。使用“……”缩短输出。

shell> mysqlsh

mysql-js> dba.deploySandboxInstance(3310)

mysql-js> dba.deploySandboxInstance(3320)

mysql-js> dba.deploySandboxInstance(3330)

mysql-js> connect root@localhost:3310

mysql-js> cluster = dba.createCluster(“myCluster”)

mysql-js> cluster.addInstance(“root@localhost:3320”)

mysql-js> cluster.addInstance(“root@localhost:3330”)

mysql-js> cluster.status()
{

"clusterName": "myCluster", 
"defaultReplicaSet": {
    "name": "default", 
    "primary": "localhost:3310", 
    "ssl": "REQUIRED", 
    "status": "OK", 
    "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", 
    "topology": {
        "localhost:3310": {
            "address": "localhost:3310", 
            "mode": "R/W", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }, 
        "localhost:3320": {
            "address": "localhost:3320", 
            "mode": "R/O", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }, 
        "localhost:3330": {
            "address": "localhost:3330", 
            "mode": "R/O", 
            "readReplicas": {}, 
            "role": "HA", 
            "status": "ONLINE"
        }
    }
}, 
"groupInformationSourceMember": "mysql://root@localhost:3310"

}

mysql-js> q

Bye!
设置路由器
接下来,设置 MySQL Router 以重定向到这些 MySQL 实例。我们将使用 bootstrapping(using –bootstrap),并使用 创建一个独立的 MySQL 路由器安装 –directory。这使用元数据缓存插件来安全地存储凭据。

shell> mysqlrouter –bootstrap root@localhost:3310 –directory /tmp/myrouter

Please enter MySQL password for root:

Bootstrapping MySQL Router instance at ‘/tmp/mysqlrouter’…
MySQL Router has now been configured for the InnoDB cluster ‘myCluster’.

The following connection information can be used to connect to the cluster.

Classic MySQL protocol connections to cluster ‘myCluster’:

  • Read/Write Connections: localhost:6446
  • Read/Only Connections: localhost:6447

X protocol connections to cluster ‘myCluster’:

  • Read/Write Connections: localhost:64460
  • Read/Only Connections: localhost:64470

shell> cd /tmp/myrouter

shell> ./start.sh
MySQL 路由器现已配置并运行,并且正在使用我们之前设置的 myCluster 集群。

测试路由器
现在通过连接到配置的 MySQL 路由器端口,像连接任何其他 MySQL 服务器一样连接到 MySQL 路由器。

以下示例连接到端口 6446 上的 MySQL 路由器,我们为读写连接配置的端口:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p
mysql> SELECT @@port;

@@port
3310

如图所示,我们使用端口 6446 连接到 MySQL 路由器,但是看到我们连接到端口 3310(我们的 PRIMARY)上的 MySQL 实例。接下来让我们连接到一个只读的 MySQL 实例:

shell> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

@@port
3320

如图所示,我们使用端口 6447 连接到 MySQL 路由器,但是看到我们连接到端口 3320(我们的辅助设备之一)上的 MySQL 实例。只读模式默认为循环策略,其中下一个连接引用不同的辅助:

shell> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

@@port
3330

如图所示,我们与端口 6447 的第二个只读连接连接到不同的 MySQL 辅助节点,在这种情况下连接到端口 3330 而不是 3320。

现在通过首先杀死我们连接到上面的主 MySQL 实例(端口 3310)来测试故障转移。

shell> mysqlsh –uri root@127.0.0.1:6446

mysql-js> dba.killSandboxInstance(3310)

The MySQL sandbox instance on this host in
/home/philip/mysql-sandboxes/3310 will be killed

Killing MySQL instance…

Instance localhost:3310 successfully killed.
您可以继续使用 MySQL Shell 检查连接,但让我们使用上面我们做的相同的 mysql 客户端示例:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p
mysql> SELECT @@port;

@@port
3320

shell> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

@@port
3330

如图所示,尽管连接到相同的端口(主端口为 6446,辅助端口为 6447),但底层端口已更改。我们的新主服务器从端口 3310 更改为 3320,而我们的辅助服务器从 3320 更改为 3330。

我们现在已经演示了 MySQL 路由器执行简单的重定向到主要和次要 MySQL 实例的列表。

3.3 基本连接路由

该连接路由插件执行基于连接的路由,这意味着它的数据包转发到服务器,而不检查它们。这是一种提供高吞吐量的简单方法。有关连接路由的其他常规信息,请参见 第 1.3 节“连接路由”。

一个简单的基于连接的路由设置如下所示。第 4.3.2 节“配置文件选项”中介绍了这些和其他选项。

[logger]
level = INFO

[routing:secondary]
bind_address = localhost
bind_port = 7001
destinations = foo.example.org:3306,bar.example.org:3306,baz.example.org:3306
routing_strategy = round-robin

[routing:primary]
bind_address = localhost
bind_port = 7002
destinations = foo.example.org:3306,bar.example.org:3306
routing_strategy = first-available

在这里,我们使用连接路由来循环 MySQL 连接到端口 7001 上的三个 MySQL 服务器,如循环法 所定义 routing_strategy。此示例还使用端口 7002 为两个服务器配置第一个可用策略。第一个可用策略使用目标列表中的第一个可用服务器。分配给每个实例的 MySQL 实例数 destinations 取决于您,因为这只是一个示例。路由器不会检查数据包,也不会根据分配的策略或模式限制连接,因此应用程序可以确定在何处发送读取和写入请求,在我们的示例中为端口 7001 或 7002。

注意
在 MySQL Router 8.0 之前,使用了现已弃用的 mode 选项,而不是 routing_strategy MySQL Router 8.0 中添加的选项。

假设所有三个 MySQL 实例都在运行,接下来通过传入配置文件启动 MySQL 路由器:

shell> ./bin/mysqlrouter -config=/etc/mysqlrouter-config.conf

现在,MySQL 路由器正在侦听端口 7001 和 7002,并将请求发送到适当的 MySQL 实例。例如:

shell> ./bin/mysql --user=root --port 7001 --protocol=TCP

首先连接到 foo.example.org,然后是 bar.example.org,然后是 baz.example.org,第四个调用将返回 foo.example.org。相反,我们以不同方式配置端口 7002 的行为:

shell> ./bin/mysql –user=root –port 7002 –protocol=TCP
首先连接到 foo.example.org,其他请求将继续连接到 foo.example.org,直到出现故障,此时 bar.example.org 现在被使用。有关此行为的其他信息,请参阅 mode。

退出移动版