使用 ldirectord 分配 mysql 连接

使用 ldirectord 分配 mysql 连接

我正在使用 ldirectord 和 heartbeat 来实现 mysql 负载平衡。它将 mysql 连接平均分配给池中所有可用的服务器,但有时即使遇到“连接过多”错误,从服务器仍会留在池中。在向从服务器发送更多连接之前,应该有一些选项可以计算从服务器上正在运行的查询数。

有谁正在使用 ldirectord 来处理 mysql 并愿意分享相同的经验以及针对此问题的建议解决方案?

谢谢。

答案1

来自这些页面:

http://www.ultramonkey.org/3/topologies/ha-lb-eg.html

http://www.ultramonkey.org/3/topologies/config/lb/non-fwmark/linux-director/ldirectord.cf

看起来您想要做的是设置一些可以在每个后端主机上访问的 URL(使用 thttpd 之类的小型 CGI 就可以了),该 URL 测试盒子上的守护进程并报告与接收字符串不匹配的内容。发生这种情况时,ldirectord 将从池中拉出节点。

示例配置:

request="test-mysql.cgi"
receive="MYSQL OK"

答案2

如果你使用最小连接负载平衡算法,IPVS 将向具有最少活动连接数的后端发送新连接,这意味着你只会在以下情况下收到“连接过多”错误:全部服务器已满。目前,IPVS(或 ldirectord)中没有机制来指定后端在无法处理更多连接之前可以接受的同时连接数限制;实际上,实现起来并不难,但问题是,当服务器已满时,您会如何处理连接?RST 连接尝试?无论您做什么,这都将是客户端必须处理的错误,在我看来,MySQL 协议中的“连接过多”比“连接被拒绝”更容易诊断,因为后者错误的原因比前者更多、更多样化。

如果这是我的集群,我会切换到最少连接平衡,并在工作负载周围添加更多监控;如果你达到了极限,而你事先并不知道你已经接近极限,那么你就会出现监控失败的情况。

相关内容