Thanks Patrick,

I have re-configured a common database for the servers and I am still having the same issues. Can this be an issue with PAT at the Load balancer after failover since the INVITE is coming from  openser_2 and going to the same IP:port associated with openser_1.

I am also open to trying other methods to achieve OpenSER registrar HA if any available.

Thanks.

Buki A
 

---------- Forwarded message ----------
From: Patrick Miccio <pmiccio@upcbroadband.com>
To: <users@lists.openser.org>
Date: Thu, 6 Mar 2008 11:04:40 +0100
Subject: Re: [OpenSER-Users] issue - remote sip client must re-register after failover in Openser Registrar HA config
Hi,

you need to have a common mysql table for the registrations so that when OpenSER_2 taks over it has the informations
OpenSER_1 wrote in the DB.

you can achieve this with a single mysql server, or better with a cluster ;)


cheers,

Patrick.


> Hi friends,
>
> I am having problems setting up seamless openser registrar failover. I am trying to setup OpenSER registrar HA using
> 2 openser registrars v1.3.0 behind a Netscaler citrix Load balancer and I cant get the failover scenario to work
> without re-registration of the remote sip client.
>
> I am desperately looking for tips to make this configuration work or any other ideas to achieve SIP registrar HA
> using OpenSER. Thanks.
>
>
>
> The setup is configured as active-passive and the 2nd OpenSER becomes active only after a Openser_1 fails and the LB
> fails-over to the 2nd. The 2 openser servers are SIP registrars for my voice network.
>
> REGISTRATION:
> remote SIP UA ---> remote firewall ---> internet ---> my firewall ---> citrix NA loadbalancer (VIP) ----> openSER_1
>                                                                                                                                          \--->
> openSER_2
>
> 1.   Remote SIP client configures the LB VIP as the SIP proxy and registers
> 2.   the citrix LB gets the registrations and forwards to the active openser (say, openser_1)
> 3.   openser_1 stores the contact as MIP:port in the mysql database
> 4.   openser_1 replicates the registration to openser_2 (t_replicate)
>
> OUT-GOING CALL - before fail-over
> remote SIP UA <--- remote firewall <--- internet <--- my firewall <--- citrix NA loadbalancer (VIP) <----> openSER_1
>                                                                                                                       ^
> openSER_2 |
>                                                                                                                 Asterisk
>
> 1.   call (INVITE) is generated from asterisk and sent to LB VIP
> 2.   the citrix LB gets the INVITE and forwards to the active openser (say, openser_1)
> 3.   openser_1 looks-up the URI in the MySQL database, finds the MIP:port that the registration was received from the
> LB and forwards the INVITE to that destination. 4.   the LB receives the INVITE and forwards it to the remote SIP
> client
>
>
> OUT-GOING CALL - after fail-over
> remote SIP UA ---x remote firewall ---x internet   ---x my firewall ---x citrix NA loadbalancer (VIP) ----x  openSER_1
>                                                                                                                       ^
> \-----<   openSER_2 |
>                                                                                                                 Asterisk
>
> 1.   call (INVITE) is generated from asterisk and sent to LB VIP
> 2.   the citrix LB gets the INVITE and forwards to the openser now active (openser_2)
> 3.   openser_2 looks-up the URI in the MySQL database, finds the same MIP:port of the LB that was replicated from
> openser_1 and forwards the INVITE to that destination. 4.   the LB receives the INVITE and drops the packet without
> forwarding it out to the remote SIP client
>
>
>
> For the outgoing call to work: the remote sip client either has to re-register, so the registration gets passed to
> openser_2. OR, openser_1 is made active again.
>
>
> Configuration of OpenSER:
>
> REGISTRATION:
>                 # If this is a registration from the public UA,
>                 # then we store it
>                 fix_nated_contact(); # use ip address of the packet instead of the sip message
>                 force_rport(); # append rport. might not be necessary
>
>                 # save Registration in location table
>                 save("location");
>                 xlog("L_DBG", "SipMsgId[$mi] Save Registration: To[$tu] Contact[$ct]\n");
>     append_hf("CtlRegFwd: \r\n");
>                 # replicate the register message to the backup registrar
>     # if I am the backup, ignore the message
>                 if(!t_replicate("sip:openser_2:5060")) {
>                     xlog("L_WARN", "SipMsgId[$mi] Fail to replicate Contact[$ct] to fail over registrar\n");
>
> OUTGOING CALL:
>
>             # Do lookup so it gets to the correct NATed destination
>             if (!lookup("location"))
>             {
>                 # this user has not REGISTERed or registration has expired
>                 xlog("L_INFO", "SipMsgId[$mi] Send 404-Not Found (Msg rejected because user not found)\n");
>                 sl_send_reply("404", "Not Found");
>                 exit;
>             };
>
>     # keep track of reply
>     t_on_reply("11");
>     if (!t_relay())
>     {
>         xlog("L_DBG", "SipMsgId[$mi] Failed t_relay. Do sl_reply_error.\n");
>         sl_reply_error();
>     };
>
>
>
> Thank you for your anticipated help.
>
> Regards,
>
> Buki A