Cómo instalar un clúster CockroachDB en AlmaLinux 9

CockroachDB es una base de datos SQL distribuida y escalable de código abierto para aplicaciones en la nube. CockroachDB proporciona consistencia de siguiente nivel, base de datos SQL replicada y un almacén de datos transaccional. CockroachDB almacena tus datos en múltiples ubicaciones, haciendo que la entrega de datos sea más rápida. Además, es fácil de escalar y proporciona alta disponibilidad y tolerancia a fallos para tus aplicaciones.

Esta guía te muestra cómo instalar y crear un clúster de CockroachDB en varios servidores AlmaLinux 9. También aprenderás las consultas básicas utilizando CockroachDB y a verificar la replicación automática de tus bases de datos.

Requisitos previos

Antes de empezar, asegúrate de que tienes lo siguiente:

  • Dos o más servidores AlmaLinux 9 – En esta demo, utilizaremos dos servidores: srv1 con dirección IP 192.168.10.20 y srv2 con dirección IP 192.168.10.21.
  • Un usuario no root puede ejecutar el comando sudo para obtener privilegios de root.

Configurar el FQDN

El primer paso que debes dar es configurar el fqdn (nombre de dominio completo) para todos tus servidores y asegurarte de que cada fqdn apunta a la dirección IP local adecuada.

En srv1, ejecuta el siguiente comando para configurar el fqdn a srv1.hwdomain.lan.

sudo hostnamectl set-hostname srv1.hwdomain.lan

En el srv2, ejecuta el siguiente comando para configurar la fqdn srv2.hwdomain.lan.

sudo hostnamectl set-hostname srv2.hwdomain.lan

Ahora abre el archivo /etc/hosts utilizando el siguiente comando del editor nano.

sudo nano /etc/hosts

Inserta la siguiente configuración al final de la línea.

```ini
192.168.10.20 srv1.hwdomain.lan srv1
192.168.10.21 srv2.hwdomain.lan srv2
```

Guarda y sal del archivo cuando hayas terminado.

Por último, ejecuta el siguiente comando para verificar el fqdn de cada servidor y ejecuta el comando ping para asegurarte de que cada fqdn apunta a la dirección IP interna adecuada.

sudo hostname -f
ping -c3 srv1.hwdomain.lan
ping -c3 srv2.hwdomain.lan

El servidor srv1 debe tener la fqdn srv1. hwdomain . lan y apuntar a la dirección IP 192.168.10.20, mientras que el servidor srv2 debe configurarse con la fqdn srv2.hwdomain.lan y la dirección IP 192.168.10.21.

configurar fqdn

Descarga e instalación de CockroachDB

CockroachDB se puede instalar en varios entornos, puedes instalarlo de forma tradicional descargando el paquete binario preconstruido de CockroachDB o instalarlo en un entorno en contenedores como Kubernetes.

En esta sección, instalarás CockroachDB a través de un paquete binario pre-construido en tus servidores AlmaLinux 9.

En primer lugar, instala curl utilizando el comando dnf que aparece a continuación.

sudo dnf install curl -y

instalando curl

Ahora ejecuta el siguiente comando para descargar el paquete binario CockroachDB y extráelo mediante el comando tar.

curl https://binaries.cockroachdb.com/cockroach-v23.1.3.linux-amd64.tgz --output cockroach-v23.1.3.linux-amd64.tgz
tar -xzf cockroach-v23.1.3.linux-amd64.tgz

Mueve el archivo binario CockroachDB cockroach-v23.1.3.linux-amd64/cockroach al directorio /usr/bin/ utilizando el comando que aparece a continuación.

sudo cp -i cockroach-v23.1.3.linux-amd64/cockroach /usr/bin/

descargar cockroachdb

Por último, introduce el siguiente comando para verificar la ruta completa del archivo binario cockroach y la versión de CockroachDB.

which cockroach
cockroach version

instalación de cockroachdb

Configurar Firewalld

Tras instalar CockroachDB, deberás configurar el firewalld y abrir el puerto 8080 para el panel de administración web de CockroachDB y el puerto 26257 para la conexión al clúster.

Ejecuta el comando firewall-cmd que se indica a continuación para añadir los puertos 8080 y 26257 al firewalld. A continuación, recarga el firewalld para aplicar los cambios.

sudo firewall-cmd --add-port={8080/tcp,26257/tcp} --permanent
sudo firewall-cmd --reload

Ahora verifica la lista de reglas del firewalld utilizando el comando que aparece a continuación. Deberías ver que los puertos 8080 y 26257 se han añadido al firewalld.

sudo firewall-cmd --list-all

configurar firewalld

Generar certificados SSL/TLS

En la siguiente sección, generarás varios certificados que se utilizarán para el clúster CockroachDB. Esto se puede conseguir mediante OpenSSL, pero también puedes utilizar la herramienta de línea de comandos cockroach.

A continuación se muestran algunos certificados SSL/TLS que vas a generar:

  • Certificados CA: Esto se utilizará para firmar todos tus certificados.
  • Certificados de cliente: Se utilizarán para conectarse al clúster CockroachDB.
  • Certificados de nodo: Debes crear certificados de nodo para cada servidor para crear un clúster CockroachDB seguro.

Generar certificados CA

Ejecuta el siguiente comando en los servidores srv1 y srv2 para crear un nuevo directorio /opt/cockroachdb/. Dentro de ese directorio, crearás también los directorios certs y private.

mkdir -p /opt/cockroachdb/{certs,private}

En el srv1, ejecuta el siguiente comando cockroach para generar los certificados CA. Esto generará los certificados CA ca.crt y ca.key.

cockroach cert create-ca \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

generar certificado CA

Ahora ejecuta el siguiente comando scp para copiar los certificados CA ca.crt y ca.key al servidor srv2.

scp /opt/cockroachdb/private/ca.key [email protected]:/opt/cockroachdb/private/
scp /opt/cockroachdb/certs/ca.crt [email protected]:/opt/cockroachdb/certs/

copia el certificado CA a srv2

Generar certificados de cliente

En el servidor srv1, ejecuta el siguiente comando para generar el certificado de cliente para el usuario por defecto root. Esto generará dos certificados client.root.crt y client.root. key que pueden utilizarse para iniciar sesión en el clúster CockroachDB.

cockroach cert create-client \
root \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

generar certificado de cliente

Generar certificado de nodo

Una vez generados los certificados CA y subidos al servidor srv2, generarás los certificados de nodo tanto en el servidor srv1 como en el srv2.

Ejecuta el siguiente comando en el servidor srv1 para generar el certificado de nodo. Asegúrate de cambiar el fqdn y la dirección IP del servidor srv1.

cockroach cert create-node \
srv1.hwdomain.lan \
192.168.10.20 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

Una vez ejecutado el comando, el certificado de nodo node.crt y node. key estarán disponibles.

generar certificado de nodo srv1

Ahora ejecuta el siguiente comando en el servidor srv2 para generar los certificados de nodo. Asegúrate de cambiar el fqdn y la dirección IP del servidor srv2.

cockroach cert create-node \
srv2.hwdomain.lan \
192.168.10.21 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

Deberías ver generados los certificados de nodo node.crt y node. key.

generar certtificados de nodo srv2

Ejecutar CockroachDB como servicio Systemd

Tras generar los certificados SSL/TLS, lo siguiente será iniciar el servicio CockroachDB. Puedes iniciar CockroachDB mediante la línea de comandos manualmente, pero el método recomendado es utilizar el servicio systemd.

En primer lugar, ejecuta el siguiente comando en los servidores srv1 y srv2 para crear un nuevo usuario cockroach y cambiar la propiedad del directorio /opt/cockroachdb al usuario cockroach.

sudo adduser -d /opt/cockroachdb -r -U cockroach
sudo chown -R cockroach:cockroach /opt/cockroachdb

En el servidor srv1, ejecuta el siguiente comando nano para crear un nuevo archivo de servicio systemd /etc/systemd/system/cockroachdb.service.

sudo nano /etc/systemd/system/cockroachdb.service

Introduce la siguiente configuración y asegúrate de cambiar el parámetro –advertise-addr por la dirección IP del servidor srv1.

[Unit]
Description=Cockroach Database cluster node
Requires=network.target
[Service]
Type=notify
WorkingDirectory=/opt/cockroachdb
ExecStart=/usr/bin/cockroach start --certs-dir=/opt/cockroachdb/certs --advertise-addr=192.168.10.20 --join=192.168.10.20,192.168.10.21
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=cockroach

[Install]
WantedBy=default.target

Guarda el archivo y sal del editor cuando hayas terminado.

Ahora pasa al servidor srv2 y crea un nuevo archivo de servicio systemd /etc/systemd/system/cockroachdb. service utilizando el editor nano.

sudo nano /etc/systemd/system/cockroachdb.service

Añade la siguiente configuración al archivo y asegúrate de cambiar el parámetro –advertise-addr por la dirección IP del servidor srv2.

[Unit]
Description=Cockroach Database cluster node
Requires=network.target
[Service]
Type=notify
WorkingDirectory=/opt/cockroachdb
ExecStart=/usr/bin/cockroach start --certs-dir=/opt/cockroachdb/certs --advertise-addr=192.168.10.21 --join=192.168.10.20,192.168.10.21
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=cockroach

[Install]
WantedBy=default.target

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, ejecuta el siguiente comando systemctl para recargar el gestor systemd y aplicar el nuevo servicio systemd.

sudo systemctl daemon-reload

A continuación, inicia y activa el servicio cockroachdb mediante el comando systemctl que aparece a continuación.

sudo systemctl start cockroachdb
sudo systemctl enable cockroachdb

ejecutar cockroachdb como servicio systemd

Por último, verifica el servicio cockroachdb para asegurarte de que se está ejecutando.

sudo systemctl status cockroachdb

Si la configuración se ha realizado correctamente, deberías obtener el estado del servicio cockroachdb activo (en ejecución).

El estado del servicio cockroachdb en el servidor srv1.

servicio cockroachdb en srv1

El estado del servicio cockroachdb en el servidor srv2.

cockroachdb estado servicio srv2

Inicializar el clúster CockroachDB

Tras iniciar CockroachDB como servicio systemd en los servidores srv1 y srv2, estás listo para inicializar el clúster CockroachDB.

Ejecuta el siguiente comando cockroach en el servidor srv1 para inicializar el clúster CockroachDB.

cockroach init --certs-dir=/opt/cockroachdb/certs --host=192.168.10.20:26257

Si la inicialización se realiza correctamente, deberías obtener una salida«Cluster inicializado con éxito«.

Ahora ejecuta el siguiente comando para comprobar los registros de CockroachDB en el directorio de datos de CockroachDB /opt/cockroachdb/cockroach-data/.

grep 'node starting' /opt/cockroachdb/cockroach-data/logs/cockroach.log -A 11

Si obtienes una salida como «Nodo CockroachDB iniciando..», significa que el clúster CockroachDB se ha inicializado correctamente.

inicializando el clúster cockroachdb

Por último, ejecuta el siguiente comando para comprobar la lista de nodos del clúster CockroachDB y el estado detallado de cada nodo.

cockroach node --certs-dir=/opt/cockroachdb/certs --host=192.168.10.20 ls
cockroach node --certs-dir=/opt/cockroachdb/certs --host=192.168.10.20 status

Deberías ver dos servidores CockroachDB en el clúster con el estado vivo y disponible.

comprobar el estado del clúster

Crear usuario administrador en CockroachDB

Con el clúster CockroachDB en funcionamiento, el siguiente paso es crear un usuario administrador para el clúster CockroachDB.

En primer lugar, ejecuta el siguiente comando cockroach para conectarte al servidor CockroachDB srv1.hwdomain.lan con el usuario por defecto root y los certificados dentro del directorio /opt/cockroachdb/certs.

cockroach sql --certs-dir=/opt/cockroachdb/certs --host=srv1.hwdomain.lan:26257

En el prompt de CockroachDB que aparece a continuación, se confirma que te has conectado como usuario root por defecto al servidor CockroachDB srv1 .hwdomain.lan y a la base de datos defaultdb.

conexión al servidor cockroachdb

Ahora ejecuta la siguiente consulta para listar las bases de datos disponibles en el clúster CockroachDB.

SHOW DATABASES;

Deberías ver las bases de datos defaultdb, postgres y system en tu clúster CockroachDB.

lista bases de datos cockroachdb

A continuación, ejecuta la siguiente consulta para crear un nuevo usuario alice. A continuación, concede al usuario alice privilegios de administrador. No olvides cambiar la contraseña en la consulta siguiente.

CREATE USER alice WITH PASSWORD 'password';
GRANT admin TO alice;

Ahora escribe quit o pulsa Ctrl+d para salir del shell de CockroachDB.

crear usuario administrador

Por último, inicia tu navegador web y visita la dirección IP srv1 seguida del puerto 8080 (es decir: http://192.168.10.20:8080/) para acceder al panel de administración web de CockroachDB. Se te pedirá que te autentiques en CockroachDB.

Introduce el usuario alice y la contraseña, y haz clic en Iniciar sesión.

iniciar sesión en el servidor cockroachdb

Si tienes el usuario y la contraseña adecuados, deberías acceder al panel de administración de CockroachDB. Deberías El clúster CockroachDB tiene dos servidores, 192.168.10.20 y 192.168.10.21.

panel de administración web cockroachdb

Funcionamiento básico de CockroachDB

En la siguiente sección, aprenderás a crear una nueva base de datos y una tabla, así como a insertar y recuperar datos en CockroachDB. El siguiente comando se ejecutará en el servidor srv1.

En primer lugar, ejecuta el siguiente comando para iniciar sesión en el clúster CockroachDB mediante el usuario alice.

cockroach sql --user=alice --certs-dir=/opt/cockroachdb/certs --host=srv1.hwdomain.lan:26257

Cuando se te pida la contraseña, introduce la contraseña del usuario alice.

iniciar sesión como nuevo usuario

Una vez conectado, ejecuta las siguientes consultas para crear una nueva base de datos testdb con la tabla users.

CREATE DATABASE testdb;
CREATE TABLE testdb.users (
   id INT PRIMARY KEY     NOT NULL,
   name           TEXT    NOT NULL,
   age            INT     NOT NULL,
   address        CHAR(50),
   salary         REAL
);

crear base de datos y tabla

Ahora ejecuta la consulta USE para cambiar a la base de datos testdb y ejecuta alguna de las consultas INSERT que aparecen a continuación para añadir nuevos datos a la tabla usuarios.

USE testdb;
INSERT INTO users (id,name,age,address,salary) VALUES (1, 'Paul', 32, 'California', 20000.00);
INSERT INTO users (id,name,age,address,salary) VALUES (2, 'Jesse', 35, 'Mexico', 30000.00);
INSERT INTO users (id,name,age,address,salary) VALUES (3, 'Linda', 27, 'Canada', 40000.00);

insertar nuevos datos

Por último, ejecuta la consulta SELECT que aparece a continuación para recuperar tus datos de la tabla usuarios.

SELECT * FROM users;

Tus datos deberían aparecer impresos en la pantalla de tu terminal.

recuperar datos

Comprobación de la replicación de bases de datos en el clúster CockroachDB

Tras crear una nueva base de datos e insertar nuevos datos, ahora comprobarás la replicación de la base de datos en el clúster CockroachDB desde el servidor srv2, así que asegúrate de ejecutar estos comandos en el servidor srv2.

En el servidor srv2, ejecuta el siguiente comando para conectarte al servidor CockroachDB a través del usuario alice.

cockroach sql --user=alice --certs-dir=/opt/cockroachdb/certs --host=srv2.hwdomain.lan:26257

Introduce la contraseña del usuario alice cuando se te solicite.

Una vez conectado, ejecuta la siguiente consulta para comprobar la lista de bases de datos disponibles en el clúster CockroachDB.

SHOW DATABASES;

Si la replicación de bases de datos se realiza correctamente, deberías tener la base de datos testdb disponible en el servidor srv2.

conectar con el servidor srv2

Ahora ejecuta las siguientes consultas para cambiar a la base de datos testdb y recuperar los datos disponibles de la tabla usuarios.

USE testdb;
SELECT * FROM users;

Si la replicación tiene éxito, deberías ver tus datos en el servidor srv2.

replicación de bases de datos cherck

Conclusión

¡Enhorabuena y bien hecho! Has completado la instalación del clúster CockroachDB en tus servidores AlmaLinux 9. Has creado un clúster seguro de CockroachDB con certificados SSL/TLS y ejecutando CockroachDB como un servicio systemd en segundo plano. Además, también has aprendido algunas consultas básicas para crear un usuario administrador y una base de datos e insertar y recuperar datos en CockroachDB.

Con esto en mente, ya puedes empezar a migrar al clúster CockroachDB y tu base de datos se replicará automáticamente en varios nodos.

Scroll al inicio