Forum Discussion

redadmin1972's avatar
redadmin1972
Icon for Altocumulus rankAltocumulus
Apr 10, 2024

Pool round Robin not working with standard virtual server

I have a standard HTTPS virtual server configured with two nodes in the pool. There is no persistence setting enabled and the load balancing method is round robin.

For some reason, after I browse to the site and establish a connection with a backend server in the pool, all my future requests go to the same server and it behaves in a way that indicates some persistence is enabled. For example, when I refresh my browser, open the site in a new browser, and open the site in an incognito browser, all my requests keep going to the same node. You can see below that I tried this multiple times and kept getting connected to one server and the number of connections on that server was increasing.

According to my research, because there is no persistence profile setting, the load balancing method is round robin, and both servers are available and able to accept traffic, every time I refresh or open the site in a new tab or browser, I should be randomly assigned to a server for that connection via round robin load balancing. But this is not what I observe. 

Is there a reason that my virtual servers are showing persistence by default? Any ideas? 

Here are some images of my config:

 

 

 

  • Paulius's avatar
    Paulius
    Apr 11, 2024

    The reason you're having this issue is most likely because of the following entry in your iRule.

     

    catch { persist uie [HTTP::header "X-Forwarded-For"] 1800 }

     

    That entry will always apply UIE persistence based on the HTTP header "X-Forwarded-For" so you then get bound to the same pool member all the time.

  • redadmin1972 Would you be able to provide the CLI output for the virtual server and any associated configuration such as pools, profiles, and irules?

    • redadmin1972's avatar
      redadmin1972
      Icon for Altocumulus rankAltocumulus

      Here is CLI output for the virtual server

       

      From NonProd LTM:
       
      ltm virtual website_https_vs {
          creation-time 2021-02-19:02:17:10
          destination 10.0.0.10:https
          ip-protocol tcp
          last-modified-time 2021-10-05:14:48:44
          mask 255.255.255.255
          pool website_https_pool
          profiles {
              website_SSL {
                  context clientside
              }
              http { }
              serverssl {
                  context serverside
              }
              tcp { }
          }
          rules {
              DEFAULT-IR
          }
          serverssl-use-sni disabled
          source 0.0.0.0/0
          source-address-translation {
              type automap
          }
          translate-address enabled
          translate-port enabled
          vs-index 64
      }

       

      Here is the iRule DEFAULT-IR

      when HTTP_REQUEST {
          if {not([HTTP::header exists "X-Forwarded-For"])} {
              HTTP::header insert X-Forwarded-For [IP::remote_addr]
          }
          catch { persist uie [HTTP::header "X-Forwarded-For"] 1800 }
      }

       

      No policies are applied

       

      Standard HTTPS pool with two ephemeral nodes from FQDN lookup. Load balancing method is Round Robin and Priority Group Activation is Disabled

      • Paulius's avatar
        Paulius
        Icon for MVP rankMVP

        The reason you're having this issue is most likely because of the following entry in your iRule.

         

        catch { persist uie [HTTP::header "X-Forwarded-For"] 1800 }

         

        That entry will always apply UIE persistence based on the HTTP header "X-Forwarded-For" so you then get bound to the same pool member all the time.