2012-07-07 27 views
5

Soy nuevo en ZooKeeper. Esto es lo que necesito.ZooKeeper: ¿agregar compañeros dinámicamente?

Tengo una red de colegas.

  1. En t=t_1 -> [peer-1 (Leader), peer-2] peer-1 es el maestro y todos los clientes se conectan a este nodo.

  2. En t=t_2 -> [peer-1 (Leader), peer-2, peer-3] En algún momento posterior, peer-3 se une al grupo. ¿Es posible agregar peer-3 a la lista de servidores zookeeper "dinámicamente" (es decir, sin reiniciar ZooKeeper en peer-1)?

  3. En t=t_3 -> [peer-3 (Leader), peer-4] Después de un tiempo tanto peer-1 y peer-2 abandonan el grupo (por ejemplo, mueren o se desconectan.) Suponiendo que hay una manera de añadir dinámicamente peer-3 y peer-4 a la group peer-3 se convierte en el líder y todas las solicitudes de los clientes se envían a peer-3.

¿Hay alguna otra opción que pueda usar además de utilizar ZooKeeper para hacer algo como esto?

gracias.

Respuesta

6

Por el momento, no puede cambiar dinámicamente la configuración de un clúster de zookeeper sin reiniciar. Hay un problema abierto para solucionar esto, ZOOKEEPER-107. El documento que describe el algoritmo de pertenencia al clúster es bastante interesante y se puede encontrar en here.

Puede cambiar la configuración del clúster reiniciando nodos de servidor 1 a la vez. Por ejemplo, si clúster tiene los servidores A, B, C, y que desea reemplazar servidor de C con D, entonces se puede hacer algo así,

  • Derriba C
  • Abra D, que es la lista de pares es a, B, D
  • Derriba B
  • lista de pares de cambio de B a a, B, D
  • Abra B
  • Acabar con la lista de pares Una de cambio de a a a, B, D
  • Llevar a
  • Cambiar la configuración del cliente de todos los clientes para que apunte a A, B, D

En t = t_1, tiene un clúster de 2 nodos zookeeper. Esto es bastante frágil, ya que si cualquiera de los nodos se cae, no podrá establecer quórum (piso (N/2) + 1), y el grupo no estará disponible. En general, los grupos de zookeeper son números impares.

No estoy seguro de lo que está tratando de hacer cuando usted dice,

peer-3 se convierte en el líder y todas las solicitudes de cliente se envían a peer-3.

No puede especificar qué nodo de un clúster de zookeeper es el líder, los nodos elegirán su líder y el liderazgo cambiará a medida que los nodos suben y bajan.Además, los clientes generalmente no siempre se conectan con el líder, pero los clientes reciben una lista de máquinas en el clúster y se conectan aleatoriamente a uno, volviendo a conectarse si el servidor al que están conectados deja de funcionar. Puede configurar la opción leaderServes para especificar que el líder NO atiende las conexiones del cliente.

+1

Parece que esto se resuelve en ZK [alpha 3.5] (https://zookeeper.apache.org/doc/r3.5.2-alpha/zookeeperRecon fig.html). – Alastair

1

No recomendaría utilizar lo anterior para cualquier situación de producción. La solución anterior solo funciona si está bien con perder el quórum ZK durante un tiempo hasta que se completen todos los cambios.

He aquí por qué: Derriba C Trae D, que es la lista de pares es A, B, D"

-> en este punto A y B no sé sobre D -> D sabe de AB

lo que en este momento tiene solamente a y B funcionamiento de quórum siguiente se toma presionado B y se pierde quórum.

perderá el acceso a los datos de ZK, hasta que haya completado la migración y quórum se restablece de nuevo. la mayoría también aplicaciones diseñadas utilizando zk en este caso conmutación por error a un modo de solo lectura y será con gracia cubrir.

Hasta que se publique Zookeeper-107 bajo Zookeeper 3.5, tendrá que elegir envenenar sabiamente.

es mejor:

  1. acaba de configurar un nuevo conjunto zk (cluster ZK)
  2. restaurar a partir de instantáneas
  3. aplicaciones Mirate de ensamble ZK antiguo al nuevo ZK conjunto
  4. vez completada la migración cierre viejo zk conjunto
+0

qué pasa con este método: https://gist.github.com/miketheman/6057930 – pdeva

Cuestiones relacionadas