LVS, load balancing, and stickness was ==> Re: [Serusers] moreusrloc synchronization
Greger V. Teigre
greger at teigre.com
Tue Apr 12 12:20:35 CEST 2005
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 at 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 at iptel.org [mailto:serusers-bounces at lists.iptel.org]
> On Behalf Of Greger V. Teigre
> Sent: Monday, April 11, 2005 4:47 AM
> To: kramarv at yahoo.com
> Cc: serusers at 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_work_yet.html
>
> 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 at 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 at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20050412/53a966ed/attachment.htm>
More information about the sr-users
mailing list