Cómo instalar la base de datos Apache Cassandra NoSQL en un clúster de un solo nodo de Ubuntu 22.04

Apache Cassandra es un sistema de gestión de bases de datos distribuidas NoSQL de código abierto. Cassandra puede escalarse horizontalmente añadiendo más nodos en los que los datos se replican automáticamente. Los nodos pueden añadirse o eliminarse sin ningún tiempo de inactividad. Los nodos pueden organizarse lógicamente como un clúster o un anillo y establecerse en varios centros de datos para mejorar la velocidad y la fiabilidad de las aplicaciones de alto rendimiento.

En este tutorial, aprenderemos a instalar Apache Cassandra en un clúster de un solo nodo de Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 22.04 con un mínimo de 2GB de RAM.

  • Un usuario no-sudo con privilegios de root.

  • Todo actualizado.

    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Instalar Java

Apache Cassandra requiere Java 8 o Java 11 para funcionar. La última versión de Cassandra incluye soporte completo para Java 11, que es lo que vamos a utilizar.

$ sudo apt install openjdk-11-jdk

Confirma la instalación de Java.

$ java -version
openjdk 11.0.15 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)

Paso 2 – Instalar Apache Cassandra

El primer paso es añadir el repositorio oficial de Cassandra.

Ejecuta el siguiente comando para añadir el repositorio a la lista de repositorios del sistema.

$ echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

En el momento de escribir este tutorial, la última versión disponible de Cassandra es la 4.0.5. El comando anterior utiliza 40x para representar la serie 4.0 de Cassandra.

Añade la clave del repositorio a la lista de repositorios de confianza del sistema.

$ wget -q -O - https://www.apache.org/dist/cassandra/KEYS | sudo tee /etc/apt/trusted.gpg.d/cassandra.asc

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala Cassandra.

$ sudo apt install cassandra

Paso 3 – Comprobar el servicio de Cassandra

Cassandra crea e inicia automáticamente el demonio del servicio. Comprueba el estado del servicio.

$ sudo systemctl status cassandra

Deberías obtener la siguiente salida.

? cassandra.service - LSB: distributed storage system for structured data
     Loaded: loaded (/etc/init.d/cassandra; generated)
     Active: active (running) since Mon 2022-07-25 11:40:42 UTC; 12min ago
       Docs: man:systemd-sysv-generator(8)
      Tasks: 48 (limit: 2241)
     Memory: 1.3G
        CPU: 38.219s
     CGroup: /system.slice/cassandra.service
             ??4602 /usr/bin/java -ea -da:net.openhft... -XX:+UseThreadPriorities -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+UseNUMA ->
Jul 25 11:40:42 cassandra systemd[1]: Starting LSB: distributed storage system for structured data...
Jul 25 11:40:42 cassandra systemd[1]: Started LSB: distributed storage system for structured data.

También puedes verificar el estado utilizando el comando nodetool.

$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns (effective)  Host ID                               Rack
UN  127.0.0.1  69.08 KiB  16      100.0%            6690243a-950d-4d64-9463-aa722f8064d4  rack1

Paso 4 – Configurar Cassandra

La ubicación por defecto de los archivos de configuración de Cassandra está en /etc/cassandra. La ubicación por defecto de los directorios de registro y datos es /var/log/cassandra y /var/lib/cassandra.

Los ajustes a nivel de la JVM, como el tamaño de la pila, pueden establecerse a través del archivo /etc/cassandra/cassandra-env.sh. Puedes pasar argumentos adicionales de la línea de comandos de la JVM a la variable JVM_OPTS. Los argumentos se pasan a Cassandra cuando se inicia.

4.1 Activar la autenticación de usuario

Para activar la autenticación de usuario, el primer paso es hacer una copia de seguridad del archivo /etc/cassandra/cassandra.yaml.

$ sudo cp /etc/cassandra/cassandra.yaml /etc/cassandra/cassandra.yaml.backup

Abre el archivo cassandra.yaml para editarlo.

$ sudo nano /etc/cassandra/cassandra.yaml

Localiza los siguientes parámetros en este archivo.

...
authenticator: AllowAllAuthenticator
...
authorizer: AllowAllAuthorizer
...
roles_validity_in_ms: 2000
...
permissions_validity_in_ms: 2000
...

Cambia los valores de los parámetros como se indica a continuación.

...
authenticator: org.apache.cassandra.auth.PasswordAuthenticator
...
authorizer: org.apache.cassandra.auth.CassandraAuthorizer
...
roles_validity_in_ms: 0
...
permissions_validity_in_ms: 0
. . .

Puedes configurar otros parámetros en función de tus necesidades. Si están comentados, deshazlo.

Una vez que hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Reinicia Cassandra para activar los ajustes modificados.

$ sudo systemctl restart cassandra

4.1.1 – Añadir un superusuario administrador

Ahora que hemos habilitado la autenticación, necesitamos crear un usuario. Para ello, utilizaremos la utilidad Cassandra Command Shell. Entra con las credenciales del usuario por defecto cassandra.

$ cqlsh -u cassandra -p cassandra

Obtendrás el siguiente shell.

Connected to Test Cluster at 127.0.0.1:9042
[cqlsh 6.0.0 | Cassandra 4.0.5 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
cassandra@cqlsh>

Crea un nuevo superusuario. Sustituye [username] y [yourpassword] por tus credenciales.

cassandra@cqlsh> CREATE ROLE [username] WITH PASSWORD = '[yourpassword]' AND SUPERUSER = true AND LOGIN = true;

Sal de la shell.

cassandra@cqlsh> exit

Vuelve a entrar con la nueva cuenta de superusuario.

$ cqlsh -u username -p yourpassword

Elimina los permisos elevados de la cuenta por defecto cassandra.

username@cqlsh> ALTER ROLE cassandra WITH PASSWORD = 'cassandra' AND SUPERUSER = false AND LOGIN = false;
username@cqlsh> REVOKE ALL PERMISSIONS ON ALL KEYSPACES FROM cassandra;

Concede todos los permisos a la cuenta de superusuario.

username@cqlsh> GRANT ALL PERMISSIONS ON ALL KEYSPACES TO '[username]';

Cierra la sesión de la consola.

username@cqlsh> exit

4.2 – Editar el archivo de configuración de la consola

Si quieres personalizar el Shell Cassandra, puedes hacerlo editando el archivo cqlshrc. La ubicación por defecto del archivo es en el directorio ~/.cassandra. Si quieres cargarlo desde un directorio diferente, puedes pasar el argumento --cqlshrc /customdirectory a la herramienta cqlsh mientras se ejecuta. La instalación por defecto de Cassandra no incluye el archivo. Por lo tanto, tendremos que crearlo.

Crea el archivo cqlshrc en el directorio ~/.cassandra. No necesitamos utilizar sudo para realizar ninguna de las funciones del directorio ~/.cassandra. Cassandra requiere que los archivos de este directorio sean propiedad de la cuenta local y no deben ser accesibles desde otras cuentas o grupos.

$ touch ~/.cassandra/cqlshrc

Si el directorio ~/.cassandra no está presente, créalo con el siguiente comando.

$ mkdir ~/.cassandra

Abre el archivo para editarlo.

$ nano ~/.cassandra/cqlshrc

El repositorio Github de Cassandra proporciona un archivo de ejemplo cqlshrc . Puedes copiar alguna o todas las secciones de ahí, dependiendo de tus necesidades. Todas las configuraciones están comentadas usando ;;. Descoméntalos eliminando los dobles puntos y coma y luego haz el cambio según tus necesidades.

Configuraremos el intérprete de comandos para que inicie sesión automáticamente con las credenciales de superusuario. Sustituye las [username] y [password] por las credenciales creadas en el paso anterior.

....
[authentication]
;; If Cassandra has auth enabled, fill out these options
username = [username]
password = [password]
....

Edita cualquier otra configuración que quieras cambiar. Una vez que hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Actualiza los permisos del archivo cqlshrc. Esto impide que cualquier otro grupo de usuarios acceda al archivo.

$ chmod 600 ~/.cassandra/cqlshrc

Accede al shell de Cassandra con tus nuevos cambios.

$ cqlsh
Connected to Test Cluster at 127.0.0.1:9042
[cqlsh 6.0.0 | Cassandra 4.0.5 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
navjot@cqlsh>

Nota: El método de almacenar el nombre de usuario y la contraseña en el archivo cqlshrc quedará obsoleto a partir de la versión 4.1 de Cassandra. Para saber más sobre ello, puedes leer la entrada en el sitio de Cassandra.

4.3 – Cambiar el nombre del clúster

Por último, cambiaremos el nombre del clúster de Prueba a tu nombre elegido.

Entra en el terminal cqlsh.

$ cqlsh

Sustituye el [clustername] por tu nuevo nombre de clúster en el comando que aparece a continuación.

username@cqlsh> UPDATE system.local SET cluster_name = '[new_name]' WHERE KEY = 'local';

Sal del intérprete de comandos.

username@cqlsh> exit

Abre el archivo /etc/cassandra/cassandra.yaml para editarlo.

$ sudo nano /etc/cassandra/cassandra.yaml

Sustituye el valor de la variable cluster_name por el nombre que elijas.

...
# The name of the cluster. This is mainly used to prevent machines in
# one logical cluster from joining another.
cluster_name: '[new_name]'
...

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Borra la caché del sistema Cassandra.

$ nodetool flush system

Reinicia Cassandra.

$ sudo systemctl restart cassandra

Accede al shell para ver el nuevo nombre.

$ cqlsh
Connected to howtoforge at 127.0.0.1:9042
[cqlsh 6.0.0 | Cassandra 4.0.5 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
navjot@cqlsh>

Conclusión

En este tutorial has aprendido a instalar Apache Cassandra en un servidor AlmaLinux o Rocky Linux. También has aprendido a añadir la autenticación de usuarios y a realizar algunas configuraciones básicas. Para saber más, visita la documentación oficial de Cassandra. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...