{"id":208,"date":"2004-10-29T18:55:48","date_gmt":"2004-10-29T16:55:48","guid":{"rendered":"http:\/\/gnu.inter.it\/blogs\/fabu\/?p=208"},"modified":"2004-10-29T18:55:48","modified_gmt":"2004-10-29T16:55:48","slug":"lvs-dr","status":"publish","type":"post","link":"https:\/\/fabioinvernizzi.com\/blog\/2004\/10\/29\/lvs-dr\/","title":{"rendered":"LVS-DR"},"content":{"rendered":"<p>Ho migrato il clusterone da <a href=\"http:\/\/www.linuxvirtualserver.org\/VS-NAT.html\">LVS-NAT<\/a> a <a href=\"http:\/\/www.linuxvirtualserver.org\/VS-DRouting.html\">LVS-DR<\/a>.<\/p>\n<p>Ora i server non reinoltrano il traffico in uscita al load balancer ma lo girano direttamente al client che ha fatto la richiesta. Questo per evitare il collo di bottiglia sul loadbalancer che, durante le ultime partite ha gi\u00e0 sfiorato un paio di volte i 100Mbit (limite hw della scheda di rete).<\/p>\n<p>Ora il limite \u00e8 imposto solo dal cavo che porta la connettivit\u00e0 al nostro switch. Limite che per\u00f2 \u00e8 superabile portando un fibra o, al limite, un altro cat5 da mettere in trunk con quello che c&#8217;\u00e8 gi\u00e0.<\/p>\n<p>La soluzione Direct-Routing ha il problema che i pacchetti che arrivano ed escono dal server devono apparire sono associati al VIP. Non si pu\u00f2 banalmente creare un ip alias sulla scheda di rete perch\u00e8 risponderebbe agli arp-request cerando di rubare il VIP al load balancer.<\/p>\n<p>Una delle soluzioni adottate richiede una patch al kernel per definire un interfaccia non-arp (l&#8217;opzione noarp in ifconfig\/ip storicamente viene ignorata dal kernel 2.2). Per i kernel 2.6 ci sono un paio di sysctl che possono funzionare a tale scopo, ho trovato un post di un tizio che ha configurato i server con:<br \/>\n<code>net.ipv4.conf.lo.arp_ignore = 1<br \/>\nnet.ipv4.conf.lo.arp_announce = 2<br \/>\nnet.ipv4.conf.all.arp_ignore = 1<br \/>\nnet.ipv4.conf.all.arp_announce = 2<\/code><\/p>\n<p>Ma la soluzione *geniale* \u00e8 quella di usare un REDIRECT di iptables per far accettare il pacchetto senza avere il VIP definito:<br \/>\n<code>iptables -t nat -A PREROUTING -p tcp -d &lt;VIP&gt; --dport &lt;vport&gt; -j REDIRECT --to-port &lt;vport&gt;<\/code><\/p>\n<p>Soluzione spiegata per benino nell&#8217;<a href=\"http:\/\/www.linuxvirtualserver.org\/docs\/arp.html\">HOWTO<\/a>. Peccato che quando l&#8217;avevo letto io no c&#8217;era e mi ricordavo che l&#8217;unica possibilit\u00e0 fosse la patch per il kernel&#8230; fa&#8217; sempre bene andarsi a rileggere la documentazione :-)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ho migrato il clusterone da LVS-NAT a LVS-DR. Ora i server non reinoltrano il traffico in uscita al load balancer ma lo girano direttamente al client che ha fatto la richiesta. Questo per evitare il collo di bottiglia sul loadbalancer che, durante le ultime partite ha gi\u00e0 sfiorato un paio di volte i 100Mbit (limite &hellip; <a href=\"https:\/\/fabioinvernizzi.com\/blog\/2004\/10\/29\/lvs-dr\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">LVS-DR<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[2],"tags":[3],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-me","tag-hacking"],"_links":{"self":[{"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/posts\/208"}],"collection":[{"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/comments?post=208"}],"version-history":[{"count":0,"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabioinvernizzi.com\/blog\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}