Forum Discussion

Gbps_31870's avatar
Gbps_31870
Icon for Nimbostratus rankNimbostratus
Nov 28, 2011

Persistence Issue

Hi All,

 

 

From the subject, I assumed it's a persistance issue, but let me brief my issue below in details.

 

 

I have two pools associated with one VS as following:

 

 

1- Pool1 (default pool)

 

2- Pool2 (called in one iRule)

 

 

I used the default persistance as Cookie_based persistance and the fallback based on src_addr

 

 

I have many iRules linked to this VS, with one of them redirecting to pool2 as following:

 

 

when HTTP_REQUEST {

 

switch -glob [HTTP::path] {

 

"/xyz1*" -

 

"/xyz2*" -

 

"/xyz3*" {pool Pool2}

 

}

 

}

 

 

For the above iRule it's working fine, but when any request hit the above iRule, and then any subsequent requests coming from the same client, it still persist to Pool2, where it should go to Pool1, eventhough the redirection at F5 is working fine (other iRules) but the selcted servers/pool is incorrect. Note that, this is only happening on subsequent requests where the first request hit the above iRule.

 

 

Any thoughts to fix this issue, plz feel free to ask me any additional info.

 

 

Thanks in advance Gangs ,,

 

 

BR,

 

  • hoolio's avatar
    hoolio
    Icon for Cirrostratus rankCirrostratus
    Hi Gbps,

    See Spark's timely explanation in this post for why this is happening:

    http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/52/aft/2156819/showtab/groupforums/Default.aspx2234364

    You can either fix this by specifying the default pool in the iRule or adding a OneConnect profile to the virtual server. For the latter, if you're using SNAT you can use the default OneConnect profile with a /0 source mask. If you're not doing serverside source address translation, create a custom OneConnect profile with a /32 source mask:

    http://devcentral.f5.com/wiki/AdvDesignConfig.ONECONNECT.ashx

    
    when CLIENT_ACCEPTED {
    
     Save the name of the VS default pool before this iRule changes it
    set default_pool [LB::server]
    }
    when HTTP_REQUEST {
    switch -glob [HTTP::path] {
    "/xyz1*" -
    "/xyz2*" -
    "/xyz3*" { pool Pool2 }
    default { pool $default_pool }
    }
    }
    

    Aaron
  • Hi Aaron/All,

     

     

    I have removed the first Event, and specify the default pool as Pool1, and seems everything working fine now.

     

     

    Thanks again Aaron

     

     

    BR,