<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 11">
<meta name=Originator content="Microsoft Word 11">
<link rel=File-List href="cid:filelist.xml@01C53E70.B65A07E0">
<link rel=Edit-Time-Data href="cid:editdata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PersonName"/>
<!--[if gte mso 9]><xml>
 <o:OfficeDocumentSettings>
  <o:DoNotRelyOnCSS/>
 </o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:SpellingState>Clean</w:SpellingState>
  <w:GrammarState>Clean</w:GrammarState>
  <w:DocumentKind>DocumentEmail</w:DocumentKind>
  <w:EnvelopeVis/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
 </w:LatentStyles>
</xml><![endif]--><!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;
        mso-font-charset:0;
        mso-generic-font-family:swiss;
        mso-font-pitch:variable;
        mso-font-signature:1627421319 -2147483648 8 0 66047 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-parent:"";
        margin:0in;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:12.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;
        text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;
        text-underline:single;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        mso-style-noshow:yes;
        mso-ansi-font-size:10.0pt;
        mso-bidi-font-size:10.0pt;
        font-family:Arial;
        mso-ascii-font-family:Arial;
        mso-hansi-font-family:Arial;
        mso-bidi-font-family:Arial;
        color:navy;}
span.SpellE
        {mso-style-name:"";
        mso-spl-e:yes;}
span.GramE
        {mso-style-name:"";
        mso-gram-e:yes;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;
        mso-header-margin:.5in;
        mso-footer-margin:.5in;
        mso-paper-source:0;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */ 
 table.MsoNormalTable
        {mso-style-name:"Table Normal";
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0in 5.4pt 0in 5.4pt;
        mso-para-margin:0in;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";
        mso-ansi-language:#0400;
        mso-fareast-language:#0400;
        mso-bidi-language:#0400;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body bgcolor=white lang=EN-US link=blue vlink=blue style='tab-interval:.5in'>

<div class=Section1>

<p class=MsoNormal><span class=SpellE><font size=2 color=navy face=Arial><span
style='font-size:10.0pt;font-family:Arial;color:navy'>Greger</span></font></span><font
size=2 color=navy face=Arial><span style='font-size:10.0pt;font-family:Arial;
color:navy'> and Paul,<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>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 <span class=GramE>2 <span
style='mso-spacerun:yes'>&nbsp;</span>approaches</span> to resolve availability
of forking proxy. 1 &#8211; <span class=GramE>using</span> ANYCAST (good high
level article: <a href="http://www.kuro5hin.org/story/2003/12/31/173152/86">http://www.kuro5hin.org/story/2003/12/31/173152/86</a>).
2 &#8211; <span class=GramE>using</span> <span class=SpellE>dns</span> <span
class=SpellE>srv</span>. I am still trying to determine if ANYCAST is a good
solution for creating local <span class=SpellE>RPs</span> with forking proxy.
However, I think that <span class=SpellE>dns</span> <span class=SpellE>srv</span>
records can easily be implemented to allow simple round robin between multiple
forking proxies. <span class=GramE>Thoughts?</span><o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Alex<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
serusers-bounces@iptel.org [mailto:serusers-bounces@lists.iptel.org] <b><span
style='font-weight:bold'>On Behalf Of </span></b>Greger V. Teigre<br>
<b><span style='font-weight:bold'>Sent:</span></b> Monday, April 11, 2005 4:47
AM<br>
<b><span style='font-weight:bold'>To:</span></b> kramarv@yahoo.com<br>
<b><span style='font-weight:bold'>Cc:</span></b> <st1:PersonName w:st="on">serusers@lists.iptel.org</st1:PersonName><br>
<b><span style='font-weight:bold'>Subject:</span></b> LVS, load balancing, and
stickness was ==&gt; Re: [Serusers] more usrloc synchronization</span></font><o:p></o:p></p>

</div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>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).&nbsp; I don't know how much work
implementing udp would be.<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>&nbsp;&nbsp;&nbsp; Here is a discussion of SIP and LVS that I found
useful (though not encouraging).<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><a
href="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services_that_dont_work_yet.html">http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.services_that_dont_work_yet.html</a><o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>&nbsp;<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>Paul: I'm starting to get really curious on the standard LVS components
used for your stickiness!&nbsp; I'm not aware (also after searching now) of an
LVS balancing mechanism that allows correct stickness on SIP udp...!<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>And I found other too who are looking for it:<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><a
href="http://archive.linuxvirtualserver.org/html/lvs-users/2005-02/msg00251.html">http://archive.linuxvirtualserver.org/html/lvs-users/2005-02/msg00251.html</a><o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>&nbsp;<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>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.&nbsp; 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. <o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>g-)<o:p></o:p></span></font></p>

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'>&nbsp;<o:p></o:p></span></font></p>

</div>

<div>

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

</div>

</div>

</body>

</html>