Console - Eventi di failover

In questo capitolo impareremo gli eventi di failover in Console. Questo sarà fatto con l'aiuto delle seguenti funzionalità:

  • Errore del singolo cluster
  • Jepsen Testing
  • Errore di più cluster
  • Scattare istantanee

Cerchiamo di capire ciascuno di questi in dettaglio.

Errore del singolo cluster

In un singolo errore del cluster, il cluster posizionato in uno dei data center inizia a non funzionare. In ogni caso, è importante assicurarsi che in caso di failover il sistema non possa solo prevenirlo, ma anche avere un backup su cui fare affidamento. Per prevenire eventi di Console Failover, useremo qualcosa chiamato come Consul-alert. Il progetto principale può essere trovato su -https://github.com/AcalephStorage/consul-alerts.

Consul-alerts è un demone altamente disponibile per l'invio di notifiche e promemoria basati sui controlli di integrità del console. Questo progetto esegue un daemon e un'API su localhost: 9000 e si connette all'agente console locale (localhost: 8500) con il datacenter predefinito (dc1).

Esistono due metodi per iniziare con il progetto. Il primo metodo è installarlo tramiteGO. Per gli utenti che hanno installato e configurato GO, possono seguire i passaggi indicati di seguito:

$ go get github.com/AcalephStorage/consul-alerts
$ go install
$ consul-alerts start

L'ultimo comando può essere facilmente utilizzato per sovrascrivere le porte predefinite per avviso console, opzione datacenter, token console-acl, ecc. Il comando può anche essere scritto come indicato di seguito:

$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500
--consul-dc = dc1 --consul-acl-token = ""

Il secondo metodo prevede che l'utente utilizzi Docker. Entrambi i metodi sono ugualmente utili in diversi scenari. Per utilizzare Consul-alerts su Docker, estraiamo l'immagine dall'hub Docker utilizzando il seguente comando.

$ docker pull acaleph/consul-alerts

Nel metodo Docker, possiamo considerare le seguenti tre opzioni:

  • Utilizzando Consul Agent che è costruito nel container stesso.
  • Utilizzando il Consul Agent in esecuzione su un altro Docker Container.
  • Utilizzo degli avvisi di console per collegarsi a un'istanza di console remota.

Discutiamo ora entrambi in dettaglio.

Utilizzando Consul Agent che è costruito nel container stesso

Avviamo l'agente console utilizzando il seguente comando:

$ docker run -ti \
   --rm -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \  
   --entrypoint = /bin/consul \
   acaleph/consul-alerts \
   agent -data-dir /data -server -bootstrap -client = 0.0.0.0

Qui, stiamo ignorando il entrypoint per Console come menzionato dalla bandiera --entrypoint. Insieme ad esso, stiamo avviando il client menzionando la porta utilizzata utilizzando-p flag, data directory /data utilizzando il flag -data-dir e client come 0.0.0.0.

In una nuova finestra di terminale, avvia l'opzione di avvisi di console.

$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000
--log-level = info --watch-events --watch-checks

Qui, nei passaggi precedenti, stiamo eseguendo gli avvisi del console per iniziare in modalità interattiva. La porta dell'indirizzo di avviso è indicata come 9000. L'orologio controlla se gli agenti del console sono abilitati o meno insieme ai controlli del console.

Possiamo vedere chiaramente che gli avvisi del console sono stati avviati facilmente e ha registrato un nuovo controllo sanitario con l'aggiunta dell'agente del console. Il datacenter viene considerato come dc1, che può essere modificato in base all'utente.

Utilizzando il Consul Agent in esecuzione su un altro Docker Container

Qui puoi utilizzare qualsiasi tipo di immagine console da eseguire sul Docker Container. Utilizzando l'immagine degli avvisi della console, possiamo facilmente collegare il contenitore degli avvisi della console al contenitore degli avvisi della console. Questo viene fatto usando il--link flag.

Note - Prima di utilizzare il seguente comando, assicurati che il contenitore di console sia già in esecuzione su un altro terminale.

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   --link consul:consul \
   acaleph/consul-alerts start \
   --consul-addr=consul:8500 \
   --log-level = info --watch-events --watch-checks

Utilizzo degli avvisi di console per collegarsi a un'istanza di console remota

Qui, dovremmo utilizzare il seguente comando per utilizzare gli avvisi del console per collegarsi a un'istanza di console remota.

$ docker run -ti \
   -p 9000:9000 \
   --hostname consul-alerts \
   --name consul-alerts \
   acaleph/consul-alerts start \
   --consul-addr = remote-consul-server.domain.tdl:8500 \
   --log-level = info --watch-events --watch-checks

Jepsen Testing

Jespen è uno strumento scritto per testare la tolleranza parziale e il networking in qualsiasi sistema. Verifica il sistema creando alcune operazioni casuali sul sistema.Jepsen is written in Clojure. Sfortunatamente, per la demo, i test di Jepsen richiedono un enorme livello di formazione di cluster con sistemi di database e quindi non rientrano nell'ambito di applicazione per essere coperti qui.

Jepsen funziona configurando l'archivio dati in prova su cinque host diversi. Crea un client, per l'archivio dati sottoposto a test, indicando ciascuno dei cinque nodi per inviare richieste. Crea anche una serie speciale di client chiamata "Nemesis", che devastano il cluster come, tagliando i collegamenti tra i nodi utilizzandoiptables. Quindi procede a effettuare richieste simultaneamente su diversi nodi, partizionando e riparando alternativamente la rete.

Alla fine dell'esecuzione del test, cura il cluster, attende il ripristino del cluster e quindi verifica se lo stato intermedio e finale del sistema è quello previsto. Alcuni estratti sono stati presi da qui .

Per maggiori informazioni sui test Jepsen, controlla qui .

Errore di più cluster

Durante un evento di failover di più cluster, i cluster distribuiti in più datacenter non riescono a supportare i servizi supportati dal cliente. Consul ci consente di garantire che, quando si verifica una di queste condizioni, Consul abbia funzionalità che ti aiutano ad abilitare i servizi in questo tipo di condizioni.

Affinché ciò avvenga, esamineremo un progetto che ci aiuti a consentire la replica di Console da un cluster a più cluster. Il progetto ci fornisce un modo per replicare le coppie K / V su più data center Consul utilizzando il demone di replica console. Puoi visualizzare questo progetto Hashicorp su -https://github.com/hashicorp/consul-replicate. Alcuni dei prerequisiti per provare questo progetto includono:

  • Golang
  • Docker
  • Consul
  • Git

Cominciamo con i seguenti comandi:

Note - Prima di eseguire il seguente comando, assicurati di avere Git correttamente installato e configurato sulla tua macchina.

$ git clone - https://github.com/hashicorp/consul-replicate.git

L'output sarebbe come mostrato nello screenshot seguente.

$ cd consul-replicate
$ make

L'output sarebbe come mostrato nello screenshot seguente.

Se hai qualche problema a costruire il binario, puoi anche provare a estrarre manualmente le immagini Docker usando il seguente comando:

$ docker pull library/golang:1.7.4

Il comando sopra menzionato creerà bin / consul-replicate, che può essere richiamato come binario. La tabella seguente mostra l'elenco completo dei sottocomandi che copre:

Opzione Descrizione
auth Il nome utente di autenticazione di base (e la password opzionale), separati da due punti. Non esiste un valore predefinito.
console * La posizione dell'istanza di console da interrogare (può essere un indirizzo IP o un FQDN) con la porta.
max-stantio La massima stoltezza di una query. Se specificato, Consule distribuirà il lavoro su tutti i server anziché solo sul leader. Il valore predefinito è 0 (nessuno).
ssl Usa HTTPS mentre parli con il Console. Richiede che il server della console sia configurato per le connessioni protette del server. Il valore predefinito è falso.
ssl-verify Verifica i certificati durante la connessione tramite SSL. Ciò richiede l'uso di -ssl. Il valore predefinito è vero.
syslog Invia l'output del log a syslog (oltre a stdout e stderr). Il valore predefinito è falso
syslog-facility La funzionalità da utilizzare durante l'invio a syslog. Ciò richiede l'uso di -syslog. L'impostazione predefinita è LOCAL
gettone Il token API Consul. Non esiste un valore predefinito.
prefisso * Il prefisso di origine incluso il, con le opzioni prefisso di destinazione, separato da due punti (:). Questa opzione è additiva e può essere specificata più volte per la replica di più prefissi.
escludere Un prefisso da escludere durante la replica. Questa opzione è additiva e può essere specificata più volte per escludere più prefissi.
aspettare Il minimo (: massimo) per attendere la stabilità prima di replicare, separato da due punti (:). Se il valore massimo opzionale viene omesso, si presume che sia 4 volte il valore minimo richiesto. Non esiste un valore predefinito.
riprova La quantità di tempo da attendere se Consule restituisce un errore durante la comunicazione con l'API. Il valore predefinito è 5 secondi.
config Il percorso di un file di configurazione o directory di file di configurazione su disco, relativo alla directory di lavoro corrente. I valori specificati sulla CLI hanno la precedenza sui valori specificati nel file di configurazione. Non esiste un valore predefinito.
a livello di registro Il livello di log per l'output. Ciò si applica alla registrazione stdout / stderr e alla registrazione syslog (se abilitata). I valori validi sono "debug", "info", "warn e" err ". Il valore predefinito è" warn ".
una volta Esegui Consule Replicate una volta ed esci (al contrario del comportamento predefinito del demone). (Solo CLI)
versione Visualizza le informazioni sulla versione ed esci. (Solo CLI)

Scattare istantanee

Le istantanee sono una parte essenziale e importante per la gestione del cluster Consul in caso di backup. Per impostazione predefinita, Console ci fornisce un modo per salvare le istantanee del cluster di console. Console ci fornisce quattro comandi secondari separati utilizzando i quali possiamo usare console per creare istantanee, che sono:

  • Salvataggio istantanea del console
  • Agente snapshot del console
  • Ispezione istantanea del console
  • Ripristino snapshot del console

Cerchiamo di capire ciascuno di questi in dettaglio.

Salvataggio istantanea del console

Questo comando è impostato per recuperare un'istantanea atomica point-in-time dello stato dei server Consul, che include voci chiave / valore, catalogo servizi, query preparate, sessioni e ACL. L'istantanea viene salvata nel nome file menzionato.

$ consul snapshot save <name-of-the-file>.snap

L'output sarebbe come mostrato nello screenshot seguente.

Per verificare la presenza del file nella directory corrente, verificarlo eseguendolo nella directory corrente. Nel caso di un nodo non leader, eseguire il seguente comando:

$ consul snapshot save -stale <name-of-file>.snap

Consulente Snapshot

Questo sottocomando avvia un processo che acquisisce istantanee dello stato dei server Consul e le salva localmente o le invia a un servizio di archiviazione remoto opzionale.

Ispezione istantanea del console

Viene utilizzato per esaminare l'istantanea point-in-time dello stato dei server Consul, che include voci chiave / valore, catalogo servizi, query preparate, sessioni e ACL. Il comando può essere eseguito come segue:

Note - Ricorda che il seguente comando può essere eseguito solo nella Directory, dove viene salvata l'istantanea.

$ consul snapshot save <name-of-the-file>.snap

L'output sarebbe come mostrato nello screenshot seguente.

Ripristino istantanea console

Il comando snapshot restore viene utilizzato per ripristinare un'istantanea point-in-time dello stato dei server Consul, che include voci chiave / valore, catalogo servizi, query preparate, sessioni e ACL. L'istantanea viene letta dal file di backup salvato.

Note - Ricorda che il seguente comando può essere eseguito solo nella directory in cui viene salvata l'istantanea.

$ consul snapshot restore <name-of-the-file>.snap

L'output sarebbe come mostrato nello screenshot seguente.

Se stai lavorando su Consul con AWS, questo progetto potrebbe aiutarti a risparmiare tempo - https://github.com/pshima/consul-snapshot.