![如何利用MySQL集群实现高可用性?](https://linux22.com/image/566960/%E5%A6%82%E4%BD%95%E5%88%A9%E7%94%A8MySQL%E9%9B%86%E7%BE%A4%E5%AE%9E%E7%8E%B0%E9%AB%98%E5%8F%AF%E7%94%A8%E6%80%A7%EF%BC%9F.png)
这个问题不是关于如何安装服务器及其功能,而是一个设计问题。
所以我有一个 MySQL 服务器集群。
我还有一个 DNS 记录”data.example.com“。
MySQL 集群具有三个 MySQL/查询节点(应用程序连接到的集群端点)。
其后是该集群的其余服务器(数据/管理)。
目的是将此簇视为一个实体单元(从外部视角来看)。
现在,外部应用程序(例如 Web 服务器)想要对数据库执行操作(写入/读取)。步骤如下:
1) 解析 DNS“data.example.com”。2
) 连接到 IP(它是 SQL 节点)。3
) 执行操作。
首要问题出现的问题中,比较简单的一个是:
如何通过单个 DNS 公开所有三个 SQL 节点?
- 在 DNS 服务器级别循环?
- 将该 DNS 记录设置为指向 SQL 节点的三个 IP?
第二期出现这种情况时,假设 DNS 解析为 10.0.0.7,这只是三个 SQL 节点之一:如果该节点宕机了怎么办?
整个集群仍然正常,但是现在尝试连接到该节点的应用程序会将集群视为“关闭”,因为该节点确实已关闭,因此我失去了“高可用性”。
我的问题很简单:
您将如何解决这个问题?请详细描述,并且复杂性并不会吓到我:)
请注意,我在这里会问有关负载平衡或类似问题的问题,但我更愿意保持这个问题“开放”,并听取更广泛的解决方案。谢谢!
答案1
高可用性通常使用所谓的 VIP(虚拟 IP 地址)来实现。因此,此 IP 应该不同于“静态地“为每个集群节点分配 IP 地址。应该分配此 VIP”动态地“由您所使用的高可用性解决方案决定。因此,在这种情况下,只有一个节点将为请求提供服务,如果该节点发生故障,高可用性软件将把 VIP 分配给集群中的另一个节点。这样,除了从一个节点到另一个节点的故障转移期间的极小部分时间外,您不会遭受停机时间。
如果您正在进行负载平衡,则需要有两个负载平衡节点和至少两个集群节点。 VIP 将被分配给其中一个负载平衡节点。应用程序请求将通过其中一个负载平衡节点定向到集群节点。
需要担心的一个重要问题是集群节点之间的数据同步,尤其是在负载平衡场景中。例如,假设您正在向一个节点写入数据,而从另一个节点读取数据。当然,除非应用良好的同步/负载平衡机制,否则这是行不通的。
编辑:
VIP 通常是高可用性软件分配给集群中活动节点的私有 IP 地址。它只是与每个节点的原始 IP 不同的 IP 地址。它可以简单地从同一子网分配。如果要通过 NAT 使集群节点可访问,则应将公共 IP 地址 NAT 到 VIP。这对于能够访问服务非常重要,无论哪个是活动节点。
答案2
您需要部署一个负载均衡器来分担 SQL 节点上的负载,并将 DNS 解析为该负载均衡器的 IP 地址