ColdFusion应用程序似乎倾向于集群中的一个节点



我们有许多Coldfusion应用程序(CF 9,Linux上的多服务器),它们在一对服务器上运行,前端是一对Apache web服务器。似乎90%的流量都流向了第一个CF节点。我们已经使用dynatrace来跟踪这一点,并且会话数量和在两个节点上花费的时间都是绝对偏斜的。在节点1上花费的时间似乎也有很大一部分用于数据库通信(Oracle),但节点2几乎没有显示任何数据库活动。

对于coldfusion集群的编码应用程序或任何其他诊断问题的方法,是否有任何一般性的建议?

编辑1

据我所知,流程是:

F5负载均衡器->web服务器(其中站点管理员验证授权)->CF

编辑2

从CF端来看,集群的设置具有循环调度,并且启用了粘性会话和复制会话。

Keith,正如Adam所说,f5是这里的关键。它是如何配置的。有很多可能性,但我想到了一些。

  • F5被配置为根据CPU使用情况进行平衡,并且"10%"服务器由于某种原因(可能是非CF原因)使用率很高,因此流量被分流到其他服务器
  • 高流量来自F5的单个会话,因为它被设置为"粘性",所以它会一次又一次地访问同一台服务器。例如,它可能会将机器人流量(未经cookie和参数修饰)视为一个会话,因为它匹配(即没有cookie或url参数)
  • 连同最后一点,也许这是一个单独的会话,毕竟占了所有的流量。我们最近遇到过这样一个案例,来自交通部的一个IP(见图)正在冲击服务器,并利用其50%的资源。DOS攻击(注意,不是DDOS)可能看起来像一个会话,因此(由于粘性会话)会到达同一台服务器

你可以看到这个列表可以继续:)

另请注意,您正在对会话进行集群以进行故障切换。这意味着必须将来自服务器A的会话复制到服务器B,反之亦然——这是一项在这些节点和服务器之间不断发生的任务。这种配置有很多细微差别,如果不需要的话,我通常建议人们不要这样做。带有硬件负载均衡器的集群中的稳定服务器提供了相当有效的冗余,但当一台服务器出现故障时,人们确实会失去会话(假设内存中有常规的CF会话)。我们的目标是达到一个罕见的例外。

考虑将第三台服务器添加到集群时会发生什么。它们现在必须全部复制,从而成倍地增加您的内存和带宽需求。

所以。。。如果你必须这样做,确保你在做一件重要的事情。对应用程序进行编码,使会话不会由代理和机器人创建。换句话说,确保"每一次会议都是有计划的和想要的会议"(我向Joycelyn Elders道歉)。

希望这能有所帮助。祝你好运

最新更新