Postfix in alta affidabilità e massima performance con heartbeat, LVS ed ldirectord (1 di 4)

postfix    linux-ha    lvs

Postfix è uno fra i più diffusi software per la creazione di server di posta in ambito Linux. Sebbene le performance di questo software su carichi normali siano sempre rispettabili, nelle situazioni in cui è necessario gestire grandi quantitativi di caselle (ad esempio in server multi dominio) talvolta un solo server non basta ed è inoltre necessario garantire al sistema un’alta affidabilità, eliminando quelli che vengono definiti SPOF (Single Point Of Failure), componenti la cui rottura rende inusabile il sistema. Questa serie di articoli descrive una soluzione per creare una batteria di server di posta il cui carico viene distribuito via software attraverso un bilanciatore, il tutto in alta affidabilità.

Le componenti impiegate : LVS, heartbeat ed ldirectord

LVS

La definizione fornita dalla documentazione ufficiale di LVS è la seguente: un LVS è un gruppo di server che appaiono al client come un unico grande, veloce ed affidabile server (altamente disponibile).
Questa definizione si traduce nella pratica in una serie di moduli del Kernel Linux che agiscono a livello IP, in una via simile a quella di iptables, il firewall di Linux. Il comando ipvsadm, infatti, permette di inserire delle regole relative alle interfacce di rete del sistema specifiche per il bilanciamento. Queste regole vengono processate ad ogni richiesta pervenuta alla relativa interfaccia. Un funzionamento a così basso livello garantisce le massime performance ed una facilità implementativa notevole.
LVS agisce quindi da bilanciatore di carico (load balancer): rappresenta virtualmente tutti (uno o più) server in maniera trasparente all’utente che effettua le richieste, accogliendo le stesse e distribuendole attraverso i server reali.
La scalabilità di questa soluzione è evidente, infatti in presenza della necessità di aumentare performance, è sufficiente aumentare il numero di server reali senza cambiare il modo in cui l’utente effettua le richieste ai servizi erogati da LVS. In presenza di un numero maggiore di uno di server reali la soluzione è anche altamente affidabile, in quanto la perdita di un singolo nodo reale non comporta l’interruzione del servizio.

Heartbeat

Ciò che però appare altrettanto evidente è che il bilanciatore è un grosso SPOF. Se infatti lo strato virtuale rappresentato da questo dovesse crollare tutti i server reali sarebbero di fatto inutili.
Si rende necessario quindi rendere lo stesso bilanciatore altamente affidabile. Tutto questo è possibile attraverso heartbeat, il software prodotto dal gruppo Linux-HA. Heartbeat consente di configurare due macchine in modalità attiva-passiva che erogano risorse come l’indirizzo IP virtuale al quale vanno associate le regole LVS.
In caso di malfunzionamento della macchina attiva, la passiva in maniera automatica ne prenderà il posto.

Ldirectord

Pensare di gestire a mano la configurazione delle regole LVS attraverso il comando ipvsadm è certamente possibile, ma senza una buona conoscenza dell’ambiente potrebbe risultare problematico. Inoltre le regole relative ai server reali richiederebbero un costante monitoraggio per avere la certezza che tutti i servizi vengano erogati dalle relative macchine. Sarebbe impensabile infatti configurare un bilanciatore di servizi che distribuisca gli stessi su macchine che in realtà non rispondono a dovere, si creerebbe un disservizio. Per risolvere queste problematiche esiste un ottimo software chiamato ldirectord.
Ldirectord è un demone tipicamente usato come risorsa di heartbeat che si preoccupa di definire le regole LVS relative alle risorse impiegate ed effettuare il monitoraggio delle stesse.

Struttura del progetto

Quanto esposto sinora è riassumibile dal seguente schema:

Figura 1

Figura 1

Le regole per il bilanciamento sono dichiarate nelle due macchine 192.168.0.1 e 192.168.0.2 in alta affidabilità su cui è installato heartbeat con la risorsa ldirectord. Tale struttura eroga l’IP virtuale 192.168.0.100 che accoglie le richieste per i servizi dichiarati sui real server (nel nostro caso Postfix).

L’impiego o meno di uno storage comune è dipendente dal tipo di servizio che viene bilanciato. Postfix gestisce delle caselle di posta registrate su disco e per questo tutti i real server dovranno scrivere i dati relativi a queste, nello specifico i messaggi, nella stessa area. Nello schema riassuntivo tale storage è rappresentato da un filesystem NFS (erogato da un server Linux o da un NAS) ma questo potrebbe essere uno storage in fibra collegato o una qualsiasi altra soluzione che permetta di condividere lo spazio tra tutti i real server.
Sul database MySQL risiederanno i profili virtuali di tutte le utenze del server di posta.

Realizzazione del progetto

Definite le basi del progetto, la sua realizzazione si potrà strutturare in queste fasi:

  • Installazione di heartbeat e test di failover sull’indirizzo virtuale;
  • Installazione di ldirectord e test di bilanciamento su un servizio test;
  • Installazione di Postfix e prove di bilanciamento;

Conclusioni

Nel prossimo articolo verrà affrontata la prima fase del progetto comprendente l’installazione di heartbeat ed i primi test di failover sull’indirizzo bilanciato.

La serie comprende questi articoli :

Postfix in alta affidabilità e massima performance con heartbeat, LVS ed ldirectord (1 di 4)
Postfix in alta affidabilità e massima performance con heartbeat, LVS ed ldirectord (2 di 4)
Postfix in alta affidabilità e massima performance con heartbeat, LVS ed ldirectord (3 di 4)
Postfix in alta affidabilità e massima performance con heartbeat, LVS ed ldirectord (4 di 4)

Nota :

Questo articolo è originariamente apparso su Tux Journal nel Settembre 2008.

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.

Tags: , , , , ,