Nota:

Configurare un cluster attivo/passivo pfSense High Availability con Corosync/Pacemaker su Oracle Cloud Infrastructure

Nota: pfSense non è ufficialmente supportato su Oracle Cloud Infrastructure da Netgate o Oracle. Prima di provare questa esercitazione, contattare il team di supporto pfSense.

Introduzione

Oracle Cloud Infrastructure (OCI) è un set di servizi cloud complementari che ti consentono di creare ed eseguire una vasta gamma di applicazioni e servizi in un ambiente hosted ad alta disponibilità. Oracle Cloud Infrastructure (OCI) offre funzionalità di computazione ad alte prestazioni (come istanze hardware fisiche) e capacità di storage in una rete virtuale di overlay flessibile, accessibile in modo sicuro dalla tua rete on-premise.

pfSense è un firewall e un router open source gratuito che offre anche funzioni unificate di gestione delle minacce, bilanciamento del carico, WAN multiplo e altro ancora.

Obiettivo

Imposta l'appliance virtuale pfSense in una configurazione attiva/passiva ad alta disponibilità con l'ausilio di Corosync/Pacemaker in OCI.

Prerequisiti

Punti da notare

Task 1: installare due pfSense Virtual Appliance su Oracle Cloud

In questa esercitazione verranno utilizzate due appliance virtuali pfSense per l'alta disponibilità. È possibile impostare più nodi in base alle esigenze. Attenersi alla procedura descritta in questa esercitazione relativa all'installazione e configurazione di pfSense su Oracle Cloud Infrastructure.

Nota:

Installare i pacchetti richiesti

  1. I repository FreeBSD sono disabilitati per impostazione predefinita. Per abilitare i repository FreeBSD, effettuare le operazioni riportate di seguito.

    1. Imposta FreeBSD: { enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. Imposta FreeBSD: { enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. Dopo aver abilitato i repository FreeBSD, aggiornare Package Manager.

    Node1@ pkg update
    Node2@ pkg update
    

    Nota: questa operazione aggiornerà il Package Manager e i metadati repository.

  3. Installare i quattro pacchetti seguenti richiesti per impostare il cluster ad alta disponibilità.

    1. Pacemaker (disambigua)
    2. Corosincronizzazione
    3. Crmsh (disambigua)
    4. OCI CLI

    Eseguire i seguenti comandi per l'installazione

    Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    

    Seguire le istruzioni per completare l'installazione.

Task 3: Impostazione di Pacemaker/Corosync sulle istanze

Configura Corosync

  1. Creare un nuovo file di configurazione Corosync eseguendo il comando seguente in entrambe le istanze.

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. Incollare la configurazione seguente nello script su entrambi i nodi.

    Nota: assicurarsi di sostituire gli indirizzi IP nella lista di nodi.

    # Please read the corosync.conf.5 manual page
    totem {
       version: 2
       crypto_cipher: none
       crypto_hash: none
       transport: udpu
    }
    logging {
       fileline: off
       to_logfile: yes
       to_syslog: yes
       logfile: /var/log/cluster/corosync.log
       debug: on
       timestamp: on
    logger_subsys {
       subsys: QUORUM
       debug: on
       }
    }
    nodelist {
       node {
           ring0_addr: 192.0.2.2 # make sure to replace with your IP
           nodeid: 1
           }
       node {
           ring0_addr: 192.0.2.5 # make sure to replace with your IP
           nodeid: 2
           }
       }
    quorum {
       # Enable and configure quorum subsystem (default: of
       # see also corosync.conf.5 and votequorum.5
       provider: corosync_votequorum    
    }
    

Configurazione Corosync

Se si tenta di avviare Corosync ora, non verrà visualizzato il messaggio di errore "Nessuno spazio disponibile sul dispositivo".

Abilita disco RAM su entrambi i nodi

Corosync e Pacemaker si basano sulla directory /var per il loro runtime e se hai effettuato un'installazione predefinita, lo spazio disponibile per /var è molto limitato. È necessario impostare e utilizzare la memoria (RAM) per le directory /var e /tmp, ci aiuterà anche a migliorare le prestazioni.

  1. Nella console pfSense accedere a Sistema, fare clic su Avanzate, quindi su Varie.

    Menu Ramdisk

  2. Scorrere fino a Impostazioni disco rigido e selezionare la casella di controllo Usa dischi RAM.

  3. Immettere la dimensione del disco RAM da allocare alle directory /tmp e /var.

  4. Salvare la configurazione. Verrà richiesto di eseguire il riavvio per la prima volta che si abilita il disco RAM. In seguito sarà possibile aumentare o ridurre la dimensione del disco RAM durante gli spostamenti.

    Configurazione Ramdisk

    Nota: poiché si utilizzano dischi Ram, in caso di chiusura del sistema tutti i file in /tmp e /var andranno persi. È necessario impostare uno script di avvio (file rc.d) che creerà le directory di cui Corosync e Pacemaker devono funzionare correttamente.

  5. Aprire il file /usr/local/etc/rc.d/corosync e aggiungere le righe seguenti al codice dopo la riga 17 su entrambi i nodi.

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. Dopo aver apportato le modifiche, Jle avrà un aspetto simile al seguente:

    #!/bin/sh
         # PROVIDE: corosync
         # REQUIRE: LOGIN FILESYSTEMS
         # KEYWORD: shutdown
         . /etc/rc.subr
         name="corosync"
         rcvar="corosync_enable"
         start_precmd="corosync_precmd"
         corosync_precmd()
         {
             if [ `${SYSCTL_N} kern.ipc.maxsockbuf` -lt 18874368 ]; then
                 err 3 "sysctl:kern.ipc.maxsockbuf must be at least 18874
             fi
             mkdir -p /var/lib/corosync
             mkdir -p /var/run/qb
             chmod 777 /var/run/qb
          }
         load_rc_config $name
         : ${corosync_enable:=YES}
         command="/usr/local/sbin/corosync"
         run_rc_command "$1"
    

    Impostazioni Corosync

Avvia il servizio Corosync e Pacemaker su tutti i nodi

Ora è possibile aggiungere corosync_enable=YES e pacemaker_enable=YES al file /etc/rc.conf. Eseguire il comando riportato di seguito su tutti i nodi.

Node1@ sysrc corosync_enable=YES
Node2@ sysrc corosync_enable=YES
Node1@ sysrc pacemaker_enable=YES
Node2@ sysrc pacemaker_enable=YES
Node1@ service corosync start
Node2@ service corosync start
Node1@ service pacemaker start
Node2@ service pacemaker start

Nota:

Controllare lo stato del cluster

  1. Ora che abbiamo Pacemaker e Corosync in esecuzione su tutti i nodi, controlliamo lo stato del cluster. Per controllare lo stato, eseguire il comando riportato di seguito.

    Node1@ crm status
    

    Stato Corosync

  2. Disabilitare Stonith per il momento in quanto non copriamo Stonith in questa esercitazione.

    Node1@ crm configure property stonith-enabled=false
    Node2@ crm configure property stonith-enabled=false
    

    Menu Ramdisk

    Come puoi vedere nell'immagine, lo stato indica che 2 nodi sono configurati e online.

    Nota:

    • Se non si vede che entrambi i nodi sono configurati e in linea come mostrato nell'immagine, indica che è configurata una sola istanza ed è in linea. Ciò significa che i nodi non sono in grado di parlare tra loro.
    • Per risolvere il problema, controllare pfSense e gli elenchi di sicurezza di Oracle Cloud per consentire il traffico UDP e ICMP.

Task 4: impostare Oracle Cloud Infrastructure CLI

Abbiamo bisogno dell'interfaccia CLI OCI per spostare e associare l'IP a virgola mobile virtuale tra i nodi a livello dell'infrastruttura. L'interfaccia CLI OCI è già stata installata in precedenza con altri package. Ora la configurazione verrà impostata. Vogliamo usare i principal delle istanze per autorizzare i nostri comandi CLI. È possibile ottenere ulteriori informazioni sui principal delle istanze e su OCI cli.

Segui questo blog e imposta i principal delle istanze di Oracle Cloud Infrastructure.

Imposta IP a virgola mobile virtuale

In questa esercitazione, utilizzeremo 192.0.2.3/29 come IP mobile virtuale. Non è possibile impostare l'heartbeat IPaddr2 in pfSense basato su FreeBSD. Se l'abbiamo provato comunque, verrà restituito un errore "IP non è disponibile", l'IP del pacchetto è solo linux. Verrà invece impostato un hotbeat IPaddr.

  1. Aprire /usr/local/lib/ocf/resource.d/heartbeat/IPaddr nell'editor di file.

  2. Aggiungere alcune righe di codice che avvieranno l'interfaccia CLI OCI per spostare l'IP da una vNIC a un'altra. Aggiungere le seguenti righe di codice dopo la riga 584 nel metodo add_interface() dello script.

  3. Assegnare i valori node1vnic, node2vnic, vnicip e hostname nello script. Puoi trovare gli OCID vNIC nel menu Console di Oracle Cloud, Computazione, Collegato vNICs.

    else
    ##### OCI vNIC variables
        server="`hostname -s`"
        node1vnic="<node1vnic>"
        node2vnic="<node2vnic>"
        vnicip="<floating_IP>"
        export LC_ALL=C.UTF-8
        export LANG=C.UTF-8
        touch /tmp/ip_switch_error.log
    ##### OCI/IPaddr Integration
        if [ $server = "<host_name>" ]; then
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node1vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        else
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node2vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        fi
    
    

    Configurazione heartbeat

  4. Per il nodo 1: nella console di Oracle Cloud andare a Computazione, quindi fare clic su pfSense-primario e su VNIC collegate. Selezionare la vNIC primaria e aggiungere un IP privato secondario (come floating_IP nello script precedente)

    Aggiungi nuovo IP VNIC

  5. Per entrambi i nodi: nella console pfSense andare a firewall, quindi fare clic su IP virtuali e aggiungere un alias IP (come floating_IP nello script precedente).

    pfSense IP virtuale

Impostazione di Heartbeat

  1. Nella shell pfSense eseguire il comando riportato di seguito sul nodo 1.

    crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3  cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
    
  2. In questa esercitazione, 192.0.2.3 è l'IP mobile. Assicurarsi di sostituire i valori ip, netmask e nic con i valori. Ciò dovrebbe creare una risorsa IP in Pacemaker.

    stato di pacemaker

Se si esegue crm status ora, verranno visualizzati due nodi in linea e una risorsa disponibile che punta a pfSense-primary. È inoltre possibile eseguire ipconfig vtnet0 per verificare se l'IP virtuale è ora associato all'interfaccia sul nodo primario.

Failover test

Stato corrente

Test failover prima

  1. Eseguire il comando seguente per forzare uno switchover:

    crm resource move IP pfSense-secondary.example.com  
    
  2. Eseguire il comando crm status per vedere che la risorsa IP mobile viene spostata in pfSense-secondaria.

  3. Controlla gli avvertimenti vNIC della console Oracle Cloud relativi ai tuoi nodi. Vedrai che l'IP mobile è stato spostato sul secondo nodo.

    Test failover dopo

    Nota: se si tenta di eseguire l'arresto ora, la risorsa passerà allo stato arrestato perché non sarà in grado di determinare quale nodo considerare come principale, poiché pfSense richiede almeno il 50% di voti per assegnare un master. Dal momento che abbiamo solo 2 nodi e uno di essi è inattivo, Pacemaker non sarà in grado di impostarne uno come maestro.

  4. Eseguire il comando seguente per ignorare il criterio del 50% dei voti:

    crm configure property no-quorum-policy=ignore
    
  5. Ora prova un arresto e puoi vedere lo spostamento dell'IP mobile.

Task 5: Impostazione XLMRPC e pfsync

Vogliamo che i nostri nodi abbiano uno stato sincronizzato se vogliamo avere un cluster realmente ad alta disponibilità, basta spostare gli IP non lo farà. È necessario impostare un altro set di vNIC su ciascuna delle nostre istanze per la sincronizzazione.

Imposta interfaccia Sync

  1. Per entrambi i nodi: andare a Compute, selezionare l'istanza, aprire Notizie collegate, quindi fare clic su Crea vnic.

    Crea vnic secondario

  2. Una volta creata e collegata la vNIC, andare alla console pfSense, fare clic su interfacce, quindi fare clic su Assegnazioni e aggiungere l'interfaccia appena rilevata.

    Interfaccia pfSense

  3. Fare clic sull'interfaccia appena assegnata e impostarla come configurazione.

  4. Assegnare l'indirizzo IPv4 statico e la maschera di sottorete creati nel passo precedente della console OCI.

    pfSense Interfaccia di sincronizzazione

  5. Fare clic su Salva e applicare le modifiche.

Imposta High Availability sul nodo principale

  1. Andare alla console pfSense, fare clic su Sistema, quindi su Sincronizzazione ad alta disponibilità.
  2. Abilita sincronizzazione stato pfsync.
  3. Scegliere l'interfaccia di sincronizzazione.
  4. Aggiungere l'IP del nodo secondario.
  5. Configurazione sincronizzazione XMLRPC: aggiungere l'IP nodo secondario.
  6. Impostare il nome utente e la password e controllare che cosa si desidera sincronizzare. pfSense Configurazione sincronizzazione HA
  7. Fare clic su Salva e applica.

Imposta High Availability sul nodo secondario

  1. Andare alla console pfSense, fare clic su Sistema, quindi su Sincronizzazione ad alta disponibilità.
  2. Abilita sincronizzazione stato pfsync.
  3. Scegliere l'interfaccia di sincronizzazione.
  4. Aggiungere l'IP del nodo primario.
  5. Fare clic su Salva e applica.

Gli stati del firewall sono sincronizzati tra entrambi i nodi ed è possibile provare ad aggiungere una regola firewall nell'istanza primaria. Lo stesso verrà visualizzato anche nel nodo secondario. Ora è possibile provare a eseguire di nuovo il failover con un arresto del sistema.

Confermazioni

Autore - Mayank Kakani (architetto cloud OCI)

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o visita altri contenuti di formazione gratuiti sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione sul prodotto, visitare Oracle Help Center.