Forum Discussion
Krzysztof_Kozlo
Nimbostratus
Aug 03, 2007lb::reselect fails to select another node
I stripped out everything fancy and this still doesn't work. The behavior is peculiar:
rule reselect_test {
when LB_FAILED {
LB::reselect
}
}
pool test {
member 1.1.1.1:any
member 1.1.1.2:any
}
virtual test {
destination 1.1.2.1:any
protocol tcp
rule reselect_test
pool test
snat automap
}
When I connect, every other time the connection hangs while the LTM goes nuts trying to reconnect to the same back-end server.
Curiously, if I open another connection it breaks the first connection out of this loop and connects to the second.
I tested this on two 9.2.3 255.0 and one 9.3.0 system. Same thing.
I thought LB::reselect was a) supposed to select a _different_ node and b) supposed to be limited in the amount of retries?
- romka_77775
Nimbostratus
Try to call to LB::detach before LB:reselect. - d_9795
Nimbostratus
Thanks - Krzysztof_Kozlo
Nimbostratus
Tried that already. Changes nothing in the behavior whatsoever. - Joseph_Chan_463Historic F5 AccountBTW, is there a monitor to check the health of those two nodes?
- Deb_Allen_18Historic F5 AccountLB::reselect chooses a node based on the LB algorithm for the pool, which may or may not be a "different" server. It reselects only once, but if the server fails to respond, you will loop on the LB_FAILED event endlessly unless you include some count/stop logic in your iRule.
- Krzysztof_Kozlo
Nimbostratus
I don't want monitoring on the pool. The whole idea is that this is supposed to be a layer-3 rule that will dynamically send users to only servers that are listening on a given port. - Deb_Allen_18Historic F5 AccountI'd say you need to open a Support case, then, especially if you've been struggling with this for several months without resolution.
The advantage of monitoring is that a monitor looks for an expected response, rather than just a SYN/ACK, to determine if the server is healthy enough to receive traffic.when CLIENT_ACCEPTED { set failed 0 } when LB_FAILED { incr failed if {$failed > 1 } specify action if both servers failed reject } else { default case would match if no pool or server selected switch [LB::server addr] { 1.1.1.1 { node 1.1.1.2 0 } 1.1.1.2 { node 1.1.1.1 0 } default { reject } } } }
- Krzysztof_Kozlo
Nimbostratus
I'm well aware of the advantage of out-of-band monitoring. In this case, that doesn't scale, since the servers in question are dynamically allocated on various ports and we don't want to have to update the load balancer configuration every time a server is brought up or down.
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects