Opzioni per l'alta disponibilità multisito con Puppet


14

Mantengo due datacenter e poiché gran parte della nostra importante infrastruttura inizia a essere controllata tramite le marionette, è importante che il burattinaio lavori sul secondo sito in caso di guasto del nostro sito principale.

Ancora meglio sarebbe avere una sorta di configurazione attiva / attiva in modo che i server nel secondo sito non eseguano il polling sulla WAN.

Esistono metodi standard per l'alta disponibilità dei pupazzi multi-sito?


1
Ho capito bene la tua domanda? Stai cercando un modo per avere un burattinaio ridondante nel caso in cui il burattinaio non fosse disponibile?
Hrvoje Špoljar,

Dipende da come stai usando il burattino. C'è molta flessibilità. Ad esempio, stai utilizzando le configurazioni memorizzate?
Zoredache,

3
Hai mai guardato "burattino senza padrone"? La sostanza è che ogni agente ha un checkout dei manifest e li applica localmente. Si finisce con gito svno rsynco qualsiasi sistema di controllo versione che si utilizza per essere ciò che è necessario ridimensionare piuttosto che il burattinaio.
Ladadadada,

3
Solo un suggerimento per risolvere la domanda attivo-attivo: è possibile utilizzare anycast per annunciare lo stesso IP ( "virtuale" / "Servizio-" ) da entrambi i datacenter. Lo facciamo per i nostri server DNS di risoluzione. In ogni datacenter i nostri sistemi di bilanciamento del carico annunciano lo stesso IP anycast. Il nostro routing preferisce il bilanciamento del carico locale, ma ricade sugli altri controller di dominio in caso di guasto (~ "non annuncia più l'IP anycast").
Michuelnik,

1
Vedo che una delle nuove funzionalità di Puppet 3.0 è il supporto dei record SRV , qualcosa che le persone di Windows conoscono bene e potrebbero aiutare con le cose del sito.
sysadmin1138

Risposte:


13

Puppet in realtà si presta molto bene ad ambienti multi-master, con avvertimenti. Quello principale? Molte parti di Puppet amano essere centralizzate. L'autorità di certificazione, i servizi di inventario e dashboard / report, il filebucketing e le configurazioni memorizzate: sono tutti al loro meglio (o semplicemente richiedono) una configurazione in cui c'è solo un posto dove parlare.

È abbastanza fattibile, tuttavia, far funzionare molte di queste parti mobili in un ambiente multi-master, se stai bene con la perdita graziosa di alcune funzionalità quando hai perso il tuo sito principale.


Cominciamo con la funzionalità di base per ottenere un nodo che riporta a un master:

Moduli e manifesti

Questa parte è semplice. La versione li controlla. Se si tratta di un sistema di controllo della versione distribuita, è sufficiente centralizzare e sincronizzare e modificare il flusso push / pull secondo necessità nel sito di failover. Se è Subversion, probabilmente vorrai svnsyncil repository sul tuo sito di failover.

Autorità di certificazione

Un'opzione qui è semplicemente sincronizzare i file dell'autorità di certificazione tra i master, in modo che tutti condividano lo stesso certificato root e siano in grado di firmare i certificati. Questo mi ha sempre colpito come "sbagliare";

  • Un master dovrebbe davvero vedere valido il proprio certificato presentato nell'autenticazione client per una connessione in entrata da un altro master?
  • Funzionerà in modo affidabile per il servizio di inventario, dashboard, ecc.?
  • Come si aggiungono ulteriori nomi alt DNS validi lungo la strada?

Onestamente non posso dire di aver fatto test approfonditi di questa opzione, dal momento che sembra orribile. Tuttavia, sembra che Puppet Labs non stia cercando di incoraggiare questa opzione, come indicato nella nota qui .

Quindi, ciò che rimane è avere un master CA centrale. Tutte le relazioni di trust rimangono attive quando la CA è inattiva poiché tutti i client e gli altri master memorizzano nella cache il certificato CA e il CRL (sebbene non aggiornino il CRL tutte le volte che dovrebbero), ma non sarà possibile firmare nuovi certificati fino a quando si ottiene il backup del sito primario o si ripristina il master CA dai backup nel sito di failover.

Sceglierai un master che fungerà da CA e che tutti gli altri master lo disabiliteranno:

[main]
    ca_server = puppet-ca.example.com
[master]
    ca = false

Quindi, vorrai che il sistema centrale ottenga tutto il traffico relativo al certificato. Ci sono alcune opzioni per questo;

  1. Utilizzare il nuovo SRVsupporto per i record in 3.0 per indirizzare tutti i nodi agente nella posizione corretta per la CA:_x-puppet-ca._tcp.example.com
  2. Imposta l' ca_serveropzione di configurazione in puppet.conftutti gli agenti
  3. Proxy di tutto il traffico per le richieste relative alla CA dagli agenti al master corretto. Ad esempio, se esegui tutti i tuoi master in Apache tramite Passenger, configuralo sui non-CA:

    SSLProxyEngine On
    # Proxy on to the CA.
    ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-ca.example.com:8140/$1
    # Caveat: /certificate_revocation_list requires authentication by default,
    # which will be lost when proxying. You'll want to alter your CA's auth.conf
    # to allow those requests from any device; the CRL isn't sensitive.
    

E così dovrebbe andare.


Prima di passare ai servizi ausiliari, una nota a margine;

Nomi DNS per certificati master

Penso che questo qui sia il motivo più convincente per passare alla 3.0. Supponiamo che tu voglia puntare un nodo su "qualsiasi vecchio maestro funzionante".

Sotto 2.7, avresti bisogno di un nome DNS generico come puppet.example.com, e tutti i master ne hanno bisogno nel loro certificato. Ciò significa impostare dns_alt_namesnella loro configurazione, riemettere il certificato che avevano prima di essere configurato come master, emettere nuovamente il certificato quando è necessario aggiungere un nuovo nome DNS all'elenco (come se si volessero più nomi DNS per gli agenti preferiscono i padroni nel loro sito) .. brutti.

Con 3.0, puoi usare i SRVrecord. Dai a tutti i tuoi clienti questo;

[main]
    use_srv_records = true
    srv_domain = example.com

Quindi, non sono necessari certificati speciali per i maestri: basta aggiungere un nuovo record al tuo SRVRR _x-puppet._tcp.example.come sei pronto, è un maestro dal vivo nel gruppo. Meglio ancora, puoi facilmente rendere più sofisticata la logica di selezione principale; "qualsiasi vecchio master funzionante, ma preferisci quello nel tuo sito" impostando diversi set di SRVrecord per siti diversi; non dns_alt_namesnecessario.


Rapporti / Dashboard

Questo funziona meglio centralizzato, ma se puoi vivere senza di esso quando il tuo sito principale è inattivo, allora nessun problema. Basta configurare tutti i tuoi master con il posto giusto per mettere i rapporti.

[master]
    reports = http
    reporturl = https://puppetdash.example.com/reports/upload

..e sei pronto. Il mancato caricamento di un report non è fatale per l'esecuzione della configurazione; andrà semplicemente perso se il server del dashboard brinda.

Inventario dei fatti

Un'altra cosa interessante da incollare nella tua dashboard è il servizio di inventario. Se facts_terminusimpostato su restcome consigliato nella documentazione, questo interromperà effettivamente l'esecuzione della configurazione quando il servizio di inventario centrale è inattivo. Il trucco qui è usare il inventory_servicecapolinea sui maestri non centrali, che consente un grazioso fallimento.

facts_terminus = inventory_service
inventory_server = puppet-ca.example.com
inventory_port = 8140

Avere il server di inventario centrale impostato per archiviare i dati di inventario tramite ActiveRecord o PuppetDB e dovrebbe essere aggiornato ogni volta che il servizio è disponibile.


Quindi - se stai bene con un ambiente di gestione della configurazione piuttosto barebone in cui non puoi nemmeno usare la CA per firmare il certificato di un nuovo nodo fino a quando non viene ripristinato, allora questo può funzionare bene - anche se sarebbe davvero bello se alcuni di questi componenti fossero un po 'più facili da distribuire .


1
+1 per le cose CA. Nota che puoi sincronizzare / controllare la versione di tutti i goodies della CA e semplicemente non attivarli sui burattinai "standby" fino a quando non si verifica una situazione di failover (a quel punto si attivano i bit della CA sul nuovo "master" e si aggiorna il SRVrecord di conseguenza - i SRVdischi mi
sembrano la

1
@ voretaq7 Questo è un buon punto: una configurazione puramente fail-over sarebbe molto meno legwork di questo tipo di distribuzione attiva / attiva.
Shane Madden

2
Come addendum, ho anche contribuito con un aggiornamento alla guida al ridimensionamento multi-master nei documenti fantoccio che contiene anche buone informazioni: docs.puppetlabs.com/guides/scaling_multiple_masters.html
Shane Madden

8

L'approccio "burattino senza padrone" che Ladadadada descrive è quello con cui ho più familiarità (è fondamentalmente ciò che facciamo con radmind nella mia compagnia). Immagino più precisamente che sia "Più master sincronizzati da un processo esterno", in cui un determinato server potrebbe (teoricamente) servire l'intero universo in caso di emergenza.

Nel nostro caso, a causa della natura di radmind, abbiamo semplicemente rsynctrascrizioni e file di dati da un master approvato al server radmind di ciascun sito remoto e i client estraggono i loro aggiornamenti dal server con un nome host breve radmind(attraverso la magia di resolv.confciò si valuta radmind.[sitename].mycompany.com- sempre il locale server radmind: se il server locale è inattivo è abbastanza facile sovrascrivere e puntare a qualsiasi altro server del sito).

Questo tipo di processo rsync probabilmente funzionerebbe anche nella tua situazione, ma è probabilmente non ottimale rispetto a una soluzione basata sul controllo della versione.


Per Puppet o Chef un sistema basato sul controllo della versione ha più senso del semplice rsync per alcuni motivi - il più grande è che stai controllando gli script di marionette (piuttosto che intere immagini del sistema operativo come faresti con radmind).
Come ulteriori vantaggi della gestione basata sul controllo delle versioni puoi avere più persone che lavorano contemporaneamente sul repository (grande vittoria per il parallelismo), ottieni la cronologia delle revisioni essenzialmente gratuitamente e se qualcuno rompe l'ambiente Puppet hai un facile rollback (presumendo che tu ' riutilizzandoti githai anche quello git blameche fa quello che dice sulla scatola).
La ramificazione e la fusione creative ti consentono persino di gestire un importante aggiornamento del sistema operativo o un'altra transizione all'interno del framework di controllo della versione: una volta che hai capito bene basta passare al nuovo ramo e (si spera) la spinta di produzione funzionerà.

Se lo avessi implementato qui probabilmente avrei sfruttato gli hook pre-commit e post-commit in git per assicurarmi che le configurazioni fantoccio impegnate fossero sane (pre lato client) e spingerle fuori nel resto dell'universo se sono (post sul lato server - eventualmente anche l'attivazione di un aggiornamento dell'ambiente se i criteri di distribuzione consentono tale comportamento).

In termini di creazione di nuovi server fantoccio per ciascun sito, puoi semplicemente controllare l'ambiente fantoccio per ciascun fantoccio remoto e utilizzare l'hacking resolv.conf / hostname che ho descritto sopra o qualsiasi IP di servizio di reindirizzamento reindirizzato a sistemi locali come suggerito da Michuelnik ( quest'ultimo è utile se si desidera il failover automatico se il burattinaio di un sito esplode) per assicurarsi che ogni sito veda il burattinaio "giusto" e non intasare i collegamenti WAN nel tentativo di ottenere aggiornamenti.


Le persone di Brain Tree Payments hanno apparentemente combinato il controllo della versione e le soluzioni rsync insieme ad alcune attività personalizzate di Capistrano: la loro soluzione sembra semi-cotta, nel senso che si basa ancora su elementi del flusso di lavoro manuale, ma potrebbe essere adattata e automatizzata senza troppo lavoro.
Il tester paranoico compulsivo in me ha una predilezione per il loro nooppasso di controllo di sanità mentale - i processi di odio dei manuali in me desiderano un certo livello di automazione attorno ad esso ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.