Instalar y configurar Apache Cassandra 2 en Ubuntu

Apache CassandraCassandra es una base de datos NoSQL distribuida, enfocada principalmente a la escalabilidad y la disponibilidad. Su modelo de distribución se basa, grosso modo, en tener réplicas de la misma base de datos en distintas máquinas (llamadas nodos) a través de un cluster, las cuales a su vez pueden estar divididas en distintos anillos (o datacenters).

Para efectos prácticos, esta configuración va a basarse en una configuración sencilla de sólamente dos máquinas (un único datacenter).

Para una información más extensa, puede utilizarse la guía oficial de DataStax.

Instalar Oracle Java 7 o superior

Pese a que OpenJDK está soportado, no está recomendado su uso, y aunque puede que no dé problemas, puede que  🙂

  1. Descargar el JRE de Oracle Java SE Downloads.
  2. Crear un directorio para el JRE:$ sudo mkdir -p /usr/lib/jvm
  3. Descomprimir el tarball e instalar el JRE.$ sudo tar zxvf jre-version-linux-x64.tar.gz -C /usr/lib/jvm
  4. Decirle al sistema que hay una nueva versión de Java disponible.$ sudo update-alternatives –install «/usr/bin/java» «java» «/usr/lib/jvm/jre_version/bin/java» 1
  5. Establecer el nuevo JRE por defecto:$ sudo update-alternatives –set java /usr/lib/jvm/jre_version/bin/java
  6. También es recomendable instalar JNA.$ sudo apt-get install libjna-java

Instalar Cassandra

  1. Añadir el repositorio de DataStax a /etc/apt/sources.list.d/cassandra.sources.list$ echo «deb http://debian.datastax.com/community stable main» | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
  2. Añadir la clave del repositorio a aptitude.$ curl -L http://debian.datastax.com/debian/repo_key | sudo apt-key add –
  3. Instalar el paquete.$ sudo apt-get update
    $ sudo apt-get install dsc20
  4. Como el servicio se inicia automaticamente, hay que parar el servicio y borrar los datos.$ sudo service cassandra stop
    $ sudo rm -rf /var/lib/cassandra/data/system/*

Recomendaciones de configuración

  • Configurar límites de recursos en /etc/security/limits.confroot – memlock unlimited
    root – nofile 100000
    root – nproc 32768
    root – as unlimited
  • Añadir la siguiente línea a /etc/sysctl.conf:vm.max_map_count = 131072
  • Para que haga efecto ejectar el siguiente comando:$ sudo sysctl -p
  • Desactivar el swap.$ sudo swapoff –all
  • Utilizar NTP (con más de un nodo el timestamp se utiliza para sobreescribir columnas, así que es importante que las máquinas estén sincronizadas).$ sudo apt-get install ntp

Inicializar un cluster (data center único)

Vamos a suponer un caso básico de sólo dos nodos; uno semilla y el otro no.

nodo0 | 1.1.1.1 (semilla)
nodo1 | 1.1.1.2

Ajustar el fichero de configuración en etc/cassandra/cassandra.yaml

Las propiedades importantes a tocar son las siguientes:

  1. num_tokens: 256Es el valor recomendado para todos los nodos. Si, por ejemplo, se pretendiera ofrecer sólo la mitad de carga al nodo1, entonces al nodo0 le daríamos 256 y al nodo1 128.
  2. seeds: 1.1.1.1Aquí irán las ip’s de las distintas semillas, separadas por comas.
  3. listen_address: ip.de.la.maquinaEs recomendable cambiar localhost por la ip local de cada máquina en cada nodo.
  4. rpc_address: ip.de.la.maquinaEs recomendable cambiar localhost por la ip local de cada máquina en cada nodo.

El resto de opciones, para un cluster de desarrollo con un único datacenter no hacen falta tocarlos.

Ponerlo en marcha

  1. Lanzaremos el servicio, empezando por la semilla (nodo0), y cuando termine, entonces arrancaremos el otro nodo.$ sudo service cassandra start
  2. Podremos comprobar que están funcionando correctamente con la siguiente herramienta.$ nodetool status

Debería listar ambos nodos con un estado de UN (Up normal).

Advertencia

A la hora de crear el keyspace, recordar que el número del replication_factor no debería ser mayor que el número total de nodos del cluster (en este caso, 2).

Ricardo Devis
Acerca de
Investigador de S3lab
Expertise: Statistics, Java & .NET Programmer