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

Handling sideband server failure

sand87ch
Cirrus
Cirrus

Hi,

In my setup i have a BIGIP virtual server in front of a pool,This bigip VIP has a sideband connectiont o a virtual server that mirrors the requests and respobnses into my bigip VIP server.

\Issue:-

When the pool connected to the mirroring sideband server fails it temporarily interrupts the flow of response to the client who made the request to the m,ain bigip load balancer.Is there any way to overcome this,In the irule i did set static timeout of 1ms but this doesnt seem to help.

7 REPLIES 7

Kevin_Stewart
F5 Employee
F5 Employee

I'd recommend using the -status parameter in the sideband connect command to your advantage. You can use this to test that the connection is established before sending data.

https://clouddocs.f5.com/api/irules/connect.html

# Connect to an external host with a connection timeout of 100 ms and an idle timeout of 30 seconds
# Use catch to handle any errors in the destination virtual server name or external host:port
# Check if the return value saved to $conn_id is not null
if {[catch {connect -timeout 1000 -idle 30 -status conn_status sideband_virtual_server} conn_id] == 0 && $conn_id ne ""}{
    log local0. "Connect returns: $conn_id and conn status: $conn_status"
} else {
    log local0. "Connection could not be established to sideband_virtual_server"
}

Hi Kevin,

I already have this piece of code in my irules.I guess my issue wasnt clear to you.

The customer already has a bigIP set up that is connected to the customers pool.We are adding a mirroring Virtual server in the management portal that is connected to one of our pools.So the irules on the customer BigIP virtual server connects to our mirroring server and sends the request as soon a client sends a request to the customer website via the customer's  BIGIP load balancer.

However if our Virtual server or the pool goes down or fails the customer set up gets error as for a short amount of time the requests from the client(user)to the customer website will get a ECONNRESET.We want to avoid this issue so that any failure on our end doesnt cause any issue for the customer website.

Could you please suggest if  theres a way out.

Hi Kevin,

Our set up has a BigIP F5 that is connected to a customer website in a pool.The client places a request to the wesite via this BIG IP LTM and receives a response.We have irules that connect to the helper VS that to mirror the request and response

We also have a helper VS in the environment.We use this Helper VS to establish a sideband connection to our pool which receives the mirrored request and response to the main BIG IP load balancer.

 

However if the server in our pool goes down then for a small amount of time the requests coming to the customer website via teh BIG IP load balancer is getting interrupted where the client receives a "connection reset " error.This is resullting in stability issue.

 

Is there any way to isolate the connection so that any failure on our pool doesnt cause a connection reset error on the client website?

 

Hard to say without a better understanding of your config and current iRule.

Hi Kevin,

I think i could fix my issue if i can get some help with the following info.

1.How to check if the helper virtual server(not the load balancer virtual server) is down or offline?

2.How to check if the whole pool is down/offline and not just the members.

I have seen certain commands but they specify LB::Status which is the staus of the Load balancer virtual server which is not helping me.

I checked a lot but either its not mentioned anywhere or i may have missed it.

Any idea?

 

 

A few options maybe.

1. Do you have a monitor assigned to the pool? A failed pool should automatically flag the VIP as offline. You may also consider setting the pool's "Action On Service Down" option to Reject.

2. Use the 'active_members' condition in an iRule:

when CLIENT_ACCEPTED {
  if { [active_members sideband_pool] < 1 } {
    reject
  }
}

Hi Kevin,

Please find my answers to your question sbelow:-

1. Do you have a monitor assigned to the pool? A failed pool should automatically flag the VIP as offline. You may also consider setting the pool's "Action On Service Down" option to Reject.

Yes.However our pool has an ec2 node that stays green even when the service is down as seen in the below image.Hence the member check fails.

PoolMembers.JPG

Which brings me to your next question

2. Use the 'active_members' condition in an iRule:

I already have this rule enabled but this fails due to the above mentioned issue.

Not only this, the problem is that i need to handle the send command error so that the moment any TCP error happens while the traffic is mirrored from the LB to the external mirror pool, the exception is thrown and the execution stops thereby  allowing the traffic to move to the client website

when HTTP_RESPONSE{

set send_data [send -timeout $connectionTimeout -status send_status $conn_id $responseData]

close conn_id ;

}