Cómo instalar un clúster CockroachDB en Ubuntu 22.04

CockroachDB es una base de datos SQL distribuida, libre y nativa de la nube, que se utiliza para construir y gestionar servicios en la nube modernos y escalables. Te ayuda a sobrevivir a fallos de software y hardware. Almacena copias de los datos en múltiples ubicaciones para ofrecer un acceso rápido. Está construida sobre un almacén de valores clave transaccional y fuertemente consistente, y es capaz de sobrevivir a fallos de disco, máquina y centro de datos con una interrupción de latencia casi nula y sin intervención manual.

Este tutorial explicará cómo configurar un clúster CockroachDB de tres nodos en un servidor Ubuntu 22.04.

Requisitos previos

  • Tres servidores con Ubuntu 22.04.
  • Una contraseña de root configurada en cada servidor.

En este tutorial, utilizaremos la siguiente configuración:

nombre de hostdirección IP

nodo1 192.168.10.10

nodo2 192.168.10.11

nodo3 192.168.10.12

Actualiza tu sistema

Antes de empezar, es muy recomendable actualizar todos los nodos a la última versión. Puedes actualizar todos los nodos uno a uno ejecutando el siguiente comando:

apt update -y
apt upgrade -y

Una vez actualizados todos los nodos, reinícialos para aplicar los cambios.

Configurar la sincronización horaria

Antes de empezar, tendrás que configurar una sincronización horaria entre todos los nodos. Puedes hacerlo utilizando el chrony.

Primero, instala chrony con el siguiente comando:

apt install chrony -y

Una vez instalado, edita el archivo de configuración de chrony con el siguiente comando:

nano /etc/chrony/chrony.conf

Busca el pool por defecto y sustitúyelo por las siguientes líneas:

pool 0.id.pool.ntp.org iburst maxsources 4
pool 1.id.pool.ntp.org iburst maxsources 1
pool 2.id.pool.ntp.org iburst maxsources 1
pool 3.id.pool.ntp.org iburst maxsources 2

Guarda y cierra el archivo y, a continuación, reinicia el servicio chrony y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl restart chrony
systemctl enable chrony

Una vez que hayas terminado, puedes pasar al siguiente paso.

Instalar CockroachDB en todos los nodos

En esta sección, instalaremos CockroachDB en todos los nodos. Ejecuta los siguientes comandos en todos los nodos para instalar CockroachDB.

En primer lugar, descarga la última versión de CockroachDB de su sitio web oficial utilizando el siguiente comando:

wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz

Una vez finalizada la descarga, extrae el archivo descargado con el siguiente comando:

tar -xvzf cockroach-latest.linux-amd64.tgz

A continuación, copia el binario de CockroachDB en el directorio /usr/local/bin con el siguiente comando:

cp cockroach-*/cockroach /usr/local/bin/

A continuación, verifica la versión de CockroachDB con el siguiente comando:

cockroach version

Deberías obtener la siguiente salida:

Build Tag:        v22.2.2
Build Time:       2023/01/04 17:23:00
Distribution:     CCL
Platform:         linux amd64 (x86_64-pc-linux-gnu)
Go Version:       go1.19.1
C Compiler:       gcc 6.5.0
Build Commit ID:  07a53a36601e9ca5fcffcff55f69b43c6dfbf1c1
Build Type:       release

En este punto, CockroachDB está instalado en todos los nodos. Ya puedes pasar al siguiente paso.

Crear certificados

CockroachDB también requiere certificados de servidor y cliente para una conexión segura. En primer lugar, crea un directorio para almacenar los archivos de los certificados en todos los nodos. Ejecuta el siguiente comando en todos los nodos para crear un directorio certs:

mkdir ~/certs

A continuación, tendrás que crear un certificado CA, un certificado raíz y un certificado de cliente.

Crear certificado CA

En el nodo1, crea un certificado CA utilizando el siguiente comando:

cockroach cert create-ca --certs-dir=certs --ca-key=certs/ca.key

Este comando generará ca.key y ca.crt dentro del directorio ~/certs.

A continuación, copia la CA generada a ambos nodos utilizando el siguiente comando:

scp ~/certs/ca.crt ~/certs/ca.key [email protected]:~/certs/
scp ~/certs/ca.crt ~/certs/ca.key [email protected]:~/certs/

Crear certificado de cliente

A continuación, tendrás que generar un certificado de cliente para asegurar la comunicación entre SQL y el clúster.

Ejecuta el siguiente comando en todos los nodos para generar el certificado de cliente:

cockroach cert create-client root --certs-dir=certs --ca-key=certs/ca.key

Una vez que hayas terminado, puedes proceder a crear un certificado de servidor.

Crear certificados de servidor

A continuación, tendrás que generar el certificado de servidor para asegurar la comunicación entre los servidores del cluster CockroachDB.

En el nodo1, ejecuta el siguiente comando para generar el certificado de servidor:

cockroach cert create-node localhost $(hostname) 192.168.10.10 --certs-dir=certs --ca-key=certs/ca.key

En el nodo2, ejecuta el siguiente comando para generar el certificado de servidor:

cockroach cert create-node localhost $(hostname) 192.168.10.11 --certs-dir=certs --ca-key=certs/ca.key

En el nodo3, ejecuta el siguiente comando para generar el certificado de servidor:

cockroach cert create-node localhost $(hostname) 192.168.10.12 --certs-dir=certs --ca-key=certs/ca.key

Esto generará el archivo node.key y node.crt dentro del directorio ~/certs.

Puedes listar todos los certificados con el siguiente comando:

cockroach --certs-dir=certs cert list

Deberías obtener la siguiente salida:

Certificate directory: certs
  Usage  | Certificate File |    Key File     |  Expires   |                   Notes                    | Error
---------+------------------+-----------------+------------+--------------------------------------------+--------
  CA     | ca.crt           |                 | 2033/01/17 | num certs: 1                               |
  Node   | node.crt         | node.key        | 2028/01/14 | addresses: localhost,vultr,192.168.10.10 |
  Client | client.root.crt  | client.root.key | 2028/01/14 | user: root                                 |
(3 rows)

Una vez que hayas terminado, puedes pasar al siguiente paso.

Iniciar el Cluster CockroachDB

En este punto, todos los certificados están listos para iniciar el clúster CockroachDB.

En el nodo1, ejecuta el siguiente comando para anunciar el Cluster CockroachDB Seguro:

cockroach start --background --certs-dir=certs --advertise-host=192.168.10.10 --join=192.168.10.10,192.168.10.11,192.168.10.12 --background

Deberías obtener la siguiente salida.

* WARNING: Running a server without --sql-addr, with a combined RPC/SQL listener, is deprecated.
* This feature will be removed in the next version of CockroachDB.
*
*
* INFO: initial startup completed.
* Node will now attempt to join a running cluster, or wait for `cockroach init`.
* Client connections will be accepted after this completes successfully.
* Check the log file(s) for progress. 

A continuación, inicializa el clúster con el siguiente comando.

cockroach init --certs-dir=certs --host=192.168.10.10

Por defecto, el clúster CockroachDB escucha en el puerto 26257. Puedes comprobarlo con el siguiente comando.

ss -antpl | grep 26257

Obtendrás la siguiente salida.

LISTEN 0      4096               *:26257            *:*    users:(("cockroach",pid=86868,fd=25))

También puedes comprobar el estado del clúster con el siguiente comando:

cockroach node status --certs-dir=certs --host=192.168.10.10

Deberías obtener la siguiente salida:

  id |        address        |      sql_address      |  build  |              started_at              |              updated_at              | locality | is_available | is_live
-----+-----------------------+-----------------------+---------+--------------------------------------+--------------------------------------+----------+--------------+----------
   1 | 192.168.10.10:26257 | 192.168.10.10:26257 | v22.2.2 | 2023-01-10 07:19:44.009519 +0000 UTC | 2023-01-10 07:20:24.521341 +0000 UTC |          | true         | true
(1 row)

Una vez que hayas terminado, puedes pasar al siguiente paso.

Añadir los nodos restantes al clúster

A continuación, tendrás que añadir los dos nodos al clúster CockroachDB.

En el nodo 2, ejecuta el siguiente comando para añadirlo al clúster CockroachDB.

cockroach start --background --certs-dir=certs --advertise-host=192.168.10.11 --listen-addr=192.168.10.11 --join=192.168.10.10:26257

En el nodo 3, ejecuta el siguiente comando para añadirlo al clúster CockroachDB.

cockroach start --background --certs-dir=certs --advertise-host=192.168.10.12 --listen-addr=192.168.10.12 --join=192.168.10.10:26257

A continuación, vuelve al nodo1 y comprueba el estado del clúster utilizando el siguiente comando:

cockroach node status --certs-dir=certs --host=192.168.10.10

Deberías ver que todos los nodos se han añadido al clúster.

  id |        address        |      sql_address      |  build  |              started_at              |              updated_at              | locality | is_available | is_live
-----+-----------------------+-----------------------+---------+--------------------------------------+--------------------------------------+----------+--------------+----------
   1 | 192.168.10.10:26257 | 192.168.10.10:26257 | v22.2.2 | 2023-01-10 07:19:44.009519 +0000 UTC | 2023-01-10 07:21:27.529911 +0000 UTC |          | true         | true
   2 | 192.168.10.11:26257  | 192.168.10.11:26257  | v22.2.2 | 2023-01-10 07:21:04.206015 +0000 UTC | 2023-01-10 07:21:26.718227 +0000 UTC |          | true         | true
   3 | 192.168.10.12:26257 | 192.168.10.12:26257 | v22.2.2 | 2023-01-10 07:21:17.704146 +0000 UTC | 2023-01-10 07:21:26.718768 +0000 UTC |          | true         | true

En este punto, el clúster CockroachDB está iniciado y a la escucha en el puerto 8080. Ya puedes pasar al siguiente paso.

Acceder al Panel de Control de CockroachDB

CockroachDB proporciona una interfaz web sencilla y fácil de usar para supervisar el clúster. Antes de acceder a la interfaz web de CockroachDB, deberás crear un usuario administrador y establecer una contraseña para él.

En el nodo1, accede al shell SQL de cockroachdb con el siguiente comando:

cockroach sql --certs-dir=certs --host=192.168.10.10

A continuación, crea un usuario llamado user1 y establece la contraseña con el siguiente comando:

[email protected]:26257/defaultdb> CREATE USER user1 WITH PASSWORD 'securepassword';

A continuación, sal del intérprete de comandos SQL con el siguiente comando.

[email protected]:26257/defaultdb> exit;

Ahora, abre tu navegador y accede a la interfaz web de CockroachDB utilizando la URL https://node1-ip-address:8080. Deberías ver la siguiente página:

CucarachaDB

Introduce tu nombre de usuario y contraseña de administrador y haz clic en el botón INICIAR SESIÓN. Deberías ver el panel de control de CockroachDB en la siguiente página:

Panel CockroachDB

Verificar la replicación de la base de datos en Custer

A continuación, deberás verificar si la base de datos está replicada entre todos los nodos o no.

En el nodo1, inicia sesión en el intérprete de comandos SQL con el siguiente comando:

cockroach sql --certs-dir=certs --host=192.168.10.10

A continuación, crea una base de datos llamada wpdb1 y wpdb2 con el siguiente comando:

create database wpdb1;
create database wpdb2;

A continuación, verifica las bases de datos con el siguiente comando:

show databases;

Deberías ver todas las bases de datos en la siguiente salida:

  database_name | owner | primary_region | secondary_region | regions | survival_goal
----------------+-------+----------------+------------------+---------+----------------
  defaultdb     | root  | NULL           | NULL             | {}      | NULL
  postgres      | root  | NULL           | NULL             | {}      | NULL
  system        | node  | NULL           | NULL             | {}      | NULL
  wpdb1         | root  | NULL           | NULL             | {}      | NULL
  wpdb2         | root  | NULL           | NULL             | {}      | NULL
(5 rows)


Time: 3ms total (execution 3ms / network 1ms)

A continuación, ve al Nodo2 y verifica si la base de datos está replicada o no.

En el nodo2, entra en el intérprete de comandos SQL con el siguiente comando:

cockroach sql --certs-dir=certs --host=192.168.10.11

Ejecuta el siguiente comando para mostrar las bases de datos:

show databases;

Deberías ver la wpdb1 y la wpdb2 en la siguiente salida:

  database_name | owner | primary_region | secondary_region | regions | survival_goal
----------------+-------+----------------+------------------+---------+----------------
  defaultdb     | root  | NULL           | NULL             | {}      | NULL
  postgres      | root  | NULL           | NULL             | {}      | NULL
  system        | node  | NULL           | NULL             | {}      | NULL
  wpdb1         | root  | NULL           | NULL             | {}      | NULL
  wpdb2         | root  | NULL           | NULL             | {}      | NULL
(5 rows)


Time: 7ms total (execution 6ms / network 1ms)

La salida anterior indica que la replicación de bases de datos está funcionando en el Cluster CockroachDB.

Conclusión

Esta guía ha explicado cómo instalar y configurar un Clúster CockroachDB seguro en un servidor Ubuntu 22.04. Ahora puedes escalar tu clúster fácilmente añadiendo nodos adicionales al clúster. No dudes en preguntarme si tienes alguna duda. Para más información, puedes visitar la documentación oficial de CockroachDB.

También te podría gustar...