我正在和我的老板谈论负载平衡一个 2 节点的 Galera 集群,我们不确定是否有任何理由。
对于写入,他的论点是,即使我们平衡写入,它也必须写入每个服务器以进行复制。
对于读取,我们可以平衡服务器之间的读取,但是如果现在所有内容都通过另一台服务器上的单个 VM,这真的能节省时间吗?
我们有两个专用的 SQL Server,它们处于 Active-Active Galera 设置中。
我能想到的做 HA-Proxy 的唯一方法是在另一台服务器上安装第三个虚拟机,这真的值得通过这个虚拟机来获得性能提升吗?这个虚拟机将在一个服务器上与其他流量拥塞?
将 HA-Proxy 放在 SQL Server 上并负载平衡读取是否可能/是否有意义,但它仍然会通过带 HA-Proxy 的主服务器到达服务器 B。
只是为这个简单的设置寻找一些一般的想法和建议。
根据您的特定工作负载和体系结构,您对问题的评论有几个不同的主题,并且有许多“IF”。让我们从你是对的事情开始:
有一些缺点: * 我有一些客户声称写入性能更好,可能是因为可怕的 SQL 查询 + Galera 需要基于行的复制,在某些特殊情况下,您可以获得一些收益(如果您进行 30 秒的写入但是你只写几条记录,你会得到一些额外的可扩展性)。这通常是非常罕见的:您应该首先修复您的查询,但我只是指出一个(非常)具体的异常。
你的问题的实质是,如果你在中间添加代理的事实不值得你从负载平衡查询中获得的改进。要回答这个问题,你需要说 6 件事:
这将告诉您是否出于性能原因对使用代理感兴趣。
您可以使用 ping找出前 3个,通过分析操作找出后 3 个。通常,查询时间比数据中心内的循环时间长得多,但这取决于您正在执行的查询以及这些 VM 的(物理)位置。为了取消其中一些时间,人们将代理安装在与客户端相同的机器上,因此大部分开销都被取消了。此外,HAproxy 主要是一个 IP 代理,开销非常低。
现在,如果您的服务器负载不是很大,您可能无法在延迟方面获得任何优势 -查询服务器将使您的吞吐量翻倍- 如果这对延迟有影响则取决于您当前的负载。
使用代理通常有一个更重要的原因,即高可用性——使用 HAProxy 将允许您自动切换到辅助 galera 节点,以防活动节点出现故障。它还将简化手动切换。当然,代理本身也可能是单点故障。
我希望这能帮助您做出决定——但最重要的建议是亲自尝试并衡量!
编辑:顺便说一句,只有 2 个节点,我希望你使用 galera 作为复制解决方案,而不是作为集群(需要特殊配置)或使用 garbd,因为如果你不这样做,并且一个节点出现故障,第二个也会出现故障也是为了避免裂脑(没有节点有 50%+ 的法定人数)。