GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Beide Server, auf denen Keepalived ausgeführt wird, werden Master und haben dieselbe virtuelle IP

Lösung 1:

Pakete werden nicht zwischen Computern auf der em1-Schnittstelle ausgetauscht (was zu einem Split-Brain-Szenario führt, wie Mike feststellt).

  • Überprüfen Sie Ihre Firewall, um sicherzustellen, dass keine Pakete abgefangen werden
  • Überprüfen Sie Ihr Netzwerk, um sicherzustellen, dass em1 auf beiden Computern dasselbe Netzwerk ist

Hier ist ein Beispiel dafür, wie eines der Pakete aussieht:

Frame 2: 54 bytes on wire (432 bits), 54 bytes captured (432 bits)
    Arrival Time: Jun  1, 2013 03:39:50.709520000 UTC
    Epoch Time: 1370057990.709520000 seconds
    [Time delta from previous captured frame: 0.000970000 seconds]
    [Time delta from previous displayed frame: 0.000970000 seconds]
    [Time since reference or first frame: 0.000970000 seconds]
    Frame Number: 2
    Frame Length: 54 bytes (432 bits)
    Capture Length: 54 bytes (432 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ip:vrrp]
Ethernet II, Src: 00:25:90:83:b0:07 (00:25:90:83:b0:07), Dst: 01:00:5e:00:00:12 (01:00:5e:00:00:12)
    Destination: 01:00:5e:00:00:12 (01:00:5e:00:00:12)
        Address: 01:00:5e:00:00:12 (01:00:5e:00:00:12)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Source: 00:25:90:83:b0:07 (00:25:90:83:b0:07)
        Address: 00:25:90:83:b0:07 (00:25:90:83:b0:07)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
    Type: IP (0x0800)
Internet Protocol Version 4, Src: 10.0.10.11 (10.0.10.11), Dst: 224.0.0.18 (224.0.0.18)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
    Total Length: 40
    Identification: 0x8711 (34577)
    Flags: 0x00
        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
        ..0. .... = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: VRRP (112)
    Header checksum: 0x4037 [correct]
        [Good: True]
        [Bad: False]
    Source: 10.0.10.11 (10.0.10.11)
    Destination: 224.0.0.18 (224.0.0.18)
Virtual Router Redundancy Protocol
    Version 2, Packet type 1 (Advertisement)
        0010 .... = VRRP protocol version: 2
        .... 0001 = VRRP packet type: Advertisement (1)
    Virtual Rtr ID: 254
    Priority: 151 (Non-default backup priority)
    Addr Count: 1
    Auth Type: No Authentication (0)
    Adver Int: 1
    Checksum: 0x3c01 [correct]
    IP Address: 10.0.0.254 (10.0.0.254)

Lösung 2:

In meinem Fall musste ich Multicast-Verkehr durch die Firewall zu 224.0.0.18 zulassen , für ufw:

ufw allow from 224.0.0.18
ufw allow to 224.0.0.18

Das hat mir geholfen.

Lösung 3:

In meinem Fall musste ich für CentOS/RHEL 8 nur die Firewall-Rich-Rule für das vrrp-Protokoll zulassen, um dieses Keepalived-Split-Brain-Problem zu lösen, bei dem beide Server die VIP-IP-Adresse hatten. Ich musste das sysctl-Kernel-Flag hinzufügen, damit HAProxy sich an nicht lokale VIP-IPs binden kann.

Fügen Sie für sysctl net.ipv4.ip_nonlocal_bind = 1 hinzu in /etc/sysctl.conf Datei und führen Sie dann sysctl -p aus zum Neuladen der sysctl config. Ich brauchte dies NICHT für das Split-Brain-Szenario von Keepalived, sondern um HAProxy an seine eigene IP-Adresse für Statistiken (z. B. bind 192.168.0.10:1492/stats) und an die VIP-Adresse (virtuelle IP) für das Load-Balancing-Web zu binden Verkehr (Bindung 192.168.0.34:80 und Bindung 192.168.0.34:443). Andernfalls konnte der HAProxy-Dienst nicht gestartet werden und gab an, dass er sich nicht nur mit der VIP-IP-Adresse an Port 80 und 443 binden kann. Ich habe dies getan, um zu vermeiden, *:80 und *:443 zu binden. Auch, fühlt sich wie ein Kinderspiel an, wird aber leicht übersehen, überprüfen Sie, ob Sie den Port, den Sie für Statistiken verwenden, durch die Firewall zugelassen haben, wenn Sie die Statistikseite nicht erreichen können.

Führen Sie für die Firewall die folgenden Befehle aus:

# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
# firewall-cmd --reload

Ich habe diese Flags und andere Informationen direkt aus der RedHat-Dokumentation für HAProxy und Keepalived gefunden:

Firewall-Referenz:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/load_balancer_administration/s1-lvs-connect-vsa

Nichtlokale Bind-Flag-Referenz (diese wurde jedoch für HAProxy verwendet, da ich Keepalived nicht für den Lastenausgleich verwendet habe):https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/load_balancer_administration/s1-initial -setup-forwarding-vsa

Nur HAProxy FYI:Wenn HAProxy immer noch nicht an Ports binden kann, sollten Sie sich das gute alte SELinux ansehen, das es blockiert. Für mich musste ich unter CentOS 8 einen semanage port -a -t http_port_t -p tcp 1492 machen für meine HAProxy-Statistikseite.


Linux
  1. Linux – Warum zeigt Linux sowohl mehr als auch weniger Speicher an, als ich physisch installiert habe?

  2. Benutzer- und Kernelzeit eines laufenden Prozesses abrufen?

  3. Linux – Muss sich ein Benutzer anmelden, um einen Prozess auszuführen und sein Eigentümer zu werden?

  4. Ausführen von ArcGIS Desktop in einer virtuellen Maschine?

  5. Als welcher Benutzer sollten Apache und PHP ausgeführt werden? Welche Berechtigungen sollten /var/www-Dateien haben?

Bringen Sie podman unter Windows mit Linux zum Laufen

Was ist eine virtuelle Maschine und warum sollte man sie verwenden?

Keepalived und Hochverfügbarkeit:Themen für Fortgeschrittene

So exportieren und importieren Sie virtuelle VirtualBox-Maschinen

Betrieb von zwei SSH-Servern

Ausführen von phpmyadmin und suphp