Después de explicar ¿qué es voldemort? y ¿cómo instalarlo? nos quedamos con un cluster de dos nodos, en este post explicaré como añadir en nuevo nodo a un cluster Voldemort.
Como impresiones generales diré, que no es sencillo, no es intuitivo y no es rápido, pero que hacer, se puede hacer.
Me pareció algo así
Primero de todo nos ponemos en situación, en el ultimo post, teníamos un cluster de dos nodos, con 5 particiones.
<cluster> <name>Test</name> <server> <id>0</id> <host>node1</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <partitions>0, 2, 4</partitions> </server> <server> <id>1</id> <host>node2</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <partitions>1, 3, 5</partitions> </server> </cluster>
Como sabemos al ser la particiones estáticas deberemos utilizar las 6 que disponemos, el sistema de voldemort trae herramientas que nos dan una idea de cómo debería quedar el cluster.
Los pasos son
- Reparticionar
- Rebalancear
- Lanzar la tarea
- Limpiar datos huérfanos
Paso 1 .- Repartition.
Para una expansion del cluster deberemos crear un fichero cluster xml provisional «interim», en el que añadiremos los nuevos nodos , pero con la parte de particiones vacía.
<cluster> <name>qacluster</name> <server> <id>0</id> <host>nodo1</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <partitions>0, 2, 4</partitions> </server> <server> <id>1</id> <host>nodo2</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <partitions>1, 3, 5</partitions> </server> <server> <id>2</id> <host>nodo3</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <partitions></partitions> </server> </cluster>
Como podemos ver añadimos el nodo 3 en un fichero cluster-interim, pero con las particiones vacías.
Lanzamos la herramienta de RepartitionerCLI, la encontramos dentro de la carpeta bin.
bin/run.class.sh voldemort.tools.RepartitionerCLI --current-cluster <current-cluster> --current-stores <current_stores> --interim-cluster <interim-cluster> --output-dir <output_dir>
Os recomiendo que os creáis unas carpetas para tener cada fichero ordenado, deberemos añadir todos los stores en un solo fichero, el ejemplo de la llamada sería.
bin/run-class.sh voldemort.tools.RepartitionerCLI --current-cluster repo_stores/cluster.xml --current-stores repo_stores/prueba.xml --interim-cluster repo_stores/interim/cluster.xml --output-dir repo_stores/plan/
Dentro de la carpeta repo_stores/plan tendremos
current-cluster.xml.analysis final-cluster.xml final-cluster.xml0 final-cluster.xml0.analysis final-cluster.xml.analysis
En los ficheros de analysis tendremos los pasos que realizar para llegar a la estructura final del cluster, que es el fichero final-cluster.xml
Paso 2 .- Rebalancing
Deberemos crear el plan para hacer el rebalancing, usaremos el fichero final-cluster.xml que obtuvimos del paso anterior.
bin/run-class.sh voldemort.tools.RebalancePlanCLI --current-cluster repo_stores/cluster.xml --current-stores repo_stores/prueba.xml --final-cluster repo_stores/planRepartitioner/final-cluster.xml --output-dir repo_stores/planRebalance/
En la carpeta planRebalance deberemos tener el fichero final-cluster.xml, recordemos que tenemos 2 nodos que estan trabajando, pero un tercero que no esta dentro del cluster ni tienes las stores, asi que debemos añadirlo y crear las stores en el tercer nodo antes de continuar.
Debemos utilziar el fichero de cluster-interim del paso 1, para actualizarlo en todos los servidores, de esta manera el nodo 3 no tendrá particiones y será, la tarea de rebalancing del paso siguiente la que lo actualice las particiones.
bin/vadmin.sh meta set cluster.xml=repo_stores/interim/cluster.xml --node 0 --url tcp://127.0.0.1:6666
bin/vadmin.sh store add --file repo_stores/prueba.xml --node 2 --url tcp://127.0.0.1:6666
Utilizamos la herramienta vadmin.sh con la opcion –node 2, para añadir las stores únicamente en el servidor 3
Paso 3 .- Lanzar el rebalancing
Utilizaremos la siguiente herramienta.
bin/run-class.sh voldemort.tools.RebalanceControllerCLI --url $URL --final-cluster final-cluster.xml --parallelism 8 --proxy-pause 900
- $URL: Será la direccion de uno de los nodos del cluster
- Final-cluster : EL fichero final-cluster que obtuvimos en el último paso, que es la situación final que estará el cluster cuando termine la tarea.
- Parallelism: Numero de tareas de rebalancing que se pueden lanzar en el mismo momento.
- Proxy-pause : El tiempo que esperará entre la actualizacion de la metadata y el inicio del rebalancing,
Nota: Antes de lanzarlo si paramos en medio del proceso, el sistema queda inestable asi que utilicemos algun screen o tmux o algo asi …
bin/run-class.sh voldemort.tools.RebalanceControllerCLI --url tcp://127.0.0.1:6666 --final-cluster repo_stores/planRepartitioner/final-cluster.xml --parallelism 8 --proxy-pause 900
Nos dará información sobre lo que va ha hacer y comenzara el proceso, ¿cómo podemos ver el estado?
bin/vadmin.sh async-job list --url tcp://127.0.0.1:6666
Aquí podemos ver que esta haciendo, como dato informativo en mi caso para 20Gb de información tardo 4 horas, o sea rápido rápido no es
Y por último.
Paso 4 .- Limpieza de los datos huérfanos.
Este proceso solo mueve datos, con lo que una vez terminado habrá nodos que tendrán datos de particiones que ya no le pertenecen.
bin/vadmin.sh cleanup orphaned-data --all-nodes --url tcp://127.0.0.1:6666
Finalizado, cluster ampliado, en el siguiente post explicaré el concepto de zonas y como aprovecharlas para realizar replicaciones.
Referencias:
http://www.project-voldemort.com/voldemort/rebalance.html
https://github.com/voldemort/voldemort/wiki/Voldemort-Admin-to