Forum Discussion

R_Marc's avatar
R_Marc
Icon for Nimbostratus rankNimbostratus
Aug 13, 2014

TCP retry/replay

I am trying to solve a particular problem (Fronting Oracle RAC with the F5 but using SCAN...I've posted on this conundrum before).

Here's my new idea

          Client connects.  LTM sends that request to a SCAN port.
          SCAN responds with redirect to active listener for the service requested.
          Instead of returning that redirect response to the client, I resend the original connect message to the
          specified listener.

My question is how to do that in an iRule without sending a reset back to to the client for a reconnect. This would be similar to how HTTP::retry would function (at least that's how I see it, I could be totally off base ).

R. Marc

2 Replies

  • Richard__Harlan's avatar
    Richard__Harlan
    Historic F5 Account

    Once you get the Response from the server in the server side event and it is a redirect, store the redirect in a variable. You can do a LB::detach as this should be the end of the request.

     

    The LB::detach should break the connection between the client and server before the response get to the client side. Then you can rewrite the request and use the node command to pick the server to send the request to. At that point you should be able to use the TCP::respond to send the new crafted connect message to the correct server.

     

  • R_Marc's avatar
    R_Marc
    Icon for Nimbostratus rankNimbostratus

    Didn't work, went a similar, but different route. Still having issues, but am getting closer. The Detach doesn't work quite as expected inside SERVER_DATA. It does work in CLIENT_DATA.

     

    The TCP::respond went back to the original server who had already closed the connection (resulting in a reset).