网络故障(network failure)是指由于硬件的问题、软件的漏洞、病毒的侵入等引起网络无法提供正常服务或降低服务质量的状态。 本节介绍如何将MySQL路由器与InnoDB群集一起使用以实现高可用性。无论您是否部署了沙箱集群或生产集群,MySQL路由器都可以使用--bootstrap选项根据InnoDB集群的元数据进行自我配置。这将自动配置MySQL路由器,以将连接路由到群集的服务器实例。客户端应用程序连接到MySQL路由器提供的端口,而无需了解InnoDB集群拓扑。万一发生意内安装,请发送: shell> mysqlrouter& 如果使用--directory选项将MySQL Router安装到目录中,请使用start.sh安装目录中的脚本。或者,将服务设置为在系统启动时自动启动MySQL Router,请参阅启动MySQL Router。您现在可以如上所述将MySQL客户端(例如MySQL Shell)连接到传入的MySQL路由器端口之一,并查看客户端如何透明地连接到InnoDB集群实例之一。 shell> mysqlsh --uri root @ localhost:6442 要验证您实际连接的实例,只需对端口状态变量执行SQL查询。 mysql-js> \ sql 切换到SQL模式...命令以;结尾 mysql-sql>选择@@ port; + -------- + | @@ port | + -------- + | 3310 | + -------- + 测试高可用性 要测试高可用性是否有效,请通过杀死实例来模拟意外停止。群集检测到实例已离开群集并重新配置自身的事实。群集本身实际如何重新配置??取决于您使用的是单主机群集还是多主机群集,以及实例在群集中扮演的角色。 在单个主模式下: 如果当前主节点离开群集,则将选择一个辅助实例作为新的主实例,其优先级最低的是server_uuid。 MySQL Router将读写连接重定向到新选择的主。 如果当前辅助节点离开群集,则MySQL Router将停止将只读连接重定向到该实例。 有关更多信息,请参阅第1节8. 1. 3. 1“单主机模式”。 在多主要模式下: 如果当前的“ R / W”实例离开集群,则MySQL路由器会将读取和写入连接重定向到其他主。如果其余实例是群集中的最后一个主实例,则群集已完全消失,您将无法连接到任何MySQL路由器端口。 有关更多信息,请参见第1 8. 1. 3. 2节“多主模式”。 有许多方法可以模拟离开群集的实例。例如,您可以在dba.killSandboxInstance()测试沙箱部署时,强制停止实例上的MySQL服务器,或使用AdminAPI。在此示例中,假设有一个包含三个服务器实例的单一主沙箱群集部署,并且侦听端口3310的实例是当前主实例。模拟实例意外离开集群: mysql-js> dba.killSandboxInstance(331 0) 集群检测到更改并自动选择一个新的主。假设您的会话已连接到默认的经典经典MySQL协议端口6446,则MySQL路由器应检测到群集拓扑更改并将会话重定向到新选择的主服务器。要验证这一点,请使用以下\ sql命令在MySQL Shell中切换到SQL模式,然后选择实例的端口变量以检查会话已重定向到哪个实例。请注意,第一个SELECT语句失败,因为与原始主的连接已丢失。这意味着当前会话已关闭,MySQL Shell将自动为您重新连接,并且当您再次发出命令时,将确认新端口。 mysql-js> \ sql 切换到SQL模式...命令以;结尾 mysql-sql> SELECT @@ port; 错误:2013(HY00 0):查询期间与MySQL服务器的连接丢失 全局会话断开连接。 尝试重新连接到'root @ localhost:6446'... 全局会话已成功重新连接。 mysql-sql> SELECT @@ port; + -------- + | @@ port | + -------- + | 3330 | + -------- + 已设置1行(0. 00秒) 在此示例中,端口3330的实例已被选择为新的主实例。这表明InnoDB集群为我们提供了自动故障转移,MySQL Router已自动将我们重新连接到新的主实例,并且我们具有高可用性。 MySQL路由器和元数据服务器 当MySQL Router为集群启动时,它将在其配置文件中记录服务器实例的地址。如果在启动MySQL路由器后将任何其他实例添加到群集中,它们将不会被自动检测到,因此不会用于连接路由。 为确保正确路由新添加的实例,必须为群集启动MySQL路由器以读取更新的元数据。这意味着您必须重新启动MySQL Router并包括--bootstrap选项。 使用群集路由器 您可以针对一个集群或副本集启动多个MySQL Router实例。从8. 0. 19版本开始,要显示所有已注册的MySQL路由器实例的列表,请发出: Cluster.listRouters() 结果提供有关每个已注册的MySQL路由器实例的信息,例如元数据中的名称,主机名,端口等。例如,发出: mysql-js> Cluster.listRouters() { “ clusterName”:“示例”, “路由器”:{ “ ic-1:3306”:{ “主机名”:“ ic-1:3306”,
当今,越来越多的业务应用运行于网络架构之上,保障网络的持续、高效、安全的运行,成为网络管理者面临的巨大挑战。 |
温馨提示:喜欢本站的话,请收藏一下本站!