Hot clone un servizio Linux vivente


14

Dobbiamo clonare a caldo un servizio Linux quando è in vita, non solo per non poter riavviare o qualcosa del genere; è solo a causa del nostro scenario speciale (sì, ho già letto questa risposta, ma è un po 'diverso dal mio Clone un server Linux funzionante ).

Abbiamo un nodo di calcolo, puoi dire un nodo di calcolo NLP che esegue alcuni modelli su di esso. Quando avvieremo il nodo (con un servizio ovviamente), il calcolo sarà orribile lento fino a quando non lo alimenteremo più volte. L'abbiamo chiamato warm-up.

Sfortunatamente, il processo di riscaldamento impiega molto tempo ad attendere (forse il nostro calcolo è terminato prima del riscaldamento del nodo).

Quindi, il problema si presenta, esiste un modo stabile per clonare a caldo un server Linux per mantenere il nodo con le migliori prestazioni in modo che possiamo clonarlo e renderlo online in un tempo più breve?


Sarebbe utile visualizzare la macchina e scattare un'istantanea dello stato "riscaldato"?
TripeHound

13
Capisci perché questo riscaldamento si verifica? Ad esempio, potrebbe essere un effetto collaterale della cache dei file. Ma alcune risposte alle macchine di clonazione scartano la cache dei file, perché una cache per definizione può essere ricostruita dall'originale sottostante.
MSalter

fork () è un modo per creare più processi su una determinata macchina salvando qualsiasi overhead di avvio.
Ancora un altro utente il

grazie gente, @TripeHound, ho chiesto a un mio amico che lavora in VMWare, e ha detto che sembra impossibile per loro semplicemente fotografare lo stato "riscaldato", né alcune cose speculari. MSalter, non sono sicuro al 100% di cosa accada durante il riscaldamento, ma sembra che dopo il servizio sia terminato, alcuni lavori di caricamento pigri funzionano dopo che il lavoro di calcolo comporta
chen steven,

2
Ignaro della tua configurazione in background, ma questo puzza di una situazione in cui il tuo server non deve mai andare giù. Ciò suggerisce che il kernel del tuo host potrebbe essere antico e che gli aggiornamenti non sono mai stati applicati. Forse questo è un indicatore di un difetto di progettazione sistemica che deve essere considerato.
Criggie,

Risposte:


28

Forse non puoi "clonare a caldo" un intero server (puoi, ma solo se si tratta di una macchina virtuale), ma puoi bloccare e ripristinare un singolo processo, con criu , Checkpoint / Restore in Userspace.

Ciò consente di salvare lo stato interno del programma su disco e arrestare il programma e, successivamente, ripristinare il programma a quello stato dai file salvati.

Per supportare l'operazione desiderata, è possibile copiare i file che rappresentano il programma salvato su un altro server e ripristinarlo lì.

criu richiede un kernel recente con varie funzionalità compilate, quindi le vecchie distribuzioni Linux potrebbero non funzionare. È possibile eseguire criu checksu un determinato computer per determinare se sono presenti i prerequisiti per criu.


sembra impressionante e lo farò alcuni test su questo, grazie bro
Chen Steven

In base alla tua esperienza, quanto funziona in pratica? Osservando le limitazioni criu list (che sono praticamente quelle che mi aspetto - questo è un problema difficile), ho la sensazione che sia improbabile che funzioni con applicazioni che non sono state progettate tenendo presente questo caso d'uso.
James_pic,

@James_pic È passato forse un anno da quando l'ho esaminato seriamente, dato che al momento non ne ho più bisogno. Per un demone che accetta solo connessioni e esegue alcuni calcoli (ad es. Il lavoro di machine learning dell'OP o un server Web) funziona abbastanza bene.
Michael Hampton

12

Potrebbe essere un po 'al di fuori del tuo ambiente attuale, ma il modo standard del settore per farlo è virtualizzare il tuo server. Molti host di virtualizzazione (VMware, virtualbox, ecc.) Consentono "istantanee" che salvano lo stato di un server, che possono quindi essere clonati in nuove istanze. Queste nuove istanze avranno esattamente lo stesso stato dell'originale, fino ai processi in esecuzione. Ovviamente vorrai assicurarti che il software che stai eseguendo continuerà a funzionare correttamente in un ambiente virtuale (mi viene in mente il calcolo CUDA / GPU).


La virtualizzazione è eccezionale, fino a quando il software (o le sue dipendenze) non richiede un aggiornamento e non fornisce un meccanismo di ricarica gradevole. Un'istantanea della macchina virtuale o una migrazione live esegue il vecchio codice.
John Mahowald,

Per me è sia accettabile eseguire il progetto in una "vera" macchina o host di virtualizzazione, e possiamo prendere diversi modi per gestire le "vecchie" cose del codice, forse test A / B o aggiornamento in continuo .etc. Ma sei sicuro che le istantanee possano clonare totalmente lo stato riscaldato del mio nodo di lavoro?
Chen Steven,

3
Quando si esegue la migrazione in tempo reale di una macchina, è necessario metterla in pausa. Mentre è in pausa, la sua memoria viene copiata 1: 1 su un'altra macchina in un cluster, dove non è in pausa - intatta. Questo può richiedere del tempo a seconda della quantità di memoria in uso e della velocità della rete. Potresti essere in grado di utilizzare questo metodo se il tempo di inattività che invoca è abbastanza basso per le tue esigenze.
Spooler

@chensteven Di recente vengo da un ambiente virtualbox. È stato qualche tempo fa, ma da quello che ricordo un'istantanea in esecuzione contiene lo stato esatto della VM al momento in cui è stata scattata l'istantanea, inclusi i processi in esecuzione e il contenuto della memoria. Questa istantanea può quindi essere clonata su una nuova VM, dandoti due macchine esattamente nello stesso stato.
cawwot

3

La domanda che menzioni si riferisce a un link, http://www.linuxfocus.org/English/March2005/article370.shtml , che descrive tutti i modi in cui avevo immaginato di fare le tue richieste.

Che le opzioni ci siano non significa molto per ciò che è in esecuzione sul server. Devi considerare che tutti i file che potrebbero cambiare nel processo di clonazione potrebbero essere file incoerenti sul computer di destinazione. Su quel post che fornite parlano di database e la clonazione in questo modo non fornisce alcuna assicurazione di integrità dei dati.

Non è esattamente chiaro cosa intendevi con "finché non lo nutriamo più volte" .

Ma se ho capito bene cosa mi chiedi, devi considerare che per clonare un sistema è necessario il tempo per copiare e calcolare le risorse.

Per eseguire un "ON / OF" o meglio definito un ambiente attivo / di backup, il server deve essere configurato correttamente nel cluster.

Mi dispiace se non è la risposta che ti aspetti, ma le opzioni che ottieni sono quelle.


È colpa mia se ti confondo un po 'qui, la roba "feed" significa che, dopo l'avvio del mio servizio, abbiamo bisogno di invocare le attività di calcolo più volte per assicurarci che il nodo sia "riscaldato" nelle massime prestazioni. Quindi il problema qui è come il clone dinamico o l'espansione per i nostri lavori viventi come se il gran numero di richieste colpisse il nostro sistema, non avremo abbastanza tempo per impostare nuovi nodi di calcolo (il riscaldamento richiede troppo tempo) per gestiscili, sai, proprio come le onde che arrivano
chen steven,

1

Ci sono molti potenziali problemi con ciò che stai cercando di fare e, naturalmente, come sai, sarebbe meglio portare il server offline e clonarlo mentre nessun dato viene archiviato dinamicamente.

Tuttavia, ciò che cerchi di fare è del tutto plausibile, come ho già fatto prima. Se lo si utilizza ddè possibile clonare l'intero server a livello di blocco su un'altra unità o un altro server. Ci vorrà comunque qualche configurazione aggiuntiva sul nuovo server, e probabilmente non sarai in grado di spegnere semplicemente l'altro e quello nuovo. Per consentirci di capirlo, dobbiamo sapere alcune cose sull'hardware e sul software del tuo server.

In primo luogo, al fine di determinare la migliore strategia per i dati, sarebbe utile sapere cosa viene aggiornato regolarmente. Hai un server SQL che si aggiorna in modo dinamico ma ha contenuto statico? In alternativa, hai un team di sviluppatori su un sistema di sovversione come Git che invia costanti aggiornamenti di dati ai tuoi contenuti? A seconda dell'aggiornamento, determinerà il miglior modo di agire.

Se, ad esempio, è solo l'SQL che si aggiorna regolarmente, è possibile migrare su un nuovo server mentre quel server è attivo nel modo seguente:

  • dd per clonare tutti i dati sul nuovo server.
  • Inizia a configurare il nuovo server, potrebbe essere necessario un po 'di lavoro soprattutto se si tratta di hardware diverso, ma potrebbe comunque essere più veloce della configurazione da zero.
  • Potrebbero inoltre essere necessarie alcune modifiche al DNS, poiché non è possibile utilizzare lo stesso DNS su un altro server se è necessario lavorare sul secondo server mentre il primo è ancora attivo.
  • Dopo che il nuovo server è completo e in esecuzione in modo indipendente, eseguire un backup finale del server sql sul server originale e importarlo nel nuovo server.

Potrebbe essere necessario portare temporaneamente offline il server originale per assicurarsi di non perdere alcun dato. In alternativa, per avere tempi di inattività pari a zero, è possibile rendere attivo il secondo, puntare i DNS sul nuovo server e quindi aggiornare manualmente tutte le voci DNS sul nuovo server, in modo da ridurre effettivamente i tempi di inattività. Questo è più fastidioso di qualche minuto di downtime per il backup di sql e il ripristino sul nuovo server, ma può essere necessario per zero downtime.

Questo ovviamente è solo un esempio di caso d'uso e, a seconda della configurazione e di diverse variabili, potrebbe essere necessario creare la propria strategia per la migrazione in base al caso specifico.

L'altro problema riguarda la configurazione hardware del server. Il nuovo server è identico al 100% nell'hardware al vecchio server? In tal caso, l'installazione è più semplice. Tuttavia, se invece è una configurazione hardware totalmente diversa, potrebbe essere necessario implementare una strategia diversa che consiste semplicemente nell'impostare il secondo server in anticipo, quindi eseguire il backup di tutti i dati e i database sql su il primo server e migrarli manualmente, modificando la configurazione come desiderato.

La migrazione dei server non è affatto banale e per avere successo, è necessario avere una conoscenza approfondita dei server o del personale che ha gli stessi. In ogni caso, si consiglia vivamente di eseguire immediatamente un backup completo e di memorizzarlo su una terza fonte, anche sul computer locale, in modo che se si verifica lo scenario peggiore (entrambi i server si bloccano e muoiono irreparabilmente), si ha ancora un altro copia dei tuoi dati con cui ricostruire i tuoi server.

Spero che questo ti aiuti, e buona fortuna con lo spostamento del tuo server!

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.