Forum Discussion
6 Replies
- nitassEmployee
is connection limit or connection rate limit at pool member usable?
please be noted that connection limit is enforced per tmm.
sol8457: Connection limits configured on pool members or nodes for a CMP system are enforced per TMM instance
- Bala_02_152654Nimbostratus
Hello
The scenario used is VE, and i m only looking at a simple irule which can be used to that the first 1000 connection is exceeded then only it should be redirected to the second pool member.
- nitassEmployee
i m only looking at a simple irule which can be used to that the first 1000 connection is exceeded then only it should be redirected to the second pool member.
you can count number of active connections using table command. it could be similar to this (you have to revise it because the example counts number of active connections for each client ip).
v10.1 - The table Command - Examples by Spark (Limiting Connections To A VIP)
to send traffic to specific pool member, you can use pool or node command.
pool
node
- Bala_02_152654Nimbostratus
I would request if you can publish the exact irule with the syntax so that i can test the same.
The requirement is for the first 1000 HTTP Get requests, the virtual server should load balance the traffic to the first pool member 10.10.10.1 and if the traffic exceed 1000, then it should load balance the same to the second pool member or node 10.10.10.2.
Again after 2000th connection, counter should be set to 0 and as usual the next 1000 should go to 10.10.10.1 and go to 10.10.10.2 once the request is more than 1000 requests
- nitassEmployee
i do mathematics (divide and remainder) to select pool member based on number of requests. this is just an example and you may have to revise to suit your environment. please be noted that this logic won't be accurate if some of the pool member is down.
e.g.
config root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm virtual bar ltm virtual bar { destination 172.28.24.10:80 ip-protocol tcp mask 255.255.255.255 pool foo profiles { http { } tcp { } } rules { qux } source 0.0.0.0/0 source-address-translation { type automap } vs-index 69 } root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm pool foo ltm pool foo { members { 200.200.200.101:80 { address 200.200.200.101 } 200.200.200.111:80 { address 200.200.200.111 } } } root@(ve11a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm rule qux ltm rule qux { when RULE_INIT { set static::multiply 10 set static::pool "foo" set static::command "members $static::pool" set static::number [eval $static::command] } when CLIENT_ACCEPTED { set lb_fails 0 } when HTTP_REQUEST { set c [table incr counter] set m1 [expr { ( $c - 1 ) / $static::multiply }] set m2 [expr { $m1 % $static::number }] pool [LB::server pool] member [lindex [lindex [members -list [LB::server pool]] $m2] 0] } when HTTP_RESPONSE { log local0. "c=$c server=[IP::server_addr]" } when LB_FAILED { if { $lb_fails < [active_members [LB::server pool]] } { LB::mode rr LB::reselect pool [LB::server pool] } else { incr lb_fails } } } test (generating 21 http requests) [root@ve11a:Active:In Sync] config tail -f /var/log/ltm Aug 20 22:35:17 ve11a info tmm1[29362]: Rule /Common/qux : c=1 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm[29362]: Rule /Common/qux : c=2 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm1[29362]: Rule /Common/qux : c=3 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm[29362]: Rule /Common/qux : c=4 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm1[29362]: Rule /Common/qux : c=5 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm[29362]: Rule /Common/qux : c=6 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm1[29362]: Rule /Common/qux : c=7 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm[29362]: Rule /Common/qux : c=8 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm1[29362]: Rule /Common/qux : c=9 server=200.200.200.111 Aug 20 22:35:17 ve11a info tmm[29362]: Rule /Common/qux : c=10 server=200.200.200.111 Aug 20 22:35:18 ve11a info tmm1[29362]: Rule /Common/qux : c=11 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm[29362]: Rule /Common/qux : c=12 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm1[29362]: Rule /Common/qux : c=13 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm[29362]: Rule /Common/qux : c=14 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm1[29362]: Rule /Common/qux : c=15 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm[29362]: Rule /Common/qux : c=16 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm1[29362]: Rule /Common/qux : c=17 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm[29362]: Rule /Common/qux : c=18 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm1[29362]: Rule /Common/qux : c=19 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm[29362]: Rule /Common/qux : c=20 server=200.200.200.101 Aug 20 22:35:18 ve11a info tmm1[29362]: Rule /Common/qux : c=21 server=200.200.200.111
- B_EarpAltocumulus
Hi,
Thanks for this nitass - I can't seem to get it to work with more than 2 pool members as the LB::reselect only seems to fire once...
Does this work with more than 2 pool members?
Thanks