2

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。


Yujiaao
12.7k 声望4.7k 粉丝

[链接]