domingo, 25 de marzo de 2012

Cassandra cluster, facil facil!!

La verdad que como con todas las cosas, eres libres de complicarlas tanto como quieras, pero en este caso complicar la instalación y configuración de un cluster en cassandra es dificil ;).

Para este escenario vamos a suponer que tenemos tres nodos de cassandra:

test01 (192.168.30.21)
test02 (192.168.30.22)
test03 (192.168.30.23)

Es una buena idea que metas estas lineas en el /etc/hosts con todos tus nodos de cassandra ya que a cassandra no le termina de gustar los nombres FQDN:

192.168.30.21    test01
192.168.30.25    test02
192.168.30.26   test03

El siguente paso, como no instalar cassandra, para ello vamos a instalarlo de paqueteria de debian, pero instalar de fuentes es igualmente facil, como requisito necesitas tener instalado java.
Metemos la siguiente linea en el fichero /etc/apt/sources.list:

deb http://www.apache.org/dist/cassandra/debian 10x main
deb-src http://www.apache.org/dist/cassandra/debian 10x main 

Ahora al hacer un apt-get update te saltara un error de este tipo:

GPG error: http://www.apache.org unstable Release: The following signatures couldn't 
be verified because the public key is not available: NO_PUBKEY F758CE318D77295D
 
Pues bien, apunta la clave publica y lanzas:
 
gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | apt-key add - 

Y:

gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | apt-key add -
 
Esta segunda es tal cual te la pego aqui.
 
Ahora si, hacemos un apt-get update y luego el apt-get install cassandra y ya lo tienes instalado.
 
 
Pues bien, ahora para poner en marcha el cluster tenemos que asignar un token a cada uno de los nodos, yo que usado un script en python que te lo calcula en funcion del numero de nodos que le pases, el script son apenas 10  lineas:

  1 #! /usr/bin/python
  2 import sys
  3 if (len(sys.argv) > 1):
  4     num=int(sys.argv[1])
  5 else:
  6     num=int(raw_input("How many nodes are in your cluster? "))
  7 for i in range(0, num):
  8     print 'token %d: %d' % (i, (i*(2**127)/num))

En definitiva en el fichero principal de configuracion /etc/cassandra/cassandra.yaml hay que cambiar la configuracion de las siguientes entradas:

test01:
  cluster_name: 'MyDemoCluster'
  initial_token: 0
  seed_provider:
      - class_name: org.apache.cassandra.locator.SimpleSeedProvider
        parameters:
            - seeds: test01
  listen_address: test01
  rpc_address: 0.0.0.0
  endpoint_snitch: org.apache.cassandra.locator.RackInferringSnitch

test02:
  cluster_name: 'MyDemoCluster'
  initial_token: 56713727820156410577229101238628035242
  seed_provider:
      - class_name: org.apache.cassandra.locator.SimpleSeedProvider
        parameters:
            - seeds: test01
  listen_address: test02
  rpc_address: 0.0.0.0
  endpoint_snitch: org.apache.cassandra.locator.RackInferringSnitch


test03:
  cluster_name: 'MyDemoCluster'
  initial_token: 113427455640312821154458202477256070485
  seed_provider:
      - class_name: org.apache.cassandra.locator.SimpleSeedProvider
        parameters:
            - seeds: test01
  listen_address: test03
  rpc_address: 0.0.0.0
  endpoint_snitch: org.apache.cassandra.locator.RackInferringSnitch
 
Como nota decir que la directiva endpoint_snitch se usa para que cassandra conozca 
como está la topologia de red y puede ser SimpleSnitch, RackInferringSnitch o 
PropertyFileSnitch.
Apuntar tambien que el seed server es en este caso test01, esto no es ni mas ni menos
 el servidor al cual se conectaran los nuevos nodos que añadamos al cluster para actualizar 
sus datos en primera instancia, el seed server no es un punto de fallo para el funcionamiento 
cotidiano del cluster.
 

Ahora solo queda jugar!!!


No hay comentarios:

Publicar un comentario