Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 

iRule Source IP to prioritized list of pool members

cmp19
Nimbostratus
Nimbostratus

Hi!

Trying to create an iRule that matches a clients source IP and sends it to a specific pool member. If the pool member is down or offline, send it to a different member in the same pool. So far the source client is sticking to the first pool member in my statement, but when I turn that pool member off, connections are failing to pool member #2. What have I missed? Thanks for checking it out!

**Note %12 is my route domain this traffic lives in

when CLIENT_ACCEPTED {
 if { [IP::addr [IP::client_addr] equals a.a.a.a%12] } {
   pool test_pool member 2.2.2.2%12 8443
 } else {
   pool test_pool member 3.3.3.3%12 8443
 }
}
1 ACCEPTED SOLUTION

Basically, you are forcing the load balancing to member 1 whatever its status is. You need to either check its status before selecting it, or to use LB_FAILED event after selection to reselect another pool member.

    when CLIENT_ACCEPTED {
     if { [IP::addr [IP::client_addr] equals a.a.a.a%12] } {
      if { [LB::status pool test_pool member 2.2.2.2%12 8443] eq "up" } {
       pool test_pool member 2.2.2.2%12 8443
      } else {
       pool test_pool member 3.3.3.3%12 8443
      }
     }
    }

View solution in original post

2 REPLIES 2

Basically, you are forcing the load balancing to member 1 whatever its status is. You need to either check its status before selecting it, or to use LB_FAILED event after selection to reselect another pool member.

    when CLIENT_ACCEPTED {
     if { [IP::addr [IP::client_addr] equals a.a.a.a%12] } {
      if { [LB::status pool test_pool member 2.2.2.2%12 8443] eq "up" } {
       pool test_pool member 2.2.2.2%12 8443
      } else {
       pool test_pool member 3.3.3.3%12 8443
      }
     }
    }

This is exactly what I was missing. Thanks for such a quick response Amine!!