在对netscaler上pool中的服务器节点做批量重启时/或者启用原先禁用的节点时,有时候会发生连接数堵塞导致pool失去响应的故障。症状表现为,pool中的一些节点无法正常处理应用请求,连接数很高,无法处理,成为死节点;导致其他节点承受过大应用压力,可能导致pool整体无响应或者很差的处理表现。

    原因:

    netscaler对pool中节点分配应用请求的算法,主要有least connection(LC)和round robin(RR)两种。一个负载均衡算法为least connection(LC)的pool,正常运行时,把新进入的请求分配给pool中当前连接数最少的服务器节点,从而保证各节点的处理性能,提高用户体验。

    有时候我们需要对pool中的禁用节点进行启用,这个时候netscaler会临时改变负载均衡算法为round robin,即依次把请求分配给应用节点,而不参考各节点当前连接数。这个时候问题来了。如果这个新启用的节点的ecv monitor的结果为up,但实际应用处理能力还没有100%启动,那么它无法像其他节点那样在同样时间里处理同样多的请求,导致连接数越来越高。

    解决办法:

    设置startup_rr_factor参数,例如设置为1。具体命令是:

/netscaler/nsapimgr -ys startup_rr_factor=1

    作用是设置netscaler在round robin期间给每个service只分配1个请求。为了保证下次netscaler重启后这个参数依然生效,需要添加到rc.netscaler文件中。具体办法是添加以下这行到/nsconfig/rc.netscaler:

/netscaler/nsapimgr -ys startup_rr_factor=1