Hinweis:

Konfigurieren Sie ein pfSense High Availability-Aktiv-/Passivcluster mit Corosync/Pacemaker auf Oracle Cloud Infrastructure

Hinweis: pfSense wird von Netgate oder Oracle offiziell auf Oracle Cloud Infrastructure nicht unterstützt. Wenden Sie sich an das Supportteam von pfSense, bevor Sie dieses Tutorial ausprobieren.

Einführung

Oracle Cloud Infrastructure (OCI) besteht aus einer Reihe sich ergänzender Cloud-Services, mit denen Sie eine Vielzahl von Anwendungen und Services in einer hochverfügbaren gehosteten Umgebung erstellen und ausführen können. Oracle Cloud Infrastructure (OCI) bietet High-Performance-Compute-Funktionen (als physische Hardwareinstanzen) und Speicherkapazität in einem flexiblen virtuellen Überlagerungsnetzwerk, auf das über Ihr On-Premise-Netzwerk sicher zugegriffen werden kann.

pfSense ist eine kostenlose Open-Source-Firewall und ein Open-Source-Router, die auch einheitliches Bedrohungsmanagement, Load Balancing, Multi-WAN und mehr bietet.

Zielsetzung

Richten Sie pfSense Virtual Appliance mit Hilfe von Corosync/Pacemaker in OCI in einer hochverfügbaren aktiven/passiven Konfiguration ein.

Voraussetzungen

Zu beachtende Punkte

Aufgabe 1: Zwei pfSense Virtual Appliances in Oracle Cloud installieren

In diesem Tutorial werden die beiden pfSense virtuellen Appliances für High Availability verwendet. Sie können je nach Ihren Anforderungen mehrere Knoten einrichten. Befolgen Sie die Schritte in diesem Tutorial Installieren und konfigurieren Sie pfSense auf Oracle Cloud Infrastructure.

Hinweis:

Erforderliche Packages installieren

  1. FreeBSD-Repositorys sind standardmäßig deaktiviert. So aktivieren Sie FreeBSD-Repositorys:

    1. Legen Sie FreeBSD fest: { enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. Legen Sie FreeBSD fest: { enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. Nachdem Sie die FreeBSD-Repositorys aktiviert haben, aktualisieren Sie den Packagemanager.

    Node1@ pkg update
    Node2@ pkg update
    

    Hinweis: Dadurch werden der Package Manager und die Repository-Metadaten aktualisiert.

  3. Installieren Sie die folgenden vier Packages, die für das Setup des High Availability-Clusters erforderlich sind.

    1. Herzschrittmacher
    2. Corosync
    3. CRM
    4. OCI-CLI

    Führen Sie die folgenden Befehle zur Installation aus.

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

    Befolgen Sie die Anweisungen, um die Installation abzuschließen.

Aufgabe 3: Pacemaker/Corosync für die Instanzen einrichten

Corosync konfigurieren

  1. Erstellen Sie eine neue Corosync-Konfigurationsdatei, indem Sie den folgenden Befehl in beiden Instanzen ausführen.

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. Fügen Sie die folgende Konfiguration in das Skript auf beiden Knoten ein.

    Hinweis: Stellen Sie sicher, dass Sie Ihre IP-Adressen in der Knotenliste ersetzen.

    # 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    
    }
    

Corosync-Konfiguration

Wenn Sie versuchen, Corosync jetzt zu starten, wird die Fehlermeldung "No space left on device" angezeigt.

RAM-Festplatte auf beiden Knoten aktivieren

Corosync und Pacemaker verlassen sich zur Laufzeit auf das Verzeichnis /var. Wenn Sie eine Standardinstallation durchgeführt haben, ist der verfügbare Speicherplatz für /var sehr begrenzt. Sie müssen Arbeitsspeicher (RAM) für die Verzeichnisse /var und /tmp einrichten und verwenden. Dadurch wird auch die Performance verbessert.

  1. Navigieren Sie in der pfSense-Konsole zu System, klicken Sie auf Erweitert, und klicken Sie dann auf Sonstiges.

    Ramdisk-Menü

  2. Scrollen Sie nach unten zu Ram-Datenträgereinstellungen, und aktivieren Sie das Kontrollkästchen Ram-Datenträger verwenden.

  3. Geben Sie die RAM-Datenträgergröße ein, die Sie den Verzeichnissen /tmp und /var zuweisen möchten.

  4. Speichern Sie die Konfiguration. Sie werden aufgefordert, das System neu zu starten, wenn Sie RAM Disk zum ersten Mal aktivieren. Später können Sie die RAM Disk-Größe von unterwegs erhöhen oder verringern.

    Ramdisk-Konfiguration

    Hinweis: Da wir Ram Disks verwenden, gehen beim Herunterfahren des Systems alle Dateien in /tmp und /var verloren. Wir müssen ein Startskript (rc.d-Datei) einrichten, das die Verzeichnisse erstellt, die Corosync und Pacemaker benötigen, um ordnungsgemäß zu funktionieren.

  5. Öffnen Sie die Datei /usr/local/etc/rc.d/corosync, und fügen Sie dem Code nach Zeile 17 auf beiden Knoten die folgenden Zeilen hinzu.

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. Nachdem Sie die Änderungen vorgenommen haben, sieht die Jle ungefähr wie folgt aus:

    #!/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"
    

    Corosync-Einstellungen

Corosync- und Pacemaker-Service auf allen Knoten starten

Sie können der Datei /etc/rc.conf jetzt corosync_enable=YES und pacemaker_enable=YES hinzufügen. Führen Sie den folgenden Befehl auf allen Knoten aus.

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

Hinweis:

Prüfen Sie den Clusterstatus

  1. Nachdem Pacemaker und Corosync auf allen Knoten ausgeführt wurden, prüfen wir den Clusterstatus. Führen Sie den folgenden Befehl aus, um den Status zu prüfen:

    Node1@ crm status
    

    Corosync-Status

  2. Deaktivieren Sie Stonith jetzt, da wir Stonith in diesem Tutorial nicht behandeln.

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

    Ramdisk-Menü

    Wie Sie in der Abbildung sehen können, gibt der Status an, dass 2 Knoten konfiguriert und online sind.

    Hinweis:

    • Wenn nicht angezeigt wird, dass beide Knoten konfiguriert und online sind, wie im Image dargestellt, bedeutet dies, dass nur eine Instanz konfiguriert und online ist. Dies bedeutet, dass die Knoten nicht miteinander kommunizieren können.
    • Um dies zu beheben, prüfen Sie pfSense und Oracle Cloud-Sicherheitslisten, um UDP- und ICMP-Traffic zuzulassen.

Aufgabe 4: Oracle Cloud Infrastructure-CLI einrichten

Die virtuelle Floating-IP muss von OCI CLI zwischen den Knoten auf Infrastrukturebene verschoben und verknüpft werden. Die OCI-CLI wurde bereits früher mit anderen Packages installiert. Jetzt wird die Konfiguration eingerichtet. Wir möchten Instanz-Principals verwenden, um unsere CLI-Befehle zu autorisieren. Weitere Informationen zu Instanz-Principals und OCI-CLI

Befolgen Sie diesen Blog, und richten Sie die Principals der Oracle Cloud Infrastructure-Instanz ein.

Virtuelle variable IP einrichten

In diesem Tutorial verwenden wir 192.0.2.3/29 als virtuelle schwimmende IP. Wir können keinen IPaddr2-Heartbeat in pfSense einrichten, der auf FreeBSD basiert. Wenn wir es trotzdem versucht haben, wird ein Fehler "IP ist nicht verfügbar" ausgegeben, die Paket-IP ist nur linux. Stattdessen richten wir einen IPaddr-Heatbeat ein.

  1. Öffnen Sie /usr/local/lib/ocf/resource.d/heartbeat/IPaddr im Dateieditor.

  2. Fügen Sie ein paar Codezeilen hinzu, mit denen die OCI-CLI initiiert wird, um die IP von einer vNIC in eine andere zu verschieben. Fügen Sie die folgenden Codezeilen nach Zeile 584 in der Methode add_interface() des Skripts hinzu.

  3. Weisen Sie im Skript die Werte node1vnic, node2vnic, vnicip und hostname zu. Sie finden Ihre vNIC-OCIDs in der Oracle Cloud-Konsole, im Menü Compute, Angehängt 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
    
    

    Heartbeat-Konfiguration

  4. Für Knoten 1: Gehen Sie in der Oracle Cloud-Konsole zu Compute, klicken Sie dann auf pfSense-primär, und klicken Sie dann auf Angehängte vNICs. Wählen Sie die primäre vNIC aus, und fügen Sie eine sekundäre private IP hinzu (identisch mit der floating_IP im obigen Skript)

    VNIC hinzufügen neue IP

  5. Für beide Knoten: Gehen Sie in der Konsole pfSense zu firewall, und klicken Sie auf Virtuelle IPs, und fügen Sie einen IP-Alias hinzu (dieser entspricht floating_IP im obigen Skript).

    pfSense Virtuelles IP

Heartbeat einrichten

  1. Führen Sie in der pfSense-Shell den folgenden Befehl auf Knoten 1 aus.

    crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3  cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
    
  2. In diesem Tutorial ist 192.0.2.3 die unverankerte IP. Stellen Sie sicher, dass Sie die IP-, Netzmasken- und nic-Werte durch Ihre Werte ersetzen. Dadurch sollte eine IP-Ressource in Pacemaker erstellt werden.

    Schrittmacherstatus

Wenn Sie crm status jetzt ausführen, werden zwei Knoten online und eine verfügbare Ressource angezeigt, die auf pfSense-primary verweist. Sie können auch ipconfig vtnet0 ausführen, um zu prüfen, ob die virtuelle IP jetzt mit der Schnittstelle auf dem primären Knoten verknüpft ist.

Failover testen

Aktueller Status

Failover-Test vor

  1. Führen Sie den folgenden Befehl aus, um ein Switchover zu erzwingen:

    crm resource move IP pfSense-secondary.example.com  
    
  2. Führen Sie den Befehl crm status aus. Die Floating-IP-Ressource wird jetzt in pfSense-secondary verschoben.

  3. Prüfen Sie die vNIC-Avachments der Oracle Cloud-Konsole für Ihre Knoten. Sie sehen, dass die Floating-IP jetzt auf den zweiten Knoten verschoben wurde.

    Failover-Test nach

    Hinweis: Wenn Sie versuchen, die Ressource jetzt herunterzufahren, wird sie in den Status "Gestoppt" versetzt, da sie nicht herausfinden kann, welcher Knoten als Master betrachtet werden soll, da pfSense mindestens 50% Stimmen benötigt, um einen Master zuzuweisen. Da wir nur 2 Knoten haben und einer von ihnen heruntergefahren ist, kann Pacemaker keinen Knoten als Master festlegen.

  4. Führen Sie den folgenden Befehl aus, um die 50%-Stimmen-Richtlinie zu ignorieren:

    crm configure property no-quorum-policy=ignore
    
  5. Testen Sie nun ein Herunterfahren, und Sie können die Verschiebung der Floating-IP sehen.

Aufgabe 5: XLMRPC und pfsync einrichten

Wir möchten, dass unsere Knoten einen synchronisierten Status haben, wenn wir ein wirklich hochverfügbares Cluster haben möchten, aber die IPs werden nicht verschoben. Für die Synchronisierung müssen wir auf jeder unserer Instanzen eine weitere Gruppe von vNICs einrichten.

Sync-Schnittstelle einrichten

  1. Für beide Knoten: Gehen Sie zu Compute, wählen Sie die Instanz aus, öffnen Sie Angehängte VNICs, und klicken Sie auf VNIC erstellen.

    Sekundäres VNIC erstellen

  2. Nachdem die vNIC erstellt und angehängt wurde, gehen Sie zu pfSense console, klicken Sie auf interfaces und dann auf Assignments, und fügen Sie die neu erkannte Schnittstelle hinzu.

    pfSense-Schnittstelle

  3. Klicken Sie auf die neu zugewiesene Schnittstelle, und richten Sie die Konfiguration ein.

  4. Weisen Sie die statische IPv4-Adresse und Subnetzmaske zu, die wir im vorherigen Schritt in der OCI-Konsole erstellt haben.

    pfSense Sync-Schnittstelle

  5. Klicken Sie auf Speichern, und übernehmen Sie die Änderungen.

High Availability auf dem primären Knoten einrichten

  1. Gehen Sie zu pfSense Console, klicken Sie auf System und dann auf High Availability Sync.
  2. Synchronisierung von pfsync-Status aktivieren.
  3. Wählen Sie die Synchronisierungsschnittstelle aus.
  4. Fügen Sie die IP des sekundären Knotens hinzu.
  5. XMLRPC-Synchronisierungskonfiguration: Fügen Sie die IP des sekundären Knotens hinzu.
  6. Legen Sie den Benutzernamen und das Kennwort fest, und prüfen Sie, welche Elemente synchronisiert werden sollen. pfSense HA Sync-Konfiguration
  7. Klicken Sie auf Speichern und anwenden.

High Availability auf dem sekundären Knoten einrichten

  1. Gehen Sie zur Konsole pfSense, klicken Sie auf System und dann auf High Availability Sync.
  2. Synchronisierung von pfsync-Status aktivieren.
  3. Wählen Sie die Synchronisierungsschnittstelle aus.
  4. Fügen Sie die IP des primären Knotens hinzu.
  5. Klicken Sie auf Speichern und anwenden.

Die Firewallstatus werden zwischen beiden Knoten synchronisiert. Sie können versuchen, eine Firewallregel zu Ihrer primären Instanz hinzuzufügen. Diese werden auch auf dem sekundären Knoten angezeigt. Wir können nun versuchen, das Failover erneut zu testen, wenn das System heruntergefahren wird.

Bestätigungen

Autor - Mayank Kakani (OCI Cloud Architect)

Weitere Lernressourcen

Sehen Sie sich weitere Übungen unter docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning-Kanal YouTube zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.