Informazioni sulla manutenzione di ZooKeeper

Gli ensemble ZooKeeper sono progettati per rimanere funzionali, senza perdita di dati, nonostante la perdita di uno o più nodi ZooKeeper. Questa resilienza può essere utilizzata in modo efficace per eseguire la manutenzione sui nodi ZooKeeper senza tempi di inattività del sistema.

Informazioni su ZooKeeper ed Edge

In Edge, i nodi ZooKeeper contengono dati di configurazione sulla posizione e sulla configurazione dei vari componenti Edge e notificano ai diversi componenti le modifiche alla configurazione. Tutte le topologie Edge supportate per un sistema di produzione utilizzano almeno tre nodi ZooKeeper.

Utilizza le proprietà ZK_HOSTS e ZK_CLIENT_HOSTS nel file di configurazione di Edge per specificare i nodi ZooKeeper. Ad esempio:

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Dove:

  • ZK_HOSTS specifica gli indirizzi IP dei nodi ZooKeeper. Gli indirizzi IP devono essere elencati nello stesso ordine su tutti i nodi ZooKeeper.

    In un ambiente con più data center, elenca tutti i nodi ZooKeeper di tutti i data center.

  • ZK_CLIENT_HOSTS specifica gli indirizzi IP dei nodi ZooKeeper utilizzati solo da questo data center. Gli indirizzi IP devono essere elencati nello stesso ordine su tutti i nodi ZooKeeper nel data center.

    In un'installazione di un singolo data center, questi sono gli stessi nodi specificati da ZK_HOSTS. In un ambiente con più data center, il file di configurazione Edge per ogni data center deve elencare solo i nodi ZooKeeper per quel data center.

Per impostazione predefinita, tutti i nodi ZooKeeper sono designati come nodi voter. Ciò significa che i nodi partecipano tutti all'elezione del leader di ZooKeeper. Puoi includere il modificatore :observer con ZK_HOSTS per indicare che il nodo è un nodo osservatore e non un votante. Un nodo osservatore non partecipa all'elezione del leader.

In genere, specifichi il modificatore :observer quando crei più data center perimetrali o quando un singolo data center ha un numero elevato di nodi ZooKeeper. Ad esempio, in un'installazione Edge con 12 host e due data center, ZooKeeper sul nodo 9 nel data center 2 è l'osservatore:

Poi, utilizza le seguenti impostazioni nel file di configurazione per il data center 1:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Per il data center 2:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

Le sezioni seguenti contengono ulteriori dettagli sui nodi leader, votante e osservatore e descrivono le considerazioni sull'aggiunta di nodi votanti e osservatori.

Informazioni su leader, follower, votanti e osservatori

In un'installazione ZooKeeper multi-nodo, uno dei nodi viene designato come leader. Tutti gli altri nodi ZooKeeper sono designati come follower. Mentre le letture possono avvenire da qualsiasi nodo ZooKeeper, tutte le richieste di scrittura vengono inoltrate al leader. Ad esempio, viene aggiunto un nuovo processore di messaggi a Edge. Queste informazioni vengono scritte nel leader ZooKeeper. Tutti i follower replicano quindi i dati.

Al momento dell'installazione di Edge, designi ogni nodo ZooKeeper come votante o osservatore. Il leader viene quindi eletto da tutti i nodi ZooKeeper votanti. L'unico requisito per l'elezione di un leader è che sia disponibile un quorum di nodi di voto ZooKeeper funzionanti. Un quorum significa che più della metà di tutti i nodi ZooKeeper votanti, in tutti i data center, è funzionante.

Se non è disponibile un quorum di nodi votanti, non è possibile eleggere un leader. In questo scenario, ZooKeeper non può gestire le richieste. Ciò significa che non puoi effettuare una richiesta al server di gestione Edge, elaborare richieste API o accedere alla UI Edge finché non viene ripristinato il quorum.

Ad esempio, in un'installazione di un singolo data center:

  • Hai installato tre nodi ZooKeeper
  • Tutti i nodi ZooKeeper sono votanti
  • Il quorum è di due nodi votanti funzionanti
  • Se è disponibile un solo nodo votante, l'ensemble ZooKeeper non può funzionare

In un'installazione con due data center:

  • Hai installato tre nodi ZooKeeper per data center, per un totale di sei nodi
  • Il data center 1 ha tre nodi votanti
  • Il data center 2 ha due nodi votanti e un nodo osservatore
  • Il quorum si basa sui cinque votanti in entrambi i data center ed è quindi di tre nodi votanti funzionanti
  • Se sono disponibili solo due o meno nodi votanti, l'ensemble ZooKeeper non può funzionare

Considerazioni sull'aggiunta di nodi come votanti o osservatori

I requisiti di sistema potrebbero richiedere l'aggiunta di ulteriori nodi ZooKeeper all'installazione di Edge. La documentazione relativa all'aggiunta di nodi ZooKeeper descrive come aggiungere altri nodi ZooKeeper a Edge. Quando aggiungi nodi ZooKeeper, devi tenere presente il tipo di nodi da aggiungere: votante o osservatore.

Assicurati di avere un numero sufficiente di nodi votanti in modo che, se uno o più nodi votanti non sono attivi, l'ensemble ZooKeeper possa comunque funzionare, ovvero che sia ancora disponibile un quorum di nodi votanti. Aggiungendo nodi votanti, aumenti le dimensioni del quorum e, di conseguenza, puoi tollerare un numero maggiore di nodi votanti non attivi.

Tuttavia, l'aggiunta di altri nodi votanti può influire negativamente sulle prestazioni di scrittura, perché le operazioni di scrittura richiedono che il quorum concordi sul leader. Il tempo necessario per determinare il leader si basa sul numero di nodi votanti, che aumenta man mano che aggiungi altri nodi votanti. Pertanto, non è consigliabile rendere tutti i nodi votanti.

Anziché aggiungere nodi votanti, puoi aggiungere nodi osservatori. L'aggiunta di nodi osservatore aumenta le prestazioni di lettura complessive del sistema senza aggiungere l'overhead dell'elezione di un leader, perché i nodi osservatore non votano e non influiscono sulle dimensioni del quorum. Pertanto, se un nodo osservatore non è disponibile, ciò non influisce sulla capacità dell'ensemble di eleggere un leader. Tuttavia, la perdita di nodi osservatori può causare un peggioramento delle prestazioni di lettura dell'ensemble ZooKeeper perché sono disponibili meno nodi per gestire le richieste di dati.

In un singolo data center, Apigee consiglia di non avere più di cinque votanti, indipendentemente dal numero di nodi osservatori. In due data center, Apigee consiglia di non avere più di nove votanti (cinque in un data center e quattro nell'altro). Puoi quindi aggiungere tutti i nodi osservatore necessari per i requisiti di sistema.

Rimuovi un nodo ZooKeeper

Esistono molti motivi per cui potresti voler rimuovere un nodo ZooKeeper; ad esempio, un nodo è stato danneggiato o è stato aggiunto all'ambiente sbagliato.

Questa sezione descrive come rimuovere un nodo ZooKeeper quando il nodo non è attivo e non è raggiungibile.

Per rimuovere un nodo ZooKeeper:

  1. Modifica il file di configurazione silenziosa e rimuovi l'indirizzo IP del nodo ZooKeeper che vuoi rimuovere.
  2. Esegui di nuovo il comando setup per ZooKeeper per riconfigurare i nodi ZooKeeper rimanenti:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Riavvia tutti i nodi ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. Riconfigura il nodo del server di gestione:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Riconfigura tutti i router:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Riconfigura tutti i processori di messaggi:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. Riconfigura tutti i nodi Qpid:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. Riconfigura tutti i nodi Postgres:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

Considerazioni sulla manutenzione

Puoi eseguire la manutenzione di ZooKeeper su un ensemble completamente funzionante senza tempi di inattività se la esegui su un singolo nodo alla volta. Assicurandoti che un solo nodo ZooKeeper sia inattivo alla volta, puoi garantire che sia sempre disponibile un quorum di nodi votanti per eleggere un leader.

Manutenzione in più data center

Quando lavori con più data center, ricorda che l'ensemble ZooKeeper non distingue tra i data center. Gli assembly ZooKeeper visualizzano tutti i nodi ZooKeeper in tutti i data center come un unico insieme.

La posizione dei nodi votanti in un determinato data center non è un fattore quando ZooKeeper esegue i calcoli del quorum. I singoli nodi possono non funzionare nei data center, ma finché viene mantenuto un quorum nell'intero insieme, ZooKeeper rimane operativo.

Implicazioni per la manutenzione

In vari momenti, dovrai disattivare un nodo ZooKeeper per la manutenzione, un nodo votante o un nodo osservatore. Ad esempio, potrebbe essere necessario eseguire l'upgrade della versione di Edge sul nodo, la macchina che ospita ZooKeeper potrebbe non funzionare o il nodo potrebbe non essere disponibile per qualche altro motivo, ad esempio un errore di rete.

Se il nodo che non funziona è un nodo osservatore, puoi aspettarti un leggero peggioramento delle prestazioni dell'ensemble ZooKeeper fino al ripristino del nodo. Se il nodo è un nodo votante, può influire sulla fattibilità dell'ensemble ZooKeeper a causa della perdita di un nodo che partecipa al processo di elezione del leader. Indipendentemente dal motivo per cui il nodo votante non è disponibile, è importante mantenere un quorum di nodi votanti disponibili.

Procedura di manutenzione

Esegui le procedure di manutenzione solo dopo aver verificato che un ensemble ZooKeeper sia funzionante. Ciò presuppone che i nodi osservatori siano funzionanti e che durante la manutenzione siano disponibili abbastanza nodi votanti per mantenere un quorum.

Quando queste condizioni sono soddisfatte, un insieme ZooKeeper di dimensioni arbitrarie può tollerare la perdita di un singolo nodo in qualsiasi momento senza perdita di dati o impatto significativo sulle prestazioni. Ciò significa che puoi eseguire la manutenzione su qualsiasi nodo dell'ensemble, purché venga eseguita su un nodo alla volta.

Nell'ambito della manutenzione, utilizza la seguente procedura per determinare il tipo di un nodo ZooKeeper (leader, votante o osservatore):

  1. Se non è installato sul nodo ZooKeeper, installa nc:
    sudo yum install nc
  2. Esegui questo comando nc sul nodo, dove 2181 è la porta ZooKeeper:
    echo stat | nc localhost 2181

    Dovresti visualizzare un output nel formato:

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

    Nella riga Mode dell'output per i nodi, dovresti vedere observer, leader o follower (ovvero un votante che non è il leader) a seconda della configurazione del nodo.

  3. Ripeti i passaggi 1 e 2 su ogni nodo ZooKeeper.

Riepilogo

Il modo migliore per eseguire la manutenzione di un ensemble ZooKeeper è eseguirla un nodo alla volta. Ricorda:

  • Devi mantenere un quorum di nodi votanti durante la manutenzione per garantire che l'ensemble ZooKeeper rimanga funzionale.
  • La disattivazione di un nodo osservatore non influisce sul quorum o sulla capacità di eleggere un leader.
  • Il quorum viene calcolato su tutti i nodi ZooKeeper in tutti i data center.
  • Procedi con la manutenzione del server successivo dopo che il server precedente è operativo.
  • Utilizza il comando nc per ispezionare il nodo ZooKeeper.