distribuzione linux automatizzata e gestione della configurazione su piccola scala - ne vale la pena?


24

Sto per distribuire ~ 25 server con Debian . Le macchine avranno ruoli diversi: server Web, server di applicazioni Java, proxy, caselle MySQL. L'ambiente probabilmente non crescerà molto in futuro - forse 2-5 server in più nei prossimi 2 anni.

Probabilmente userò fai per l'installazione del sistema, ma non sono sicuro se valga la pena aggiungere anche cfengine o la gestione centralizzata della configurazione di marionette per una scala così ridotta.

La gestione della configurazione ha senso per un ambiente di queste dimensioni?

Risposte:


29

Consiglierei di usare una miscela di pre-seeding Debian, in cui dai all'installatore un file di testo che risponda a tutte le domande che porrebbe e Puppet.

La ragione per usare la preconfigurazione, piuttosto che il FAI è che non devi prima impostare un'immagine e occuparti di tenerla aggiornata. Ti ritroverai con un'installazione molto simile a quella che avresti se li avessi fatti tutti a mano. Quando verrai a installare una nuova versione, dovrai aggiornare un file di configurazione con le modifiche, anziché dover ricostruire una nuova immagine.

Uno strumento di gestione della configurazione è particolarmente utile quando si hanno diversi server che svolgono lo stesso ruolo e si desidera che siano identici, ad esempio cluster di server Web. Tuttavia, possono anche essere utili per configurare l'installazione di base di tutti i server. Avrai voglia di installare pacchetti particolari su tutti i tuoi server, come ntpd e un MTA. Vuoi cambiare un file di configurazione su tutti i tuoi server. Un ulteriore vantaggio è che puoi mantenere i tuoi manifest in qualcosa come sovversione e tenere traccia di ciò che è cambiato su un server, di chi è stato e perché. La gestione della configurazione può anche salvare la vita in caso di un errore del server ed è necessario ricostruirla rapidamente. Installa il sistema operativo (usando FAI o preconfigurazione), installa il pupazzo e via, costruito esattamente come prima. Ovviamente dovrai conservare i backup dei dati.

La gestione della configurazione richiede dedizione per essere sicuri di apportare modifiche solo utilizzando tale opzione e avere un costo iniziale per l'impostazione delle cose, ma una volta che hai una configurazione funzionante non te ne pentirai.

Puppet è il più moderno dei due strumenti che hai citato. Lo consiglio davvero a chiunque. La configurazione è un linguaggio dichiarativo ed è facile da costruire costrutti di livello superiore. C'è anche una comunità molto grande attorno ad essa e ci sono sempre persone benvenute per aiutare nella mailing list o sul canale IRC.


grazie per il suggerimento sul pre-seeding. sto dando un'occhiata ai documenti in questo momento.
pQd,

FAI è vecchio skool; Non lo consiglierei sicuramente. Preseeding + Puppet ftw.
womble

Usiamo FAI e cfengine, abbiamo circa 1000 macchine e funziona molto bene. Vale la pena notare che è possibile accedere alla macchina mentre si costruisce da sola, in modo da rendere la scrittura dei micro script molto più semplice.
James,

FAI vecchio scool? NO! Il FAI è solido come una roccia e ha più di 10 anni di esperienza. Dai
Thomas Lange,

Un buon consiglio, usiamo un approccio simile e funziona bene. Tuttavia, non respingerei il FAI. FAI non utilizza immagini per l'installazione (SystemImager lo fa). Devi impostare una directory root nfs minima che viene utilizzata per eseguire il programma di installazione FAI. Il processo di installazione è automatizzato con file di configurazione ed esecuzione di vari hook definiti dall'utente. Il vantaggio rispetto alla preconfigurazione è che il concetto di classi FAI semplifica la gestione di più server (e persino stazioni di lavoro) con ruoli diversi.
JooMing,

10

Consiglierei CFengine per qualsiasi ambiente che contenga più di 2-3 scatole e in cui si abbia un concetto di "modelli" o server che svolgono ruoli specifici.

Perché? In poche parole riduce gli errori, si dispone di uno strumento che garantisce che le autorizzazioni per file / directory siano corrette ovunque nell'ambiente e quando si arriva a implementare più server, lo strumento gestisce assolutamente tutto e non commette mai errori.

In contrasto con persino un abile amministratore di sistema che stende un server Web alla fine di un turno di dodici ore quando le cose sono già andate male ... È probabile che si ricordino quel piccolo file di configurazione che deve andare in / etc / random / location / foo / bar altrimenti l'applicazione non riuscirà silenziosamente a fare qualcosa di piuttosto importante, come fatturare i clienti? :)

Strumenti come CFengine sono anche un ottimo modo per eseguire aggiornamenti di sicurezza a livello di ambiente. Far cadere una configurazione Nagios (NRPE) su tutte le scatole è anche un gioco da ragazzi. Sia che tu abbia a che fare con cinque scatole o cinquecento scatole , risparmierai tempo con CFengine.

Probabilmente vale la pena notare che il mio ambiente è un po 'più grande, tuttavia ho anche distribuito CFengine per ambienti più piccoli di quanto noti, quindi la raccomandazione!

Probabilmente la tua prossima domanda sarà CFengine vs Puppet? Questa è una decisione più difficile, e sono sempre andato su CFengine a causa (nei primi giorni) di un po 'di immaturità da Puppet, in particolare per quanto riguarda la registrazione degli errori .... in questi giorni non sono davvero sicuro - hai un gioco e vedi? Guardando indietro ai miei problemi specifici con Puppet, erano relativi al certificato SSL, ricordando dolorosamente ancora il tempo che ho trascorso 3 ore a diagnosticare i problemi di connettività del server <-> client in irc.freenode.net/#puppet con alcuni RTFM e RTFS pesanti solo per trovare un errore, non registrato, e Luke disse: "Ah, è davvero difficile da risolvere" e non l'ha mai fatto. :(


buon punto. il problema è che nel mio caso le cose saranno altamente specializzate, il numero di modelli [a causa della ridondanza] sarà probabilmente intorno a n / 2 [dove n è il numero totale di server].
pQd

1
Non è una cosa negativa, la maggior parte dei miei cluster WWW sono n + 2 se non n / 2 e puoi essere abbastanza flessibile con CFengine nella distribuzione di nodi dietro i tuoi sistemi di bilanciamento del carico come HAproxy. È perfettamente fattibile gestire anche IPVS e cose keepalive :-) Anche con requisiti di ridondanza n / 2 scommetterei che hai molti file di configurazione identici o simili nel tuo ambiente? Ricorda che con CFengine hai lo strumento 'editfiles' per fare cose come un file di configurazione "templated" contenente qualcosa come IP e quindi (in fase di esecuzione) trovare e sostituire con le informazioni giuste. ;)
nixgeek,

@astinus grazie per i tuoi commenti. ho anche un po 'paura di ridurre la mia produzione con un errore nella configurazione centrale. cosa pensi della disabilitazione del polling automatico della configurazione e della registrazione su ciascuna macchina e costringendolo ad aggiornare e controllare manualmente se tutto va bene? [sì, avrò anche nagios / monitoraggio personalizzato in atto ... ma comunque].
pQd

1
Penso che la fiducia nelle tue tecniche di gestione della configurazione arrivi con il tempo, ma nel frattempo disabilita semplicemente il polling automatico delle caselle e usa 'cssh' per accedere a ciascuna classe di caselle per eseguire 'cfagent -qv' (o qualunque altra cosa!) Quando vuoi spingere aggiornamenti. Se si desidera un suggerimento per aumentare la fiducia, distribuire una macchina virtuale come ambiente di "gestione temporanea" e assicurarsi che tutte le modifiche vengano apportate per prime. Abbastanza facile se mantieni la tua configurazione CFengine o Puppet in Subversion, usa solo rami e tag.
nixgeek,

Raccomanderò anche l'uso di SLACK per semplificare in modo ridicolo (re) installazione, gestione della configurazione. È disponibile qui: sundell.net/~alan/projects/slack
HK_

5

Oltre a cfengine e burattino, c'è anche lo chef . Consiglio vivamente di utilizzare uno di questi strumenti poiché le cose cresceranno sempre in direzioni inaspettate. Questo aiuta a gestire le cose in una posizione centralizzata.

La cosa importante da riconoscere è che è probabile che non otterrai tutto, ma se riesci ad ottenere almeno il 90% lì, è un inizio. Inoltre, è divertente e ti semplificherà la vita nel lungo periodo. Infine, è una buona abilità andare avanti.


chef è una recente entrata nella scena della gestione della configurazione. È progettato per essere configurato scrivendo ruby ​​per fare quello che vuoi, al contrario del linguaggio dichiarativo personalizzato delle marionette. Il tempo dirà quale metodo funziona bene. Attualmente mi siedo nel campo delle marionette.
David Pashley,

3

Sto usando cfengine da 5 anni per installare Debian (da Woody a Lenny al giorno d'oggi). Con etch ho creato un debian-installer personalizzato. Grazie a preconfigurato sorge una sola domanda: "qual è il nome host". Successivamente cfengine configura l'intero server (dns + dhcp con utenti e password dnssec, samba, ntpd, default (Samba), ssh, openvpn, apache vHosts, backup con rsnapshot su LVM, webminmodules personalizzati ecc.).

Anche quando installo solo un server uso cfengine-script dalla mia cassetta degli attrezzi in questo modo:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Mi piace cfengine, perché gli script cf2 sono in qualche modo leggibili dall'uomo.

quindi vale sicuramente la pena lavorare con strumenti per la gestione automatica della configurazione.

/ thorsten


2

Ne vale la pena anche per un piccolo sito. Si tratta di coerenza man mano che cresci. E sai che il tuo sito crescerà. Meglio iniziare mentre sei ancora piccolo. Cfengine è eccezionale. Soprattutto la versione 3, che può gestire tutti i gestori di pacchetti in tutto il campo, ed è davvero leggera e sicura e "funziona". Puppet non ha prodotto ciò che affermava. Non ho provato lo Chef.

Il vantaggio di cfengine rispetto agli altri è che è ultra leggero ma in realtà ha più capacità. La sua sicurezza è come ssh, piuttosto che i certificati web usati da Puppet. Quando ho detto al mio capo di cfengine ha pensato che fosse fantascienza :) Se stai cercando qualcosa di futuristico, prova a leggere alcuni dei documenti di ricerca di Marc Burgess. Roba forte.


1

Lo strumento numero uno che vorrei avere quando si esegue un piccolo sito è build "a pulsante". Semplifica l'applicazione di patch, aggiornamenti e ricostruzioni, che in futuro possono risolvere una miriade di altri problemi.

Nessun SSH installato correttamente su tutte le scatole? niente arricciatura / wget / vim? che dire di altri strumenti interni che vorresti avere su ogni scatola?

La gestione centralizzata dei tuoi server è uno dei primi strumenti che dovresti avere per lavorare per rendere gli sforzi futuri molto più facili.


1

Sono d'accordo con tutti qui. Dovresti iniziare a imparare e creare un'infrastruttura funzionante quando non sei troppo grande. Perché allora sei preparato quando cresci.

A seconda di ciò che vuoi eseguire, sceglierei FAI, cfengine e pre-seeding per Debian / Ubuntu. Il FAI può funzionare con molti strumenti diversi, quindi è un buon inizio per qualsiasi distribuzione simile a Debian. Con la configurazione controllata dalla classe FAI (e cfengine), puoi facilmente dividere le tue installazioni in piccoli moduli, che puoi selezionare quale usare per ciascuna macchina. In questo modo, sarà utile anche se hai molte macchine diverse. In realtà è più utile, poiché documenterai l'installazione con questi script. E quando installi su un nuovo computer, non dimenticherai nulla.

Sì, DOVREBBE avere alcune macchine su cui eseguire i test prima di distribuire le modifiche in un'installazione live. Ma con uno script di configurazione come questo, non dimenticherai di fare alcun passo nell'installazione live.

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.