6.4.1引导MySQL路由器

你可以在InnoDB副本集或InnoDB集群上启动MySQL路由器来自动配置路由。bootstrap过程是运行MySQL路由器的一种特定方式,它不启动通常的路由,而是配置mysqlrouter.conf基于元数据的文件。要在命令行引导MySQL路由器,传入——引导选项时启动mysqlrouter命令,它从元数据中检索拓扑信息,并配置到服务器实例的路由连接。或者,在Windows上使用MySQL安装程序来引导MySQL路由器,参见MySQL路由器配置与MySQL安装程序.一旦MySQL路由器启动,客户端应用程序连接到它发布的端口。MySQL路由器根据传入端口自动将客户端连接重定向到实例,例如,使用经典MySQL协议的读写连接默认使用6646。在拓扑发生变化的情况下,例如由于实例的意外失败,MySQL Router会检测到该变化并自动调整到剩余实例的路由。这消除了客户机应用程序处理故障转移或了解底层拓扑的需要。有关更多信息,请参见MySQL InnoDB集群路由

请注意

不要尝试手动配置MySQL路由器重定向到服务器实例。总是使用——引导选项,因为这确保了MySQL路由器从元数据中获取配置。看到集群元数据和状态

配置MySQL路由器用户

当MySQL路由器连接到一个InnoDB集群或InnoDB副本集时,它需要一个具有正确权限的用户帐户。从MySQL路由器8.0.19版本可以指定这个内部用户——帐户选择。在以前的版本中,MySQL Router在集群的每次引导时都创建内部帐户,这可能会导致大量帐户随着时间的推移而积累起来。从MySQL Shell 8.0.20版本,您可以使用AdminAPI设置MySQL路由器所需的用户帐户。使用setupRouterAccount(用户、[选项])创建MySQL用户帐户或升级现有帐户,以便MySQL路由器使用该帐户在InnoDB集群或InnoDB副本集上操作。这是使用InnoDB Cluster和InnoDB replicset配置MySQL路由器的推荐方法。

添加一个新的MySQL路由器帐户名为myRouter1到变量引用的InnoDB集群testCluster问题:

mysqlsh > testCluster.setupRouterAccount (myRouter1

在本例中,没有指定域,因此使用通配符()字符,确保创建的用户可以从任何域连接。将帐户限制为只能从example.com域,问题:

mysqlsh > testCluster.setupRouterAccount (myRouter1@example.com

该操作提示输入密码,然后用正确的权限设置MySQL Router用户。如果InnoDB Cluster或InnoDB replicset有多个实例,创建的MySQL Router用户将被传播到所有的实例中。

当您已经配置了MySQL Router用户时,例如,如果您使用的是8.0.20之前的版本,则可以使用setupRouterAccount ()操作来重新配置现有用户。在本例中,传入更新选项设置为true。例如,重新配置myOldRouter用户问题:

mysqlsh > testCluster.setupRouterAccount (myOldRouter, {'update':1})

部署MySQL路由器

MySQL路由器的建议部署在与应用程序相同的主机上。当使用沙箱部署时,所有东西都运行在一台主机上,因此您可以将MySQL路由器部署到同一台主机上。在使用生产部署时,我们建议将一个MySQL Router实例部署到用于承载一个客户端应用程序的每台机器上。也可以将MySQL路由器部署到您的应用程序实例连接的公共机器上。有关更多信息,请参见安装MySQL路由器

要引导基于InnoDB集群或InnoDB副本集的MySQL路由器,你需要到一个在线实例的类似uri的连接字符串。运行mysqlrouter命令并提供——引导=实例选项,实例是到在线实例的类似uri的连接字符串。MySQL路由器连接到实例并使用包含的元数据缓存插件来检索元数据,元数据由服务器实例地址及其角色的列表组成。例如:

Shell > mysqlrouter——bootstrap icadmin@ic-1:3306——user=mysqlrouter

系统会提示您输入MySQL路由器要使用的实例密码和加密密钥。该加密密钥用于加密MySQL路由器连接到集群时使用的实例密码。还会显示可用于客户端连接的端口。有关其他引导相关选项,请参见引导选项

提示

在这一点上,MySQL路由器还没有启动,所以它将路由连接。引导是一个独立的过程。

MySQL路由器引导过程创建一个mysqlrouter.conf文件,根据从传递给。的地址检索的元数据设置——引导选项,在上述示例中icadmin@ic-1:3306.根据检索到的元数据,MySQL路由器自动配置mysqlrouter.conf文件,包括metadata_cache部分。如果您使用的是MySQL路由器8.0.14及以上版本,则——引导选项自动配置MySQL路由器跟踪和存储活跃的MySQL元数据服务器地址的路径配置dynamic_state.这确保了当MySQL路由器重新启动时,它知道哪些MySQL元数据服务器地址是当前的。有关更多信息,请参见dynamic_state10bet官方网站文档。

在早期的MySQL路由器版本中,元数据服务器信息是在MySQL路由器的初始引导操作期间定义的,并静态存储为bootstrap_server_addresses在配置文件中,该文件包含集群中所有服务器实例的地址。例如:

[metadata_cache:prodCluster] router_id=1 bootstrap_server_addresses=mysql://icadmin@ic-1:3306,mysql://icadmin@ic-2:3306,mysql://icadmin@ic-3:3306 user=mysql_router1_jy95yozko3k2 metadata_cluster=prodCluster ttl=300
提示

如果使用MySQL Router 8.0.13或更早版本,当您在启动MySQL Router后通过添加另一个服务器实例来更改集群的拓扑结构时,您需要更新bootstrap_server_addresses根据更新的元数据。或者重启MySQL路由器使用——引导选项,或手动编辑bootstrap_server_addresses部份mysqlrouter.conf重新启动MySQL路由器。

生成的MySQL Router配置创建用于连接到集群的TCP端口。缺省情况下,已经创建了使用经典MySQL协议和X协议与集群通信的端口。要使用X协议,服务器实例必须安装和配置X Plugin,这是MySQL 8.0及以后版本的默认设置。缺省可用的TCP端口为:

  • 6446-对于经典的MySQL协议读写会话,MySQL路由器将传入的连接重定向到主服务器实例。

  • 6447-对于经典的MySQL协议只读会话,MySQL路由器将传入的连接重定向到一个辅助服务器实例。

  • 64460-对于X协议读写会话,MySQL路由器将传入的连接重定向到主服务器实例。

  • 64470-对于X协议只读会话,MySQL路由器将传入的连接重定向到一个辅助服务器实例。

根据MySQL路由器的配置,端口号可能与上面不同。例如,如果你使用——conf-base-port选项,或group_replication_single_primary_mode变量。当您启动MySQL路由器时,会列出确切的端口。

传入连接的重定向方式取决于所使用的底层拓扑。例如,当使用单主集群时,默认情况下MySQL路由器发布一个X协议和一个经典的MySQL协议端口,客户端连接到这些端口进行读写会话,并被重定向到集群的单主。在多主集群中,读写会话以循环方式重定向到一个主实例。例如,这意味着到端口6446的第一个连接将被重定向到ic-1实例,到端口6446的第二个连接将被重定向到ic-2实例,依此类推。对于传入的只读连接,MySQL路由器将连接重定向到一个辅助实例,也是以循环的方式。要修改此行为,请参阅routing_strategy选择。

引导和配置完成后,启动MySQL路由器。如果您使用的是全系统安装——引导选项然后发出:

Shell > mysqlrouter &

如果您将MySQL路由器安装到使用——目录选项,使用start.sh在您安装到的目录中找到的脚本。或者设置一个服务,以在系统引导时自动启动MySQL路由器,参见启动MySQL路由器.现在,您可以将MySQL客户端(如MySQL Shell)连接到上面描述的一个传入的MySQL路由器端口,并查看客户端如何透明地连接到一个服务器实例。

Shell > mysqlsh——uri root@localhost:6442

要验证实际连接的是哪个实例,只需对港口状态变量。

切换到sql模式…命令以;select @@port;+--------+ | @@ 港口  | +--------+ | 3310年  | +--------+

在MySQL路由器中使用副本集

你可以使用MySQL Router 8.0.19和更高版本来引导一个InnoDB副本集第6.4节,“MySQL路由器”.在生成的MySQL路由器配置文件中唯一的区别是添加了cluster_type选择。当MySQL路由器在一个复制集上启动时,生成的配置文件包括:

cluster_type = rs

当你使用MySQL路由器与InnoDB副本集,注意:

  • MySQL路由器的读写端口将客户端连接引导到副本集的主实例

  • MySQL路由器的只读端口将客户端连接直接指向副本集的一个辅助实例,尽管它也可以将它们指向主实例

  • MySQL路由器从主实例获取关于副本集拓扑的信息

  • 当主实例不可用时,一个不同的实例被提升时,MySQL路由器会自动恢复

你使用MySQL路由器实例,它已经被引导到一个副本集上,与使用InnoDB集群的方式完全相同。看到使用集群的路由器如欲查询有关ReplicaSet.listRouters ()而且ReplicaSet.removeRouterMetadata ()