Om twee machines in een cluster te laten samenwerken en een maximaal beschikbare service te bieden, zijn verschillende belangrijke componenten en mechanismen vereist:
1. Gedeelde opslag of gegevensreplicatie:
* Gedeelde opslag: Beide machines hebben toegang nodig tot dezelfde opslaglocatie (bijvoorbeeld SAN, NAS, gedeeld bestandssysteem). Hierdoor kan de service naadloos overschakelen naar de andere machine zonder gegevensverlies, omdat de gegevens direct beschikbaar zijn.
* Gegevensreplicatie: Als gedeelde opslag niet haalbaar of wenselijk is, zorgt een mechanisme voor gegevensreplicatie (bijvoorbeeld DRBD, Ceph, gedistribueerde databases met replicatie) voor gegevensconsistentie tussen de twee machines. Eén machine fungeert als primair apparaat, terwijl de andere een gesynchroniseerde kopie bewaart.
2. Clusteringsoftware/framework:
* Deze software beheert het failover-proces, bewaakt de gezondheid van beide machines en zorgt ervoor dat slechts één machine tegelijkertijd de service bedient. Voorbeelden zijn onder meer:
* Pacemaker/Corosync: Een populaire open-source clusteroplossing.
* Blijf leven: Vaak gebruikt voor virtueel IP (VIP)-beheer.
* Hartslag: Nog een open-source oplossing voor hoge beschikbaarheid.
* Eigen oplossingen: Veel leveranciers bieden hun eigen clustersoftware aan, afgestemd op hun hardware en besturingssystemen.
3. Virtueel IP-adres (VIP):
* Aan de dienst wordt één enkel IP-adres toegewezen, beheerd door de clusteringsoftware. Dit IP-adres "zweeft" tussen de twee machines. Wanneer de primaire machine uitvalt, verschuift de clustersoftware de VIP naar de secundaire machine, waardoor de service onmiddellijk weer toegankelijk is.
4. Gezondheidsmonitoring:
* De clustersoftware bewaakt voortdurend de gezondheid van beide machines (CPU-gebruik, geheugen, netwerkconnectiviteit, servicestatus). Als de primaire machine de statuscontrole niet doorstaat, wordt het failoverproces gestart.
5. Failover-mechanisme:
* De clustersoftware definieert en voert het failover-proces uit. Dit omvat:
* Het detecteren van een storing van de primaire machine.
* Het netjes afsluiten van de service op de defecte machine (indien mogelijk).
* Starten van de service op de secundaire machine.
* De VIP overschakelen naar de secundaire machine.
6. Netwerkconfiguratie:
* Beide machines moeten een betrouwbare netwerkconnectiviteit hebben. Een redundante netwerkopstelling (bijvoorbeeld meerdere netwerkinterfaces, gebonden interfaces) verhoogt de robuustheid van het systeem.
7. Consistente configuratie:
* Beide machines moeten een identieke configuratie voor de service hebben, inclusief softwareversies, configuratiebestanden en eventuele noodzakelijke afhankelijkheden. Configuratiebeheertools (bijvoorbeeld Ansible, Puppet, Chef) kunnen helpen de consistentie te behouden.
8. Applicatiebewustzijn:
* Idealiter zou de applicatie zelf op de hoogte moeten zijn van de clusteromgeving en in staat moeten zijn om failover op een correcte manier af te handelen. Vaak gaat het hierbij om functies zoals sessiepersistentie of gedistribueerde vergrendelingsmechanismen.
In wezen is clustering met hoge beschikbaarheid afhankelijk van redundantie op meerdere niveaus – data, netwerk en de service zelf – beheerd door intelligente software die een naadloze failover en minimale downtime garandeert. |