请考虑某个组织的以下拓扑结构,该组织由 4 个分支(A、B、C、D)组成。所有分支都位于不同的地理位置并通过 VPN 互连:
该组织使用基于 MySQL 的解决方案。为了提供高可用性并提高可扩展性,我考虑使用MySQL 组复制。我计划在每个分支中放置一个数据库节点,这样所有“读取”操作都将从本地节点执行,而“写入”操作将在“主”上执行。
我多次查看了 MySQL 文档,但我找不到这个问题的明确答案:如果某个分支中的 VPN 断开连接(例如数据库不再连接到组),该分支是否仍然能够对本地数据库节点执行“读取”操作?
答案1
我查看了 MySQL 官方文档,没有找到你的问题的答案,然后我在 Google 上搜索了更多信息,发现了本文。因此,根据本文,当没有与主服务器连接时,无法从数据库读取数据。
当您启动新服务器时,它将尝试从其他组成员获取其缺失的所有数据。它将使用配置的访问凭据并连接到另一个成员以获取缺失的组事务。在此期间,其状态将显示为“恢复”,并且您不应在此阶段对此服务器执行任何操作。
但我在谷歌上搜索了一下,找到了你本文。
但请注意,当成员自愿离开时,它首先会启动动态组重新配置。这会触发一个过程,所有成员必须在没有离开服务器的情况下就新视图达成一致。但是,如果成员非自愿离开(例如,它意外停止或网络连接中断),则故障检测机制会意识到这一事实,并提出重新配置组,这次没有故障成员。如上所述,这需要组中大多数服务器的同意。如果组无法达成一致(例如,它以没有大多数服务器在线的方式进行分区),则系统无法动态更改配置,因此会阻塞以防止出现裂脑情况。最终,这意味着管理员需要介入并解决这个问题。
这意味着,如果您的集群丢失一个节点,它仍然可以工作,但是“丢失的”节点将被阻止以防止出现脑裂情况。
我认为在您的情况下最好使用标准的主从复制,通过这种类型的复制,即使没有网络链接,您也可以毫无问题地从从属服务器读取数据。
答案2
我询问了 MySql 团队并得到的答复是,如果节点断开连接,则可以从本地节点进行“读取”操作。