使用 HAProxy 对三个 SQL Server 2008 数据库服务器进行负载平衡是否可能/可行/合理?
我们的情况如下:我们有两台在 Amazon EC2 上负载均衡的 Web 服务器。我们目前使用一台生产 SQL Server 2008 DB 服务器。该服务器开始超载,因此我们想添加另外两台 DB 服务器,并实施负载均衡解决方案。
在 Amazon EC2 中,我们无法使用虚拟 IP 地址,这使得我们无法使用 Windows 网络负载平衡 (NLB) 或任何其他需要 VIP 的负载平衡方法。
我们的应用程序读取量很大,但我们无法将读取与写入分开,因此负载平衡解决方案需要考虑到这一点。
我们计划使用 SQL Server 的内置复制功能来保持所有三个数据库处于最新状态(我们知道会有一些滞后时间,但这是可以接受的)。
欢迎提出任何想法或建议,并提前感谢您的帮助。
答案1
使用 HAProxy 对三个 SQL Server 2008 数据库服务器进行负载平衡是否可能/可行/合理?
不,不是的。即使您可以使用 Windows NLB,它也不能可靠地运行。
当你的应用服务器与 SQL Server 通信时,TDS 通信协议保存“状态”。例如,考虑交易或长时间运行的查询。
HAProxy 和 NLB 不理解 TDS。如果您只是使用 HAProxy 在 TCP/IP 模式下进行负载平衡,那么连接可能会在事务进行过程中切换 - 从而导致结果非常不可预测,甚至可能导致数据丢失。
AFAIK,SQL Server 没有即插即用的负载平衡器。