cmp
2 TopicsBetter Round Robin
Problem this snippet solves: Implements Round Robin LB to avoid CMP idiosyncracies How to use this snippet: Attach this iRule to virtual server Code : when RULE_INIT { set static::betterRoundRobinDebug 1 } when CLIENT_ACCEPTED { set betterRoundRobinPoolMemberPick [lindex [active_members -list [LB::server pool]] [expr {[table incr [virtual]_count] % [active_members [LB::server pool]]}]] if {$static::betterRoundRobinDebug} { log "LB Pool: [LB::server pool] - ActiveMembersList: [active_members -list [LB::server pool]] - Attempt to Pick: $betterRoundRobinPoolMemberPick" } pool [LB::server pool] member [lindex $betterRoundRobinPoolMemberPick 0] [lindex $betterRoundRobinPoolMemberPick 1] } Tested this on version: 12.1152Views0likes0CommentsCMP v10.0 compatible counters using the session table
Problem this snippet solves: This simple iRule shows how you can create a CMP-compatible counter. The first portion of the iRule demonstrates creating and incrementing a global counter which is accessible across all virtual servers and all TCP connections. The second portion of the iRule shows a method for creating a VIP-specific global counter. There is no enforcement of access to the VIP-specific global counter but it should prevent accidental trampling of session table entry names. For details on CMP compatibility you can check these resources: https://devcentral.f5.com/wiki/iRules.CMPCompatibility.ashx https://support.f5.com/kb/en-us/solutions/public/7000/700/sol7751.html Code : when CLIENT_ACCEPTED { set log_prefix "[virtual name] [IP::client_addr]:[TCP::client_port]" } when HTTP_REQUEST { ####################################################################### # # Global (accessible across all VIPs) counter variable example # using the session table # # Look up the counter value. Will return a null string if it doesn't exist set value [session lookup uie "my_counter"] log local0. "$log_prefix: Global lookup value: $value" # Check if the value is null if {$value eq ""}{ # Add a new session table entry with a value of 0 session add uie "my_counter" 0 } else { # Increment the current value by 1 session add uie "my_counter" [expr {$value + 1}] } # Log the updated value log local0. "$log_prefix: Global lookup value: [session lookup uie "my_counter"]" ####################################################################### # # Local (accessible to only this VIP) counter variable example # using the session table # # Save the virtual server name to use as a session table entry prefix # This keeps the variables specific to the virtual server. set vip [virtual name] # Look up the counter value. Will return a null string if it doesn't exist set value [session lookup uie "${vip}_my_counter"] log local0. "$log_prefix: Per-vip lookup value: $value" # Check if the value is null if {$value eq ""}{ # Add a new session table entry with a value of 0 session add uie "${vip}_my_counter" 0 } else { # Increment the current value by 1 session add uie "${vip}_my_counter" [expr {$value + 1}] } # Log the updated value log local0. "$log_prefix: Per-vip lookup value: [session lookup uie "${vip}_my_counter"]" } Tested this on version: 10.0476Views0likes1Comment