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
- Remote SIP client configures the LB VIP as the SIP proxy and
registers
- the citrix LB gets the registrations and forwards to the active
openser (say, openser_1)
- openser_1 stores the contact as MIP:port in the mysql database
- 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
- call (INVITE) is generated from asterisk and sent to LB VIP
- the citrix LB gets the INVITE and forwards to the active openser
(say, openser_1)
- 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
- call (INVITE) is generated from asterisk and sent to LB VIP
- the citrix LB gets the INVITE and forwards to the openser now
active (openser_2)
- 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