MySQL路由器8.0/部署MySQL路由器/在沙箱中尝试MySQL路由器

3.2在沙箱中尝试MySQL路由器

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

建立一个MySQL服务器沙盒

首先启动三个MySQL服务器。你可以通过多种方式做到这一点,包括:

  • 使用InnoDB集群提供的MySQL Shell AdminAPI接口。这是推荐的最简单的方法,在本节中有详细说明。有关其他信息,请参见使用MySQL AdminAPI

    有关脚本化方法,请参见脚本AdminAPIhttps://github.com/mattlord/Docker-InnoDB-Cluster

  • 通过在三个不同的主机上安装三个MySQL服务器实例,或者在同一主机上安装。

  • 使用mysql-test-run.pl脚本是MySQL测试套件框架的一部分。有关其他信息,请参见MySQL测试套件

下面的示例使用AdminAPI方法来设置我们的集群沙箱。这是一个简要的概述,请参见MySQL InnoDB集群详情请参见InnoDB集群手册。以下假设您已经安装了MySQL Shell、MySQL Server和MySQL路由器的当前版本。

部署沙盒集群

这个例子使用MySQL Shell AdminAPI建立了一个InnoDB集群,包含三个MySQL实例(一个主实例和两个从实例),以及一个带有生成配置文件的独立启动MySQL路由器。输出用“…”缩短。

dba.deploySandboxInstance(3310)…dba.deploySandboxInstance(3320)…dba.deploySandboxInstance(3330)…Mysql-js > \connect root@localhost:3310…mysql-js> cluster = db . createcluster ("myCluster")…> cluster.addInstance("root@localhost:3320")…> cluster.addInstance("root@localhost:3330")…mysql-js > cluster.status(){“clusterName”:“myCluster”、“defaultReplicaSet”:{“名称”:“默认”,“主要”:“127.0.0.1:3310”、“ssl”:“要求”,“状态”:“OK”,“statusText”:“集群网络,可以容忍一个失败。”,“拓扑”:{" 127.0.0.1:3310 ":{“地址”:“127.0.0.1:3310”、“模式”:“R / W”、“readReplicas”:{},“replicationLag”:空,“角色”:“哈”,“状态”:“在线”、“版本”:“8.0.20”},“127.0.0.1:3320”:{“地址”:“127.0.0.1:3320”、“模式”:“R / O”、“readReplicas”:{},“replicationLag”:空,“角色”:“哈”,“状态”:“在线”、“版本”:“8.0.20”},“127.0.0.1:3330”:{“地址”:“127.0.0.1:3330”、“模式”:“R / O”、“readReplicas”:{},“replicationLag”:空,“角色”:“哈”,“状态”:“在线”、“版本”:“8.0.20}},“topologyMode”:“单一主”},“groupInformationSourceMember”:“127.0.0.1:3310”}mysql-js > \问再见!

设置路由器

接下来,设置MySQL路由器重定向到这些MySQL实例。我们将使用bootstrapping(使用——引导),并使用——目录.它使用元数据缓存插件安全地存储凭据。

请输入MySQL root密码:Bootstrapping MySQL Router instance at '/tmp/mysqlrouter'…MySQL路由器已经为InnoDB集群“myCluster”配置好了。可以使用以下连接信息来连接集群。经典MySQL协议连接到集群“myCluster”:—读/写连接:localhost:6446—读/只读连接:localhost:6447 X协议连接到集群“myCluster”:—读/写连接:localhost:6448—读/只读连接:localhost:6449 shell> cd /tmp/myrouter shell> ./start.sh

MySQL路由器现在已经配置并运行,并且正在使用myCluster我们之前设置的集群。

测试路由器

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

下面的例子连接到MySQL路由器的端口6446,这个端口是我们为读写连接配置的:

mysql> SELECT @@port;+--------+ | @@ 港口  | +--------+ | 3310年  | +--------+

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

mysql> SELECT @@port;+--------+ | @@ 港口  | +--------+ | 3320年  | +--------+

正如所演示的,我们使用端口6447连接到MySQL路由器,但看到我们连接到我们的MySQL实例的端口3320(我们的一个辅助端口)。只读模式默认为轮询策略,其中下一个连接引用不同的次要连接:

mysql> SELECT @@port;+--------+ | @@ 港口  | +--------+ | 3330年  | +--------+

如所示,到端口6447的第二个只读连接连接到不同的MySQL辅助端口,在本例中连接到端口3330而不是3320。

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

shell> mysqlsh——uri root@127.0.0.1:6446 MySQL -js> dba.killSandboxInstance(3310)在这个主机的/home/philip/ MySQL -sandboxes/3310将杀死MySQL沙盒实例实例localhost:3310成功被杀死。

您可以继续使用MySQL Shell检查连接,但让我们使用相同的方法mysql上面的客户端示例:

mysql> SELECT @@port;+--------+ | @@ 港口  | +--------+ | 3320年  | +--------+ 壳>根- h 127.0.0.1 mysql - u - p 6447 - p mysql >选择@@port;+--------+ | @@ 港口  | +--------+ | 3330年  | +--------+

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

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