settembre 22, 2017

Mysql Cluster con Load Balancer pfSense

Ecco una guida rapida su come configurare un Cluster Mysql con un bilanciatore di carico pfSense, il firewall UTM open-source basato su FreeBSD. Si procede dapprima con l’installazione di Mysql Cluster (multi-master), successivamente viene configurato pfSense come load balancer TCP. Dal punto di vista logico, un’installazione di Mysql in Cluster si basa su 3 componenti:

  1. Management Node (mgm): funzione gestione e monitoraggio cluster
  2. Data Node (dn): contenitore dati
  3. SQL Node (mysqld): gestione start/stop servizio

Le componenti mgm e mysqld vengono installate sullo stesso server mentre per i data node sarà utilizzato un altro server dedicato. Entrambi gli host vengono replicati per simulare un’architettura minimale in alta affidabilità. Sul livello di balancing invece viene fatta solo una singola installazione di pfSense ma si può prevedere una seconda instanza in modalità active-passive da utilizzare come bilanciatore di backup. L’infrastruttura è in esecuzione su hypervisor Virtualbox con un totale di 5 macchine virtuali.

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-01

VIRTUAL MACHINES

IP 10.10.10.1 – lb01 (load balancer pfSense)
IP 10.10.10.10 – mgm01 (mgm+mysqld)
IP 10.10.10.11 – mgm02 (mgm+mysqld)
IP 10.10.10.20 – dn01 (data node)
IP 10.10.10.21 – dn02 (data node)

APPLICATION STACK

– SO Linux CentOS 6.5 64bit Minimal
– VirtualBox 4.2.16
– Mysql Cluster Server gpl 7.3.5
– pfSense 2.1.3

ROADMAP

STEP 1. Preparazione ambiente
STEP 2. Setup Mysql Management nodes (mgm01, mgm02)
STEP 3. Setup Mysql Data nodes (dn01, dn02)
STEP 4. Setup Mysql Daemon nodes (mgm01, mgm02)
STEP 5. Setup pfSense Load Balancer
STEP 6. Test load balancer

STEP 1. Preparazione ambiente

Sono sufficienti solo due tipologie di installazione:
a) setup e post-conf di CentOS per le componenti del cluster Mysql
b) setup e post-conf di pfSense per il Load Balancer e Gateway virtuale interno

Creare la prima macchina virtuale mgm01. Dopo aver completato un’installazione minimal di CentOS effettuare alcune operazioni di post-conf.

Arrestare la macchina virtuale e procedere con la clonazione dell’istanza. Sono necessarie 4 macchine virtuali per configurare un Cluster Mysql (vedi immagine architettura), per cui clonare mgm01 fino ad ottenere mgm02, dn01 e dn02. Sulle tre nuove macchine clonate è necessario una rivisitazione delle impostazioni di rete. Ecco un pro memoria.

Prima di procedere con il passo successivo, si consiglia di effettuare uno snapshot dello stato delle macchine. In questo modo si avrà sempre a disposizione una versione “pulita” delle macchine, da cui ripartire velocemente in caso di errori o misconfigurazioni.

STEP 2. Setup Mysql Management nodes (mgm01, mgm02)

Procedere con la configurazione della componente Mysql Management in modalità failover. Questa procedura va ripetuta su entrambe le macchine mgm01 e mgm02.

 STEP 3. Setup Mysql Data nodes (dn01, dn02)

Procedere con la configurazione della componente Data Node. Queste configurazioni vanno replicate su entrambe le macchine dn01 e dn02.

 STEP 4. Setup Mysql Daemon nodes (mgm01, mgm02)

Procedere con la configurazione del servizio mysqld su entrambe le macchine mgm01 e mgm02. Dopo aver avviato il processo mysqld effettuare l’installazione del DB utilizzando la password autogenerata di default nel file /root/.mysql_secret. Infine, abilitare la replica sincrona dei privilegi sugli utenti. In questo modo si eviterà di eseguire ogni volta operazioni di “GRANT” sugli utenti su ciascun nodo del cluster.

 STEP 5. Setup pfSense Load Balancer

Su Virtualbox creare una nuova macchina virtuale per pfSense con 2 schede di rete. Sulla prima viene configurata l’area WAN virtuale per l’accesso pubblico al dispositivo, sulla seconda l’area LAN interna in cui sono in esecuzione i nodi del cluster Mysql. Per il corretto funzionamento del balancer è necessario che i 2 nodi mgm abbiano impostato pfSense come gateway predefinito (10.10.10.1).

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-02

 

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-03

 

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-04

 

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-05

 

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-06

 

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-07

STEP 6. Test load Balancer

Per effettuare dei test sul bilanciatore si può simulare una situazione di failure sulle istanze mgm01 e mgm02. Mettere in pausa una delle due macchine virtuali e tentare una connesione mysql con un client remoto.

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-09

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-08

giuseppe-urso--mysql-cluster-con-load-balancer-pfsense-10

Related posts

4 Comments

  1. zakarya

    Hi, Thank you for the post,
    in the final step what credential do i need to put to access via the public ip i mean what user and pass?
    everything seems to be working fine but i can´t connect via the pullic ip

    Thank´s again

    Reply
    1. Giuseppe Urso

      Hi,
      in order to test a mysql connection through the public IP (wan) of the pfSense, you should open all inbound traffic for the wan and lan interfaces (check section: Firewall > Rules > pass WAN, LAN ).
      Make sure that port 3306 on pfSense is open, you can run nmap or telnet to check it:
      > telnet 192.168.56.117 3306
      or
      > nmap 192.168.56.117 | grep 3306
      Giuseppe

Leave a Reply

Your email address will not be published.