就我而言,我有两个 MySQL 服务器。一个是主人,一个是奴隶。
当从属不可用时,我的应用程序可以从主控读取和写入。
当 master 不可用时,假设有一个工具mysqlfailover
成功地提名了一个新的 master(从 slave)。
听起来不错,但应用程序在配置中有主主机名。所以它找不到它。
有哪些可用选项可以解决此问题?如何将应用程序切换到新的主人?
我知道我可以切换主机名以指向新 IP,在容器中使用 Kubernetes (StatefulSet) + DB,但还有什么可以作为裸机上的免费选项?
如果从广义上讲,如何使用 HA/故障转移工具解决这个问题?
谢谢
我们也遇到过类似的问题。多可用区MySQL-RDS 提供自动故障转移功能。每次发生故障转移时,虽然新 master 的 URL 保持不变,但 JDBC 仍然无法连接到新 master。
默认情况下,一旦连接到数据库,某些设置将永远不会刷新 DNS 条目,直到 JVM 重新启动。这可以通过设置JVM的networkaddress.cache.ttl参数来解决。设置此值可确保在一段时间后刷新 DNS 条目。如果您不使用 Java,请尝试为您的连接找到一个类似的参数。
换句话说,首先确保新 master 的 URL 保持不变(您需要与您的运营团队交谈以了解如何完成)。一旦完成,故障转移后发现新的主节点成为应用程序本身的责任,这可以通过定期刷新底层 DNS 条目来实现。
您可以在 URL 中使用逗号分隔多个 host:port 条目。
有关更多详细信息,请查看连接器/J 文档https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-config-failover.html或者如果您更喜欢免费客户端https://mariadb .com/kb/en/library/failover-and-high-availability-with-mariadb-connector-j/