mysql客户端路由方式_20.3 在InnoDB 集群中 使用MySQL 路由

本节介绍如何使用带有InnoDB集群的MySQL路由器来实现高可用性。 无论您是否部署了sanbox或生产群集,MySQL路由器都可以使用--bootstrap选项根据InnoDB群集的元数据进行自我配置。 这会自动配置MySQL路由以将连接路由到群集的服务器实例。 客户端应用程序连接到MySQL路由提供的端口,无需了解InnoDB集群拓扑。 如果发生意外故障,InnoDB集群会自动调整自身,MySQL路由器会检测到更改。 这消除了客户端应用程序处理故障转移的需要。

注意:

不要尝试手动配置MySQL路由器以重定向到InnoDB集群的端口。 始终使用--bootstrap选项,因为这可确保MySQL路由器从InnoDB集群的元数据中获取其配置。

建议的MySQL路由器部署与应用程序位于同一主机上。 使用sanbox部署时,所有内容都在单个主机上运行,因此您将MySQL路由器部署到同一主机。 使用生产部署时,我们建议将一个MySQL路由器实例部署到用于托管其中一个客户端应用程序的每台计算机上。 还可以将MySQL路由器部署到应用程序实例连接的公共计算机。 您需要InnoDB集群的MASTER密钥才能自动配置MySQL路由器。

假设已经安装了MySQL路由器(

shell> mysqlrouter --bootstrap ic@ic-1:3306 --user=mysqlrouter

系统会提示您输入要使用的MySQL路由器的实例密码和加密key。 此加密key用于加密MySQL路由器用于连接到群集的实例密码。 还会显示可用于连接InnoDB集群的端口。 MySQL路由器引导过程创建一个mysqlrouter.conf文件,其中的设置基于从传递给--bootstrap选项的地址中检索到的集群元数据,在上面的示例ic@ic-1:3306中。 基于检索到的InnoDB集群元数据,MySQL路由器自动创建配置文件,包括带有bootstrap_server_addresses的metadata_cache部分,其中包含集群中所有服务器实例的地址。 例如:

[metadata_cache:prodCluster]

user=mysql_router1_jy95yozko3k2

metadata_cluster=prodCluster

ttl=300

Tip

通过在引导MySQL路由器之后添加另一个服务器实例来更改群集的拓扑时,需要根据被更新的元数据更新bootstrap_server_addresses。 使用--bootstrap选项重启MySQL Router,或手动编辑mysqlrouter.conf文件的bootstrap_server_addresses部分并重启MySQL Router。

生成的MySQL路由器配置会创建用于连接到群集的TCP端口。 创建使用经典MySQL协议和X协议与群集通信的端口。 要使用X协议,服务器实例必须安装并配置X插件。 对于sanbox部署,实例会自动设置X插件。 对于生产部署,如果要使用X协议,则需要在每个实例上安装和配置X插件,请参见第19.3节“将MySQL设置为文档存储”。 默认的可用TCP端口是:

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

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

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

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

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

传入连接的重定向方式取决于所使用的群集类型。 使用单主群集时,读写会话将重定向到单个主群集,多主群集读写会话将重定向到其中一个主实例。 对于传入的只读连接,MySQL路由器以循环方式将连接重定向到其中一个辅助实例。

一旦引导和配置完毕,启动MySQL路由器:

shell> mysqlrouter &

或者设置服务以在系统引导时自动启动MySQL路由器,请参阅启动MySQL路由器。 现在,您可以将MySQL客户端(如MySQL Shell)连接到其中一个传入的MySQL路由器端口,如上所述,并查看客户端如何透明地连接到其中一个InnoDB集群实例。

shell> mysqlsh --uri root@localhost:6442

要验证您实际连接到哪个实例,只需针对端口状态变量发出SQL查询。

mysql-js> \sql

Switching to SQL mode... Commands end with ;

mysql-sql> select @@port;

+--------+

| @@port |

+--------+

| 3310 |

+--------+

测试高可用

要测试高可用性是否有效,请通过终止实例来模拟意外停止。 群集检测到实例离开群集并重新配置自身。 群集重新配置的确切方式取决于您使用的是单主群集还是多主群集,以及实例在群集中所服务的角色。

在单主模式下:如果当前主节点离开集群,则其中一个辅助实例被选为新主节点,其中实例由最低的server_uuid区分优先级。 MySQL路由将读写连接重定向到新选择的主节点。

如果当前辅助节点离开群集,MySQL路由将停止将只读连接重定向到该实例。

在多主模式下:

如果当前的“R/W”实例离开集群,则MySQL路由器会将读写连接重定向到其他主节点。

如果当前“R/O”实例离开集群。

有多种方法可以模拟实例离开集群,例如,您可以强制停止实例上的MySQL服务器,或者在测试sanbox部署时使用AdminAPI dba.killSandboxInstance()。 在此示例中,假设存在具有三个服务器实例的单主sanbox集群部署,并且在端口3310处侦听的实例是当前主要部署。 模拟意外的实例离开集群:

mysql-js> dba.killSandboxInstance(3310)

使用\sql命令在MySQL Shell中切换到SQL模式,并验证端口变量以检查您连接的实例。 请注意,第一个SELECT语句失败,因为与原始主节点的连接已丢失。 这意味着当前会话已关闭,MySQL Shell会自动为您重新连接,当您再次发出命令时,将确认新端口。

mysql-js> \sql Switching to SQL mode... Commands end with ;

mysql-sql> SELECT @@port;

ERROR: 2013 (HY000):

Lost connection to MySQL server during query The global session got disconnected. Attempting to reconnect to 'root@localhost:6446'... The global session was successfully reconnected.

mysql-sql> SELECT @@port;

+--------+

| @@port |

+--------+

| 3330 |

+--------+

1 row in set (0.00 sec)

这表明InnoDB集群为我们提供了自动故障转移,MySQL路由器已自动将我们重新连接到新的主要实例。

MYSQL 路由和元数据服务器

当MySQL路由器针对群集进行引导时,它会在其配置文件中记录服务器实例的地址。 如果在引导MySQL路由器之后将任何其他实例添加到群集,则不会自动检测它们,因此不会将它们用于连接路由。

要确保新添加的实例正确路由,您必须针对群集引导MySQL路由器以读取更新的元数据。 这意味着您必须重新启动MySQL路由器并包含--bootstrap选项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值