Alex,
I'm not really knowledgable enough about anycast to say anything useful. The only is
that in your described setup, I cannot really see how you get around the UA behind
restricted (or worse) NAT.
I have never tried to configure SER as a forking proxy, but I wouldn't be
surprised if it was possible.
g-)
---- Original Message ----
From: Alex Vishnev
To: serusers(a)lists.iptel.org
Sent: Monday, April 11, 2005 02:30 PM
Subject: RE: LVS, load balancing, and stickness was ==> Re: [Serusers]
moreusrloc synchronization
Greger and Paul,
I think you understood me correctly regarding forking proxy. It is
the proxy that will fork out the requests to all available peering
proxies. This approach does not require stickiness based on Call-id.
AFAIK, once the forking proxy receives an acknowledgement from one of
its peers, then the rest of the session will be done directly to that
peer without the use of the forking proxy. I am considering 2
approaches to resolve availability of forking proxy. 1 - using
ANYCAST (good high level article:
http://www.kuro5hin.org/story/2003/12/31/173152/86). 2 - using dns
srv. I am still trying to determine if ANYCAST is a good solution for
creating local RPs with forking proxy. However, I think that dns srv
records can easily be implemented to allow simple round robin between
multiple forking proxies. Thoughts?
Alex
From: serusers-bounces(a)iptel.org [mailto:serusers-bounces@lists.iptel.org]
On Behalf Of Greger V. Teigre
Sent: Monday, April 11, 2005 4:47 AM
To: kramarv(a)yahoo.com
Cc: serusers(a)lists.iptel.org
Subject: LVS, load balancing, and stickness was ==> Re: [Serusers]
more usrloc synchronization
After my last email, I looked at ktcpvs and realized I ignored a
couple of things: ktcpvs only supports tcp (http is obviously
tcp-based, but I thought it supported udp for other protocols). I
don't know how much work implementing udp would be.
Here is a discussion of SIP and LVS that I found useful (though
not encouraging).
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services_that_dont_w…
Paul: I'm starting to get really curious on the standard LVS
components used for your stickiness! I'm not aware (also after
searching now) of an LVS balancing mechanism that allows correct
stickness on SIP udp...!
And I found other too who are looking for it:
http://archive.linuxvirtualserver.org/html/lvs-users/2005-02/msg00251.html
My understanding is that ipvs must be extended (according to the
developer) with a call-id based scheduler and that this work has
several people willing to fund development, but that this has not(?)
started yet. The problem is that ipvs is based on ip header analysis
and extending the hashing algorithms to also include payload-based
analysis is not straight-forward.
g-)
With regards to stickiness: Have you looked at
ktcpvs? 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. If you cannot use it
right out of the box, I'm pretty sure the modifications are minimal.
The user location problem: With a cluster back-end, I also only
see save_memory() as the only option.
g-)
> "Greger V. Teigre" <greger(a)teigre.com> wrote:
>> Greger, thanks a lot.
>> The problem with load balancer is that replies goes to the wrong
>> server due to rewriting outgoing a.b.c.d . BTW, as Paul pointed, if
>> you define some dummy interface with Virtual IP (VIP), there is no
>> need to rewrite outgoing messages (I tested this a little).
>
>
> Yes, if you use LVS with direct routing or tunneling, that is what
> you experience.
> ===Of course. That why I implemented small "session" stickness.
> However, it causes additional internal traffic.
>
> What I described was a "generic" SIP-aware load balancer where SIP
> messages would be rewritten and stickiness implemented based on ex.
> UA IP address (or call-id like vovida's load balancer).
> ====Sure, it's better solution; I think we'll go this way soon (in
> our next version).
>
>> Why DNS approach is bad (except restricted NAT - let's say I am
>> solving this)?
>
> Well, IMO, DNS SRV in itself is not bad. It's just that many user
> clients do not support DNS SRV yet. Except that, I like the concept
> and it will give you a geographical redundancy and load balancing.
> ===I am trying to build the following architecture:
>
> DNS (returns domain's public IP)->LVS+tunneling (Virtual IP)->ser
> clusters (with private IPs)
>
>>
>
>>
> DB
> (MySQL 4.1 cluster)
>
>> I guess, Paul utilizes load-balancer scenario you have described.
>> Believe there are only proprietary solutions for
>> "the-replies-problem". We tried Vovida call-id-persistence package,
>> unfortunately it didn't work for us.
>
> Are you referring to the load balancer proxy? IMHO, the SIP-aware
> load balancer makes things a bit messy. It sounds to me that the
> LVS + tunneling/direct routing + virtual IP on dummy adapter is a
> better solution.
>
>> In my configuration I use shared remote DB cluster (with
>> replication). Each ser see it as one-public-IP (exactly the
>> approach you named for SIP). May be it's good idea to use local DB
>> clusters, but if you have more than 2 servers your replication
>> algorythm gonna be complex. Additional problem - it still doesn't
>> solve usrloc synchronization - you still have to use
>> t_replicate()...
>
>
> I'm not sure if I understand.
> ===Oh, probably I expressed myself not well enough...
>
> So, you have 2 servers at two location, each location with a shared
> DB and then replication across an IPsec tunnel??
> IMHO, mysql 3.23.x two-way replication is quite shaky and
> dangerous to rely on. With no locking, you will easily get
> overwrites and you have to be very sure that your application
> doesn't mess up the DB. I haven't looked at mysql 4.1 clustering,
> but from the little I have seen, it looks good. Is that what you
> use?
>
> ===We have 2 or more servers with MysQL 4.1 virtual server (clusters
> balanced by LVS). We use MySQL for maintaining subscribers'
> accounts, not for location. User location is still in-memory only
> so far. I am afraid I have to switch to ser 09 in order to use
> save_memory (thanks Paul!) and forward_tcp() for replication.
>
>> With regard to t_replicate() - it doesn't work for more than 2
>> servers, so I used exactly forward_tcp() and save_noreply() (you're
>> absolutely right - this works fine so far); all sers are happy. Of
>> course, this causes additional traffic. Interesting whether Paul's
>> FIFO patch reduces traffic between sers?
>
> I believe Paul uses forward_tcp() and save_memory() to save the
> location to the replicated server's memory, while the
> save("location") on the primary server will store to the DB (which
> then replicates on the DB level).
> g-)
>
>
>
>
>
> Do you Yahoo!?
> Yahoo! Small Business - Try our new resources site!
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers