Herramienta que brinda servicios que suelen necesitar las aplicaciones distribuidas, para coordinación o compartir data entre nodos.
Algunos usos comunes:
Qué es?
Zookeeper Internals
zNodes
Namespace jerárquico
DATA
- R/W atómicas
- Límite 1Mb
METADATA
- Versión - Timestamps
- ACL - Data length
[WATCHES]
- one-shoot
- over Data or Children
Tipos de zNodes
Zookeeper Ensemble
TCP
zxid
Namespace
tx logs +
snapshots
En prod mínimo 3 nodos
Para soportar la caída de N nodos, necesitas un ensemble con N*2 +1 nodos
Con más nodos, más throughput de lecturas pero menos de escrituras
Instalación y Configuración
Algunas config opcionales:
- globalOutstandingLimit
- snapCount
- snapSizeLimitInKb
- maxCnxns
- autopurge.purgeInterval
- autopurge.snapRetainCount
zkCli
bin/zkServer.sh start // Levantar el server
./zkCli.sh -server localhost:2181 // Conectarse a ZK
ls / // Listar zNodes de path /
create /test testData // Crear zNode
ls -R / // Listar zNodes recursivamente
ls -w /test // Agrega un childWatch al zNode /test
create /test/childOne "Info child one" // Crea el nodo y recibimos notificación
create /test/childTwo // Sólo lo crea. No recibimos notificación porque es one-shoot
create -e /test/childThree // -e Efímero (-s persistent-sequential, -e -s ephemeral-sequential, -t millis)
get /test/childOne // Ver data del nodo (-w agrega dataWatch)
get -s /test // Ver data + metadata
stat /test/childOne // Ver sólo metadata
set /test/childOne algoDeInfo // Update (-v CompareAndSet)
delete /test/childOne // Elimina el nodo
deleteall /test // Elimina el nodo y todos sus hijos
sync /test // Fuerza la sincronización con el leader => última versión de la data
quit // Salir de zkCli
Monitoreo - Herramientas
4 letter words:
Correr con telnet o netcat
Configurar whitelist
https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_4lw
JMX
Levantar server habilitando JMX y con QuorumPeerMain
Restricción D! sin authenticación => conexión remota vía tunel ssh
Monitoreo - Qué mirar?
Salud de ZK:
Está ZK corriendo? -> 4lw: ruok, stat
Salud del nodo:
Conjunto de librerías java que hacen el uso de Zookeeper más fácil.
Pros & Cons
Nota: Artifacts en D!
Madurez: estabilidad, mantenimiento, comunidad
Garantiza el orden
Atomicidad
Trabaja en memoria: alto throughput y baja latencia
Recipe lock distribuido
HA y failover automático
Monitoreo
Curator
Podes perder notificaciones
Solución multi-datacenter?
Bajo nivel -> Complejidad.
Trabaja en memoria:
hay pausas de GC.
Warn! El set de datos tiene que entrar en memoria
Muchas gracias!