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.