Forum Discussion

Peter_129679's avatar
Peter_129679
Icon for Nimbostratus rankNimbostratus
Jun 19, 2014

MBLB connection Question, Please Help!

Hi, I'm using iRule to do MBLB on ISO8583.

 

But there is an error regarding the server behavior and connection. Here's the picture:

 

 

1 Client with source port 57404 send 5 message to BIG IP VS (Profile: TCP, MBLB), and BIG IP distribute those messages via MBLB to the ISO Servers.

 

But the serverside connection is not multiplexed, BIG IP make 3 connection to ISO Server1 and 2 connection to ISO Server2

 

Unfortunately the ISO_Servers can only accept ISO message from 1 connection only.

 

So is there is a way to make BIG IP do multiplexing on the serverside, which is 1 connection to ISO Server1 and 1 connection to ISO Server2? and is this a normal behavior of MBLB?

 

Thanks!

 

3 Replies

  • can you post the virtual server, profile (if not default) and irule configuration?

     tmsh list ltm virtual (name)
     tmsh list ltm profile mblb (name)
     tmsh list ltm rule (name)
    
  • Peter1's avatar
    Peter1
    Icon for Nimbostratus rankNimbostratus

    the vs (snat auto-map, cmp disable) and mblb use default.

    when CLIENT_ACCEPTED { LB::context_id "all_clients" TCP::collect }

    when CLIENT_DATA { if { [TCP::payload length] >= 4 } { binary scan [TCP::payload] H* iso_msg set msg_len [expr 0x[string range $iso_msg 0 3]] log local0. "Full message in hex: ${iso_msg}" log local0. "ISO message payload length is $msg_len bytes" set msg_len [expr {$msg_len + 2}] log local0. "Full message (header+payload) length is $msg_len bytes"

        if { [TCP::payload length] >= $msg_len }
        {
            TCP::release $msg_len
            TCP::notify request
        }
    }
    TCP::collect
    

    }

    when SERVER_CONNECTED { log local0. "Server Connected !!" TCP::collect }

    when SERVER_DATA { TCP::release TCP::notify response TCP::collect }

  • Peter1's avatar
    Peter1
    Icon for Nimbostratus rankNimbostratus
    when CLIENT_ACCEPTED
    {
       LB::context_id "all_clients"
        TCP::collect
    }
    
    when CLIENT_DATA {
       if { [TCP::payload length] >= 4 }
       {
         binary scan [TCP::payload] H* iso_msg
           set msg_len [expr 0x[string range $iso_msg 0 3]]
            set msg_len [expr {$msg_len + 2}]
    
           if { [TCP::payload length] >= $msg_len }
            {
               TCP::release $msg_len
               TCP::notify request
         }
       }
       TCP::collect
    }
    
    when SERVER_CONNECTED
    {
         TCP::collect
    }
    
    when SERVER_DATA
    {
        TCP::release
        TCP::notify response
        TCP::collect
    }