GNU/Linux >> Linux Esercitazione >  >> Linux

Entrambi i server che eseguono keepalive diventano master e hanno lo stesso IP virtuale

Soluzione 1:

I pacchetti non passano tra le macchine sull'interfaccia em1 (causando uno scenario di cervello diviso come afferma Mike).

  • controlla il tuo firewall per assicurarti che i pacchetti non vengano intercettati
  • controlla la tua rete per assicurarti che em1 sia la stessa rete su entrambe le macchine

Ecco un esempio di come appare uno dei pacchetti:

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)

Soluzione 2:

Nel mio caso ho dovuto consentire il traffico multicast attraverso il firewall a 224.0.0.18 , per ufw:

ufw allow from 224.0.0.18
ufw allow to 224.0.0.18

Questo mi ha aiutato.

Soluzione 3:

Nel mio caso, per CentOS/RHEL 8 ho dovuto solo consentire la ricca regola del firewall per il protocollo vrrp per risolvere questo problema di split-brain Keepalived in cui entrambi i server contenevano l'indirizzo IP VIP. Ho dovuto aggiungere il flag del kernel sysctl per consentire a HAProxy di collegarsi all'IP VIP non locale.

Per sysctl, aggiungi net.ipv4.ip_nonlocal_bind = 1 in /etc/sysctl.conf file e quindi eseguire un sysctl -p per ricaricare la configurazione di sysctl. Ne avevo bisogno NON per lo scenario split-brain Keepalived ma per avere HAProxy associato al proprio indirizzo IP per le statistiche (es:bind 192.168.0.10:1492/stats) e associato all'indirizzo VIP (IP virtuale) per il web di bilanciamento del carico traffico (bind 192.168.0.34:80 e bind 192.168.0.34:443). In caso contrario, il servizio HAProxy non è stato avviato affermando che non può collegarsi alla porta 80 e 443 solo con l'indirizzo IP VIP. Stavo facendo questo per evitare di avere bind *:80 e bind *:443. Inoltre, sembra un gioco da ragazzi ma facilmente trascurabile, controlla se hai consentito la porta che stai utilizzando per le statistiche attraverso il firewall se non sei in grado di raggiungere la pagina delle statistiche.

Per il firewall, esegui i seguenti comandi:

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

Ho trovato questi flag e altre informazioni direttamente dalla documentazione di RedHat per HAProxy e Keepalived:

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

Riferimento al flag di bind non locale (questo è stato utilizzato per HAProxy anche se non stavo usando Keepalived per il bilanciamento del carico):https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/load_balancer_administration/s1-initial -setup-forwarding-vsa

Solo HAProxy FYI:se HAProxy ancora non riesce a collegarsi alle porte, potresti voler guardare il buon vecchio SELinux che lo blocca. Per me, su CentOS 8 ho dovuto fare un semanage port -a -t http_port_t -p tcp 1492 per la mia pagina delle statistiche HAProxy.


Linux
  1. Linux:perché Linux mostra sia più che meno memoria di quella che ho installato fisicamente?

  2. Ottenere il tempo dell'utente e del kernel di un processo in esecuzione?

  3. Verificare il processo se lo stesso è in esecuzione?

  4. Come avere sia Libcurl3 che Libcurl4 installati contemporaneamente?

  5. Eseguire ArcGIS Desktop nella macchina virtuale?

Ottieni podman attivo e funzionante su Windows usando Linux

Che cos'è una macchina virtuale e perché usarla?

Conservazione e disponibilità elevata:argomenti avanzati

Come esportare e importare macchine virtuali VirtualBox

Esecuzione di phpmyadmin e suphp

Perché Linux deve avere sia `/dev/cdrom` che `/media/cdrom`?