当健康检查启用时,对于具有2个线程的zope实例,haproxy maxconn的最佳设置是什么?

我们最近开始在Zope服务器前运行HAProxy负载平衡器。 我们有两个Zope服务器,每个都有两个线程,目前HAProxyconfiguration如下

server cms_instance1 app:18081 check downinter 10s maxconn 2 rise 1 slowstart 300s server cms_instance2 app:18082 check downinter 10s maxconn 2 rise 1 slowstart 300s 

由于每个Zope实例运行2个线程,因此我可以按照在线看到的build议进行操作,并将lb最大连接设置为2。 但是,如果你也有健康检查configuration,这不意味着有时Haproxy将有3个连接到Zope实例:2个连接是负载平衡加健康检查?

在这种情况下设置maxconn 1会更好吗?

总的来说,你希望你的maxconn匹配线程的数量,或者甚至增加一个额外的,这取决于你的应用程序将返回blob结果或其他迭代器的频率。

Zope只使用一个请求的线程,直到这个响应产生一个完整的结果(返回一个string变成一个响应),或者它返回一个stream(例如一个ZODB BLOB文件)。

后者由底层的asynchronous库处理,并且为下一个请求释放线程。 根据所服务的stream的大小,haproxy连接可能会打开一段时间。

我从来没有看到healthchk参数失败的任何问题,因为你达到了haproxy中configuration的最大连接数; 我没有发现这方面的证据,但是我认为haproxy在检查后端健康状况时足够聪明,可以考虑maxconn参数。 在任何情况下,如果你的集群如此过载以至于你所有的后端都以最大容量持续服务,你可能需要添加实例。

当我用来pipe理zope群集时,我总是将maxconn设置为线程数减1。 这样做是为了允许连接进行健康检查。