La forma più resiliente di clustering DNS (privato)?

Sto lavorando su una configuration con due datacentri collegati da un uomo (bridged) e tutto è raddoubleto tra di loro, in modalità fail-over con RedHat Cluster, DRBD e quel genere di cose.

Ho un server DNS per each posizione, ma risulta che avere entrambi in /etc/resolv.conf non aiuta molto; se si scende, il cliente attende 10 o circa la metà del tempo. In altre parole, li usa per il bilanciamento del carico, non per il fallimento. Così ho configurato i due server per utilizzare un VIP con ucarp (≈VRRP).

C'è un modo per avere entrambi i miei due server DNS e, ad esempio, rispondere allo stesso IP, tutto il tempo? Non è un grosso problema se una risquista NS riceve due risposte.

C'è un modo per farlo con Anycast / Multicast e così via?

Modifica: mi sembra che non ci sia alcun bene nel mio scenario, ho solo routes statici e la maggior parte del traffico è in realtà attraverso un ponte.

Quello che sarebbe interessante sarebbe un modo per avere due server DNS rispondere alle richieste sullo stesso IP, se questo è in qualche modo ansible.

  • Può FOG e / o WDS fare multicast su un normale interruttore Gigabit non gestito? o ha bisogno di hardware con funzionalità multicast specifiche?
  • Ricerca multicast hostname su OSX
  • Perché l'UDP multicast può essere più lento di unicast UDP?
  • OpenVPN - OpenVZ - Multicast e come abilitarlo
  • performance iperf max udp multicast che picchiano a 10Mbit / s?
  • Trasmetta multicast (ad un'altra LAN) tramite WAN distriggersndo il multicast
  • Qual è la differenza tra il collegamento, la networking (interface) e gli indirizzi multicast?
  • Come bloccare tutto il traffico multicast che attraversa un Cisco Catalyst 3750
  • 11 Solutions collect form web for “La forma più resiliente di clustering DNS (privato)?”

    DNS Anycast ti consente di configurare un IP resolver in tutti i tuoi clienti; le richieste del client verranno inoltrate al server "più vicino" (da una prospettiva di routing di networking).

    Se hai legato l'annuncio del VIP anycast a un healthcheck (ad esempio chiedendo il record A per un dominio ben noto), allora se uno dei tuoi server non funzionasse, il suo path sarebbe stato ritirato. Una volta riconverta la networking, tutte le richieste verranno inoltrate all'altro dispositivo senza alcuna riconfiguration manuale.

    In termini di implementazione, questo può essere fatto sia attraverso l'utilizzo di apparecchiature hardware (ad es. F5 Big IP, Citrix Netscaler), sia attraverso la propria configuration. È ansible eseguire un demone di routing (ad es. Quagga) in esecuzione sui server DNS o avere alcuni script personalizzati che accedono ai router per modificare lo stato di ciascun VIP di anycast.

    È ansible massicciamente attenuare i problemi impostando un paio di opzioni nel tuo resolv.conf:

      le opzioni ruotano timeout: 2 

    ruotare rende il resolver scegliere uno dei tuoi nameservers a caso, piuttosto che usare il primo, a less che non venga fuori tempo. timeout: 2 riduce il timeout dns a due secondi, piuttosto che il valore predefinito.

    (NB: questo è stato testato su Debian / Ubuntu, ma non credo che questo sia una modifica specifica di Debian)

    Correggere il client – utilizzare un risolutore migliore.

    lwresd fa parte di Bind. Funziona come servizio locale. Configurare libc per usarlo tramite /etc/nsswitch.conf, quindi è trasparente per tutti i programmi compilati staticamente.

    lwresd controlla le performance e la disponibilità dei server di nomi configurati (questo è il comportmento standard di collegamento). Se un host diventa non disponibile, lwresd si riprenderà da un server e invierà tutte le query ad altri server configurati. Come viene eseguito localmente su each host, dovrebbe normalmente submit tutte le query al server più vicino.

    Faccio funzionare un cluster DNS ricorrente BGP interno su due Loadbalancers di Virtual Server (IPVS) e funziona come un fascino.

    La configuration di base è descritta qui: grande: mi dispiace, i nuovi utenti non possono aggiungere i collegamenti ipertestuali … (vedi per il collegamento qui sotto e poi)

    Il problema con l'utilizzo di VRRP per il servizio IP è che passerà tra i due server e quindi il tuo nameserver dovrà legarlo rapidamente per poter rispondere alle query in caso di failover. Potresti lavorare in questo modo da NATing come nella mia configuration IPVS, ma ti consiglierei un bilanciamento del carico con controlli attivi di servizio in modo da sapere quando qualcosa è sbagliato.

    Si prega di notare che sebbene ci siano implementazioni DNS che utilizzano multicast (ad esempio, Apple Bonjour / mdns), queste non sono di solito adatte ad un servizio DNS ricorrente o ad alto volume e sono anche generalmente limitati all'utilizzo all'interno dello stesso dominio di collisione, ad esempio LAN.

    La moda semplice:

    Chiedere al vostro linux di essere molto più aggressivo nei server dns in resolv.conf: opzioni timeout: 0.1 ruotare

    Quindi il timeout è rapido e ruotare lo fanno usare per rovesciare il carico, senza VIP / VRRP / personale da gestire, solo 2 server DNS che fanno il proprio lavoro …

    Anycast è spesso utilizzato per risolvere questo requisito. DNS Anycast è l'utilizzo di policy di routing e di indirizzi per influenzare il path più efficiente tra una sola fonte (client DNS) e diversi obiettivi geograficamente dispersi che "ascoltano" a un servizio (DNS) all'interno di un gruppo di destinatari. In Anycast, gli stessi indirizzi IP vengono utilizzati per affrontare ognuno degli obiettivi di ascolto (server DNS in questo caso). Il routing Layer 3 gestisce in modo dinamico il calcolo e la trasmissione di pacchetti dalla nostra fonte (Client DNS) al suo target più appropriato (server DNS).

    Vedere http://www.netlinxinc.com per un'intera serie di post sui blog dedicati a Anycast DNS. Qui trovenetworking ricette per come configurare DNS Anycast. La serie ha ricoperto il DNS di Anycast usando il routing statico, RIP, e in poco tempo pubblicherò ricette su OSPF e BGP.

    Se è accettabile avere pochi secondi di errore DNS prima che si verifichi lo swapover, è ansible creare uno script shell semplice per eseguire questa operazione. Segue un pseudocode non funzionante:

    #!/bin/sh localns=192.168.0.1 remotens=192.168.0.2 currentns=`cat /etc/resolv.conf | grep nameserver | awk '{print $2}'` while 1; do if ping -W1 -q -c3 -i0.5 $localns > /dev/null 2>&1; then # Local DNS is up [ $currentns != $localns ] || echo "nameserver $localns" > /etc/resolv.conf currentns=$localdns else; # Local DNS is down [ $currentns != $remotens ] || echo "nameserver $remotens" > /etc/resolv.conf currentns=$remotedns sleep 2 # Will detect failures in no more than 5 secs 

    Se stai utilizzando i bilancieri del carico ovunque nel tuo sito, dovresti essere in grado di configurarli per avere DNS come servizio virtuale.

    Il mio Kemp Loadmaster 1500s può essere configurato per fare il round-robin con failover. Questi utilizzerebbero il loro controllo di servizio per assicurarsi che each server DNS si esegua each pochi secondi e divide il traffico tra i due server. Se uno muore, esce dal pool RR e solo il server "up" viene interrogato.

    Bisogna solo puntare il tuo resolv.conf al VIP sul loadbalancer.

    Vuoi che il DNS sia affidabile. Aggiungendo una grande quantità di complessità alla configuration provocherà un incubo assoluto quando qualcosa si rompe.

    Alcune delle soluzioni proposte funzionano solo quando i server DNS ridondanti sono nello stesso sito.

    Il problema fondamentale è che il client DNS è rotto come progettato. Non ricorda quando un server era irraggiungibile e continua a cercare di connettersi allo stesso server non rispondente.

    NIS ha gestito questo problema avendo ypbind mantenere lo stato. Una soluzione malvagia, ma di solito funziona.

    La soluzione qui è quella di appoggiare i fornitori a implementare una soluzione ragionevole a questo problema. Sta peggiorando con IPV6, come le richieste AAAA stanno aggiungendo alla lunghezza del tempo speso sprecato su timeout. Ho visto i protocolli falliti (ad esempio una connessione sshd) perché hanno passato così tanto tempo in attesa di timeout DNS a causa di un singolo server DNS non raggiungibile.

    Nel passato, come è stato precedentemente suggerito, scrivi uno script che sostituisce resolv.conf con uno che contiene solo i nameserver validi. Condividi questo script con i fornitori per dimostrare la soluzione impuro che sei stato costretto ad implementare.

    Questo non è stato seriamente testato e assume un nslookup che analizza come il mio, e un grep che support "-q".

    Esegui questo da cron each 5 minuti o giù di lì.

    Non sto seriamente suggerendo che chiunque effettivamente usi cron e uno script di shell per la gestione critica di failover, le sorprese di gestione degli errori sono semplicemente troppo grandi. Questa è solo una prova del concetto.

    Per verificare questo per reale, modificare la row "nameservers =" in alto, modificare resolv_conf in alto a /etc/resolv.conf non /tmp/resolv.conf e l'intestazione predefinita di resolv.conf che contiene example.com .

    Potrebbe essere necessario riavviare nscd se si sostituisce resolv.conf.

     #!/bin/bash # full list of nameservers nameservers="127.0.0.1 192.168.0.1 192.168.1.1" # resolv.conf filename, change to /etc/resolv.conf for production use resolv_conf="/tmp/resolv.conf" # for tracking during the test failed_nameservers="" good_nameservers="" # test loop for nameserver in $nameservers; do if nslookup localhost $nameserver | grep -q 'Address.*127\.0\.0\.1'; then good_nameservers="$good_nameservers $nameserver" else failed_nameservers="$failed_nameservers $nameserver" fi done # if none succeded, include them all if [ -z "$good_nameservers" ]; then good_nameservers="$nameservers" fi # error reporting, consider writing to syslog if [ -n "$failed_nameservers" ]; then echo warning: failed nameservers $failed_nameservers fi # create the temporary replacement resolv.conf new_rc="$resolv_conf.new.$$" echo domain example.com > $new_rc echo search example.com >> $new_rc for nameserver in $good_nameservers; do echo nameserver $nameserver >> $new_rc done # don't deploy a corrupt resolv.conf if ! grep -q nameserver $new_rc; then echo warning: sanity check on $new_rc failed, giving up exit 1 fi # keep a backup if [ -f $resolv_conf ]; then rm -f $resolv_conf.previous ln $resolv_conf $resolv_conf.previous fi # deploy the new one mv $new_rc $resolv_conf 

    Vorrei prima tentare di duplicare il tuo VRRP, ma con un VIP aggiuntivo. Per each VIP, alternare i nodes primari e di backup.

    DNS1 = vip1 primario, vip2 secondario DNS2 = primario vip2, secondario vip1

    Quindi, ciascuna delle tue macchine client ha entrambi ips nel resolver. In questo modo il carico viene diffuso attraverso i server dei nomi, ma se si scende, l'altro assume solo il carico aggiuntivo.

    Qualsiasi possibilità di avere i bilancieri carico in entrambi i siti? Se non fosse ansible fare la famiglia con LVS.

    Avere un indirizzo di servizio dns in each sito che è un VIP sul loadbalancer. Poi il carico di carico attivo / passivo each VIP attraverso i due server DNS, favorendo quello locale.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.