Herramienta que brinda servicios que suelen necesitar las aplicaciones distribuidas, para coordinación o compartir data entre nodos.
Algunos usos comunes:
- management de la configuración
- elección de leader
- lockeo
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
- Persistent
- Ephemeral
- Sequence
- Container
- TTL
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:
- ruok
- conf
- stat
- mntr
- srvr
- cons
- wchs
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:
- Request Avg/Max Latency
- Outstanding Requests
- Received / Sent
- Mode
- Node count / watch count
Está ZK corriendo? -> 4lw: ruok, stat
Salud del nodo:
- RAM -> Ver heap usada y que no swapee -> NR, free -h, htop
- CPU -> tunnear GC
- Red -> Munin y netdata
- Disco -> Está borrando snapshots y tx logs? Rota el log?
Conjunto de librerías java que hacen el uso de Zookeeper más fácil.
- curator-client -> wrapper cliente ZK
- curator-framework -> manejo de conexiones, política de reintentos, listener ConnectionStateListener, etc
- curator-recipes -> Implementación de casos de uso comunes
- curator-test → levanta un ZK embebido (o un ensemble)
- ...
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!
Zookeeper
By María Alejandra Holman
Zookeeper
- 285