<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2604" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV>With regards to stickiness: Have you looked at ktcpvs?&nbsp; SIP is an 
"http-like" protocol and I'm pretty sure that you can use the http-based regex 
hashing to search for Call-Id.&nbsp; If you cannot use it right out of the box, 
I'm pretty sure the modifications are minimal.</DIV>
<DIV>&nbsp;&nbsp;&nbsp; The user location problem: With a cluster back-end, I 
also only see save_memory() as the only option.</DIV>
<DIV>g-)</DIV>
<DIV>&nbsp;</DIV>
<DIV>&gt; "Greger V. Teigre" &lt;greger@teigre.com&gt; wrote:<BR>&gt;&gt; 
Greger, thanks a lot.<BR>&gt;&gt; The problem with load balancer is that replies 
goes to the wrong<BR>&gt;&gt; server due to rewriting outgoing a.b.c.d . BTW, as 
Paul pointed, if<BR>&gt;&gt; you define some dummy interface with Virtual IP 
(VIP), there is no<BR>&gt;&gt; need to rewrite outgoing messages (I tested this 
a little).<BR>&gt; <BR>&gt; <BR>&gt; Yes, if you use LVS with direct routing or 
tunneling, that is what<BR>&gt; you experience. <BR>&gt; ===Of course. That why 
I implemented small "session" stickness.<BR>&gt; However, it causes additional 
internal traffic. <BR>&gt; <BR>&gt;&nbsp; What I described was a "generic" 
SIP-aware load balancer where SIP<BR>&gt; messages would be rewritten and 
stickiness implemented based on ex.<BR>&gt; UA IP address (or call-id like 
vovida's load balancer).&nbsp; <BR>&gt; ====Sure, it's better solution; I think 
we'll go this way soon (in<BR>&gt; our next version). <BR>&gt; <BR>&gt;&gt; Why 
DNS approach is bad (except restricted NAT - let's say I am<BR>&gt;&gt; solving 
this)?<BR>&gt; <BR>&gt; Well, IMO, DNS SRV in itself is not bad. It's just that 
many user<BR>&gt; clients do not support DNS SRV yet.&nbsp; Except that, I like 
the concept<BR>&gt; and it will give you a geographical redundancy and load 
balancing.&nbsp; <BR>&gt; ===I am trying to build the following 
architecture:<BR>&gt; <BR>&gt; DNS (returns domain's public 
IP)-&gt;LVS+tunneling (Virtual IP)-&gt;ser<BR>&gt; clusters (with private IPs) 
<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&gt; | 
<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<BR>&gt; | 
<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
DB<BR>&gt; (MySQL 4.1 cluster) <BR>&gt; <BR>&gt;&gt; I guess, Paul utilizes 
load-balancer scenario you have described.<BR>&gt;&gt; Believe there are only 
proprietary solutions for<BR>&gt;&gt; "the-replies-problem". We tried Vovida 
call-id-persistence package,<BR>&gt;&gt; unfortunately it didn't work for 
us.<BR>&gt; <BR>&gt; Are you referring to the load balancer proxy? IMHO, the 
SIP-aware<BR>&gt; load balancer makes things a bit messy.&nbsp; It sounds to me 
that the LVS<BR>&gt; + tunneling/direct routing + virtual IP on dummy adapter is 
a better<BR>&gt; solution.&nbsp;&nbsp; <BR>&gt; <BR>&gt;&gt; In my configuration 
I use shared remote DB cluster (with<BR>&gt;&gt; replication). Each ser see it 
as one-public-IP (exactly the approach<BR>&gt;&gt; you named for SIP). May be 
it's good idea to use local DB clusters,<BR>&gt;&gt; but if you have more than 2 
servers your replication algorythm gonna<BR>&gt;&gt; be complex. Additional 
problem - it still doesn't solve usrloc<BR>&gt;&gt; synchronization - you still 
have to use t_replicate()...<BR>&gt; <BR>&gt; <BR>&gt; I'm not sure if I 
understand.<BR>&gt; ===Oh, probably I expressed myself not well 
enough...<BR>&gt; <BR>&gt; So, you have 2 servers at two location, each location 
with a shared<BR>&gt; DB and then replication across an IPsec tunnel?? 
<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; IMHO, mysql 3.23.x two-way replication is quite 
shaky and<BR>&gt; dangerous to rely on.&nbsp; With no locking, you will easily 
get<BR>&gt; overwrites and you have to be very sure that your application 
doesn't<BR>&gt; mess up the DB.&nbsp; I haven't looked at mysql 4.1 clustering, 
but from<BR>&gt; the little I have seen, it looks good. Is that what you 
use?&nbsp;&nbsp;&nbsp; <BR>&gt; <BR>&gt; ===We have 2 or more servers with MysQL 
4.1 virtual server (clusters<BR>&gt; balanced by LVS). We use MySQL for 
maintaining subscribers' accounts,<BR>&gt; not for location. User location is 
still in-memory only so far. I am<BR>&gt; afraid I have to switch to ser 09 in 
order to use save_memory (thanks<BR>&gt; Paul!) and forward_tcp() for 
replication.&nbsp;&nbsp;&nbsp; <BR>&gt; <BR>&gt;&gt; With regard to 
t_replicate() - it doesn't work for more than 2<BR>&gt;&gt; servers, so I used 
exactly forward_tcp() and save_noreply() (you're<BR>&gt;&gt; absolutely right - 
this works fine so far); all sers are happy. Of<BR>&gt;&gt; course, this causes 
additional traffic. Interesting whether Paul's<BR>&gt;&gt; FIFO patch reduces 
traffic between sers?<BR>&gt; <BR>&gt; I believe Paul uses forward_tcp() and 
save_memory() to save the<BR>&gt; location to the replicated server's memory, 
while the<BR>&gt; save("location") on the primary server will store to the DB 
(which<BR>&gt; then replicates on the DB level).&nbsp;&nbsp; <BR>&gt; 
g-)<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; Do you Yahoo!?<BR>&gt; 
Yahoo! Small Business - Try our new resources site!</DIV></BODY></HTML>