PDA

Bekijk Volledige Versie : één website, twee IP adressen (één als failover/fallback)



molski
08/06/08, 17:17
Hi,

Hoe kan ik één website beschikbaar krijgen via 2 ip adressen, waarvan IP adres nr. 2 moet dienen als fallback voor als IP nr. 1 niet bereikbaar is.

Ik heb e.e.a. gelezen over Round Robin, maar die kijkt niet of een IP wel beschikbaar is, die deelt ze 'random' uit zeg maar, tevens cached die e.e.a. dus het is niet real-time.

Moet ik nou echt meteen gaan zitten denken aan een 2e server of een switch die dit kan gaan regelen, of is er nog een ander (software matig) alternatief?

Lite-On
08/06/08, 17:42
Waarschijnlijk heb je een loadbalancer nodig, om zoiets te realiseren.
Ik neem aan dat alles ook op een enkele server komt te draaien?


Round Robin deelt inderdaad de aanvragen random uit.
Niet altijd even ideaal voor elke situatie ;)

molski
08/06/08, 18:26
Alles komt inderdaad op één server. Is er nog een bepaalde voorkeur voor een bepaalde hardware/software loadbalancer, of ligt dat vaak gewoon aan het budget?

Het gaat om welgeteld 1 domein wat ik op 2 IP's beschikbaar wil hebben, probleem is momenteel dat de servers niet fysiek naast elkaar staan, de server waar de backups heen gaan en nu dus dit ene domein op draait (als backup), staat in een ander DC....een (hardwarematige) loadbalancer wordt dan wat moeilijk niet? :)

Kan ik niet een server als loadbalancer inrichten en daar ook dat ene domein op draaien (nog steeds als fallback)? Als OS gaat mijn voorkeur momenteel uit naar CentOS 5 (of RHEL5 eventueel), tevens denk ik dat het aanbod software loadbalancers groter is met Linux/UNIX dan met Windows, of zit ik nu helemaal mis? ;)

oehTie
08/06/08, 20:36
als alles op 1 server staat en op ip niet te bereiken is, is het een netwerktechnisch probleem. Waarom zou een ander ip op de zelfde server wel werken? Zorg iig dat je een ip uit een ander subnet krijgt anders heeft de opstelling geen nut (correct me if i'm wrong)

molski
08/06/08, 20:57
als alles op 1 server staat en op ip niet te bereiken is, is het een netwerktechnisch probleem. Waarom zou een ander ip op de zelfde server wel werken? Zorg iig dat je een ip uit een ander subnet krijgt anders heeft de opstelling geen nut (correct me if i'm wrong)

1e IP Adres: Primaire website (laten we maar zeggen)
2e IP Adres: Andere server, ander DC, ander IP/Subnet/Gateway

Als het 1e IP niet bereikbaar is, dan moet de 2e actief worden, failover IP zeg maar.
Hardware loadbalancer kan dit, maar dan moeten server 1 en server 2 (dus IP 1 en IP 2) in hetzelfde rack zitten, software loadbalancer kan wel, maar dan moet ik een extra server gaan plaatsen.

oehTie
08/06/08, 21:25
1e IP Adres: Primaire website (laten we maar zeggen)
2e IP Adres: Andere server, ander DC, ander IP/Subnet/Gateway

Als het 1e IP niet bereikbaar is, dan moet de 2e actief worden, failover IP zeg maar.
Hardware loadbalancer kan dit, maar dan moeten server 1 en server 2 (dus IP 1 en IP 2) in hetzelfde rack zitten, software loadbalancer kan wel, maar dan moet ik een extra server gaan plaatsen.

ok dan werkt het idd wel, zo hoort de opstelling ook. naar aanleiding van vorige posts dacht ik dat je alles op 1 server wilde hebben maar toch met 2 ip's.

Is het geen optie de primaire met een korte ttl in dns te zetten? of maakt dit voor de bereikbaarheid niets uit?

molski
08/06/08, 21:50
Nope, het moet echt real-time, dus als op server 1 een "/etc/init.d/httpd stop" gegeven wordt, moet server 2 het direct overnemen.

Oplossing is dus duidelijk, fallback server erbij en een hardwarematig loadbalancer gebruiken, of een nieuwe server erbij en die als loadbalancer gaan gebruiken.

Mensen ik ben er nog niet helemaal uit, maar weet welke opties ik heb, allen bedankt!


Molski

Ahmed
09/06/08, 00:16
Het wordt leuker als de website ook een database gebruikt... Hoe ga je de database op de twee servers synchroniseren enz...

molski
09/06/08, 01:27
Dat doet die in dit geval ook, het is alleen een DB die je 1x instelt en er dan nooit meer iets aan hoeft te wijzigen. Zit je met een DB die continu gesynced moet worden, kan je het beste gaan clusteren denk ik zo, maar in dit geval is dat niet nodig.

Randy
09/06/08, 01:45
MySQL Master-Master replicatie gebruiken. Niet zo moeilijk op te zetten.

Xolphin
09/06/08, 02:39
Het nadeel van een load balancer is dat deze ook onbereikbaar kan zijn. Als je MySQL master-master gebruikt zou ik DNS Round Robin load balancing gaan doen. De load wordt niet helemaal netjes verdeeld, maar met veel verschillende bezoekers gaat het vrij redelijk.

Een failover heb je dan nog niet, maar dit is vrij makkelijk te maken. Je kunt een script maken wat detecteerd welke server down is, en wat vervolgens deze server uit de Round Robin DNS laat halen.

molski
09/06/08, 08:29
Hmmm....klinkt interessant, ik zal eens verder gaan kijken naar de mogelijkheden die net beschreven staan....thanks!

Randy
09/06/08, 11:01
Als je met slechts twee servers werkt, kun je de loadbalancing prima op deze beide machines doen. In het verleden hebben we dit wel eens toegepast bij een grote webshop om piekmomenten op te vangen na campagnes. Ik ben de naam van het pakketje even kwijt... Wilco, kom er maar in.

WilloW
09/06/08, 11:03
Met Haproxy kun je wel leuke dingen doen en is redelijk simpel

http://haproxy.1wt.eu/
En een howto staat op http://howtoforge.com/haproxy_loadbalancer_debian_etch

crazycoder
09/06/08, 11:03
Een failover heb je dan nog niet, maar dit is vrij makkelijk te maken. Je kunt een script maken wat detecteerd welke server down is, en wat vervolgens deze server uit de Round Robin DNS laat halen.
Waarna de cache op de diverse clients/dns servers je nog een tijdje blijft achtervolgen :)

molski
09/06/08, 11:05
Ik kwam gister een review op linux.com tegen van het pakketje "balance".
Simpele Linux CLI Tool, die ald LoadBalancer en/of Failover kan werken, bedoel je die soms? :)

Maar als de server waar de balancer op staat plat gaat, hoe kan die hem dan naar het 2e IP doorzetten, server 1 en daarmee ook de loadbalancer is immers plat?
Of wordt de loadbalancer op beide boxen geinstalleerd? En merkt die zelf of de Primary/Failover server wel of niet plat ligt?

WilloW
09/06/08, 11:14
zou persoonlijk voor 2 servertjes geen loadbalancing software gebruiken maar gewoon heartbeat met drbd om je data op beide machines gelijk te houden. "drbd is een soort raid 1 over netwerk"

molski
09/06/08, 12:32
zou persoonlijk voor 2 servertjes geen loadbalancing software gebruiken maar gewoon heartbeat met drbd om je data op beide machines gelijk te houden. "drbd is een soort raid 1 over netwerk"

Okay, maar dan zal je toch nog steeds software moeten hebben die detecteert of die Primaire IP (laten we maar zeggen) up of down is en als die down is doorzetten naar het secundaire IP, of regelt die software dit ook?

PimEffting
09/06/08, 12:52
Volgens mij ben je op zoek naar het programma Heartbeat in combinatie met ip takeover?

molski
09/06/08, 13:21
Volgens mij ben je op zoek naar het programma Heartbeat in combinatie met ip takeover?

Zou heel goed kunnen :)
Maar wat ik niet helemaal snap is het volgende:

De machines merken via een heartbeat of er eentje plat is of niet, zodat de ander het overneemt indien nodig. Beide machines hebben een ander IP, hoe werkt de failover dan precies, welke machine stuurt dat aan en wat als die machine nou down gaat?


In ieder geval bedankt voor alle berichten, hulp en advies tot dusver mensen!!

Mikey
09/06/08, 13:24
misschien dat je de website eens moet bekijken, daarin staat namelijk precies uitgelegd hoe de werking ervan is...

johan.smits
09/06/08, 13:32
Ik zou zelf het volgende doen:
Op beide machines installeer je keepalived waarop ze beide controleren of ze zelf actief zijn.
Op server 1 loadbalance je hem naar localhost en dan naar server 2
Mocht server 2 nu uitvallen zal server 2 het ipadres van server 1 up maken en enkel naar zichzelf loadbalancen.
Komt server 1 weer up zal deze het eigen adres weer overnemen van server 2 en beginnen met loadbalancen.
Voor mysql zou ik master to master doen zoals Xolphin al aangaf.
Hoe wil je de file structuur in sync houden?

molski
09/06/08, 14:07
Ik zou zelf het volgende doen:
Op beide machines installeer je keepalived waarop ze beide controleren of ze zelf actief zijn.
Op server 1 loadbalance je hem naar localhost en dan naar server 2
Mocht server 2 nu uitvallen zal server 2 het ipadres van server 1 up maken en enkel naar zichzelf loadbalancen.
Komt server 1 weer up zal deze het eigen adres weer overnemen van server 2 en beginnen met loadbalancen.
Voor mysql zou ik master to master doen zoals Xolphin al aangaf.
Hoe wil je de file structuur in sync houden?

Klinkt goed, ik zal er morgen (vanavond is voetbal :) ) naar gaan kijken!
Files syncen is niet nodig, alleen de DB die zal ge-update worden.
Mocht ik eens een keer een file veranderen, dan kan ik dit zelf wel even manueel doen, het gaat immers maar om één website.

gjtje
09/06/08, 17:45
Dit kan dus wel alleen binnen hetzelfde netwerk/subnet of je moet je eigen routering gaan doen maar ook dan is het niet meer real time. Je kan niet zomaar een IP de wereld overfietsen.

Randy
09/06/08, 18:34
Ga hier eerst eens mee spelen: http://www.howtoforge.net/howtos/high-availability

johan.smits
09/06/08, 19:15
Dit kan dus wel alleen binnen hetzelfde netwerk/subnet of je moet je eigen routering gaan doen maar ook dan is het niet meer real time. Je kan niet zomaar een IP de wereld overfietsen.

Inderdaad. Dit was ik vergeten te zeggen. Maar zoals molski omschreef leek het zo te zijn.
Indien dit niet het geval is zal failover moeilijk realiseer baar worden zonder echte netwerk aanpassingen te doen.

Xolphin
09/06/08, 23:11
@Randy:

Met HAProxy heb je een geshared IP adres nodig. Dat is een beetje lastig als je de servers in verschillende datacentra hebt hangen.

asusk7m550
10/06/08, 09:03
Zover ik begrijp is het niet mogelijk om dit te doen zoals je wilt.

Dit omdat je niet een ipadres naar een andere locatie kunt verplaatsen (zonder al te veel problemen). Dit is volgens mij alleen op te lossen door middel van DNS (icm een lage TTL) maar dan is er altijd de mogelijkheid dat een client (of andere caching DNS server) dit niet goed overneem en de website daardoor toch niet bereikbaar is.

Je kunt ook denken aan een proxy server die zelf detecteerd waar die naar toe moet, maar ook dan heb je er weer 1 server tussen die uit kan vallen.

Als oplossing zou je het volgende kunnen doen:

In het 1e DC heb je de 1e webserver en de proxy server staan.
In het 2e DC heb je de 2e webserver staan.

Je laat de website op de proxyserver uitkomen. Deze houd de status van de 2 webservers in de gaten en haalt vanaf de juiste server de content.
Op het moment dat de 1e webserver offline gaat wordt de content van de 2e webserver gehaalt. Op het moment dat de proxy server offline gaat laat je de 1e webserver het ipadres van de proxyserver opnemen.

Hierdoor mag 1 vd server uitvallen en blijft alles het wel doen. Op het moment dat het DC uit valt doet de website het niet meer. Is dit een oplossing?

molski
10/06/08, 13:10
Zover ik begrijp is het niet mogelijk om dit te doen zoals je wilt.

Dit omdat je niet een ipadres naar een andere locatie kunt verplaatsen (zonder al te veel problemen). Dit is volgens mij alleen op te lossen door middel van DNS (icm een lage TTL) maar dan is er altijd de mogelijkheid dat een client (of andere caching DNS server) dit niet goed overneem en de website daardoor toch niet bereikbaar is.

Je kunt ook denken aan een proxy server die zelf detecteerd waar die naar toe moet, maar ook dan heb je er weer 1 server tussen die uit kan vallen.

Als oplossing zou je het volgende kunnen doen:

In het 1e DC heb je de 1e webserver en de proxy server staan.
In het 2e DC heb je de 2e webserver staan.

Je laat de website op de proxyserver uitkomen. Deze houd de status van de 2 webservers in de gaten en haalt vanaf de juiste server de content.
Op het moment dat de 1e webserver offline gaat wordt de content van de 2e webserver gehaalt. Op het moment dat de proxy server offline gaat laat je de 1e webserver het ipadres van de proxyserver opnemen.

Hierdoor mag 1 vd server uitvallen en blijft alles het wel doen. Op het moment dat het DC uit valt doet de website het niet meer. Is dit een oplossing?

Kijk.....dit klinkt goed, mooie oplossing, ik ga e.e.a. in beraad nemen.
Daarnaast ga ik even spelen met de genoemde tools in de diverse posts.

Ik heb voorlopig weer even iets te doen :)

deCube
10/06/08, 15:42
Zover ik begrijp is het niet mogelijk om dit te doen zoals je wilt.

Dit omdat je niet een ipadres naar een andere locatie kunt verplaatsen (zonder al te veel problemen). Dit is volgens mij alleen op te lossen door middel van DNS (icm een lage TTL) maar dan is er altijd de mogelijkheid dat een client (of andere caching DNS server) dit niet goed overneem en de website daardoor toch niet bereikbaar is.

Je kunt ook denken aan een proxy server die zelf detecteerd waar die naar toe moet, maar ook dan heb je er weer 1 server tussen die uit kan vallen.

Als oplossing zou je het volgende kunnen doen:

In het 1e DC heb je de 1e webserver en de proxy server staan.
In het 2e DC heb je de 2e webserver staan.

Je laat de website op de proxyserver uitkomen. Deze houd de status van de 2 webservers in de gaten en haalt vanaf de juiste server de content.
Op het moment dat de 1e webserver offline gaat wordt de content van de 2e webserver gehaalt. Op het moment dat de proxy server offline gaat laat je de 1e webserver het ipadres van de proxyserver opnemen.

Hierdoor mag 1 vd server uitvallen en blijft alles het wel doen. Op het moment dat het DC uit valt doet de website het niet meer. Is dit een oplossing?

Als het 1e DC dan uitvalt staat de 2e webserver in het 2e DC uit zijn neus te vreten terwijl deze wel ingezet _zou kunnen_ worden. Als er hier nog een oplossing voor is ben je klaar. (zelf heb ik geen idee :o)