2012-07-07 12 views
5

Sono nuovo in ZooKeeper. Questo è quello di cui ho bisogno.ZooKeeper - aggiunta di peer dinamicamente?

Ho una rete di colleghi.

  1. A t=t_1 -> [peer-1 (Leader), peer-2] peer-1 è il master e tutti i client si connettono a questo nodo.

  2. A t=t_2 -> [peer-1 (Leader), peer-2, peer-3] In un secondo momento, il gruppo peer-3 si unisce al gruppo. È possibile aggiungere "peer-3" all'elenco dei server zookeeper "dinamicamente" (cioè senza riavviare ZooKeeper su peer-1)?

  3. A t=t_3 -> [peer-3 (Leader), peer-4] Dopo un mentre sia peer-1 e peer-2 lasciano il gruppo (ad esempio, muoiono o vengono spente.) Supponendo che non v'è un modo per aggiungere dinamicamente peer-3 e peer-4 al group peer-3 diventa il leader e tutte le richieste dei client vengono inviate a peer-3.

Ci sono altre opzioni che posso utilizzare oltre all'uso di ZooKeeper per fare qualcosa di simile.

grazie.

risposta

6

Al momento, non è possibile modificare dinamicamente la configurazione di un cluster di zookeeper senza riavviare. C'è un problema aperto per risolvere questo, ZOOKEEPER-107. Il documento che descrive l'algoritmo di appartenenza al cluster è abbastanza interessante e può essere trovato here.

È possibile modificare la configurazione del cluster riavviando i nodi del server 1 alla volta. Ad esempio, se si cluster è server A, B, C, e si desidera sostituire server di C con D, allora si può fare qualcosa di simile,

  • Portare verso il basso C
  • Portare D, è la lista dei pari è a, B, D
  • Abbattere B
  • lista dei pari di Change B ad a, B, D
  • portare B
  • Abbattere un cambiamento un elenco dei pari ad a, B, D
  • Visualizza A
  • Modificare la configurazione del client di tutti i clienti al punto A, B, D

A t = t_1, si dispone di un cluster con 2 nodi Zookeeper. Questo è abbastanza fragile, come se uno dei due nodi dovesse cadere, non sarà possibile stabilire il quorum (floor (N/2) + 1) e il cluster non sarà disponibile. Generalmente i gruppi di guardiani dello zoo sono numeri dispari.

Non sono sicuro di ciò che si sta cercando di fare quando si dice,

peer-3 diventa il leader e tutte le richieste client vengono inviate a peer-3.

Non è possibile specificare quale nodo in un cluster guardiano dello zoo è il leader, i nodi stessi eleggeranno il loro capo, e la leadership cambia come nodi vanno su e giù.Inoltre, i client in genere non si connettono sempre al leader, ma i client ricevono un elenco di macchine nel cluster e si connettono casualmente a uno, ricollegandosi se il server a cui sono connessi si arresta. È possibile impostare l'opzione leaderServes per specificare che il leader NON esegue le connessioni client del server.

+1

Sembra che questo problema sia risolto in ZK [alpha 3.5] (https://zookeeper.apache.org/doc/r3.5.2-alpha/zookeeperRecon fig.html). – Alastair

1

Non suggerirei di utilizzare quanto sopra per qualsiasi situazione di produzione. La soluzione di cui sopra funziona solo se stai bene perdendo il quorum ZK fino a quando tutte le modifiche sono state completate.

Ecco perché: Abbattere C Portare D, è la lista dei pari è A, B, D"

-> a questo punto A e B Non so circa D -> D conosce AB

quindi a questo punto avete solo a e B il funzionamento in numero legale prossimo si prende premuto B e si perde il quorum.

si perde l'accesso ai dati ZK, fino a quando la migrazione è completa e il quorum viene ripristinata di nuovo. la maggior parte bene progettato app utilizzando zk in questo caso il failover in modalità readonly e con grazia re copertina.

Fino al Zookeeper-107 è stato rilasciato con Zookeeper 3.5, è necessario scegliere con cura il veleno.

è meglio:

  1. appena messa a punto di un nuovo ZK Ensemble (ZK cluster)
  2. ripristino da snapshot
  3. applicazioni mirate da vecchia ZK insieme alla nuova zk insieme
  4. Dopo la migrazione è completa shutdown old zk ensemble
+0

cosa dire di questo metodo: https://gist.github.com/miketheman/6057930 – pdeva

Problemi correlati