我发现了Nginx等负载平衡器,但这些似乎只能记住cpu使用率和网络流量.如何针对其他变量(例如每个节点上可用的磁盘量或可用内存量)进行负载平衡?
我是否必须编写自己的请求处理服务,以便在决定将请求发送到哪个节点时利用这些变量?
这是我的用例,我正在构建一个用于擦除代码的分布式文件系统,并希望负载均衡器将文件写入发送到节点,该节点可以处理流量,cpu负载,具有足够的磁盘用于IO操作并且具有足够的内存对于预期的操作.据我所知,拥有负载均衡器只能解决流量和cpu部分,但我如何进一步增加负载均衡器的要求?
感谢您帮我解决第一个问题.
解决方法
Rob-d提到负载均衡器必须在后端服务器上执行运行状况检查,以确保它们健康并可以处理请求.这绝对是正确的,我认为这将使您能够做您想做的事情(检查其他指标并让LB根据这些做出选择路由).
假设您正在对HTTP进行负载平衡,大多数负载均衡器将对某个页面执行HTTP GET或HEAD,以检查其状态是否为可行的后端.此页面可以是静态图像,CSS文件,甚至是HTML页面.
但它也可能是PHP / ASP / Java / Python页面.有些人可能会争辩说,它甚至应该是一个页面,可以对应用程序的堆栈(sql,Nosql,帮助程序服务等)执行某种形式的检查.
您无法编写实现复杂负载平衡算法的脚本,只需返回HTTP / 1.1 200 OK或HTTP / 1.1 503服务不可用,具体取决于服务器是否能够提供请求.
我知道至少有一个可以执行辅助代理检查的负载均衡器,它能够返回比简单UP / DOWN更多的细节,允许服务器的权重根据服务器代理决定的任何内容以配置的时间间隔动态更改.我认为这正是你正在寻找的.