Usar una base de datos externa
Esta pagina describe como configurar Cyberwatch para usar una base de datos externa en lugar de la base de datos en contenedor de la instancia Cyberwatch.
Requisitos de software
Cyberwatch soporta las siguientes bases de datos:
- MariaDB 11.4 o 11.8
MySQL 8.X
Recomendamos usar MariaDB 11.8, o, si usa MySQL, la version 8.4 LTS como mínimo.
Requisitos de hardware
Cyberwatch recomienda la siguiente configuración de hardware en el servidor que aloja la base de datos para asegurar el correcto funcionamiento de la aplicación:
- 2 vCPU
- 12 GB de RAM
- 100 GB de espacio en disco
Casos de uso de una base de datos externa
Cyberwatch usa por defecto una base de datos MariaDB en contenedor.
El uso de una base de datos externalizada en lugar de contenedor se vuelve necesario en ciertos casos.
Cyberwatch requiere el uso de una base de datos externalizada para cualquier instancia que supervise 5000 o mas activos. El uso de una base externalizada también es posible para instancias mas pequenas, considerando las ventajas y limitaciones a continuación.
Ventajas del uso de una base externalizada
- posibilidad de personalizar la configuración de la base
- uso de un servidor dedicado, que permite asignar recursos con mayor precision
- mejor rendimiento
- mecanismos de replicacion y backups mas finamente configurables
Limitaciones del uso de una base externalizada
- el uso de un servidor dedicado conlleva necesidades de infraestructura adicionales
- el mantenimiento de la base de datos y del servidor dedicado no corresponde a Cyberwatch, aunque nuestros equipos están disponibles para aconsejarle en caso necesario
Creación de un usuario y una base externa dedicada
En el caso de usar un servidor de base de datos dedicado, es necesario crear una base otorgando todos los privilegios a un usuario dedicado. Por defecto, Cyberwatch usa una base de datos y un usuario llamados olympe.
Estas operaciones pueden realizarse ejecutando los siguientes comandos desde el servidor de base de datos:
CREATE DATABASE olympe;
CREATE USER 'olympe'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON olympe.* TO 'olympe'@'%';
FLUSH PRIVILEGES;
Al asignar los privilegios, es necesario reemplazar % por la dirección IP del servidor Cyberwatch, o su nombre de dominio, en el formato %.example.com, siempre que la resolución inversa sea funcional. En el caso de una arquitectura con varios nodos, esta operación debe repetirse para cada satélite, si la asignación de privilegios se realiza por dirección IP.
Configuración del socle Cyberwatch
Generación de un backup de la base en contenedor
En el caso de una migración de una base de datos en contenedor existente, se debe realizar un backup de la base de datos de la aplicación.
Para ello, use el comando:
sudo cyberwatch backup save
El dump generado esta disponible en el directorio /var/lib/cyberwatch/backups/ y permitirá restaurar la base de datos Cyberwatch.
Configurar los nodos Cyberwatch para usar la base de datos externa
El uso de una base de datos externalizada requiere configurar el nodo maestro Cyberwatch con la opción --no-db. En el caso de una instancia de un solo nodo, con el comando:
sudo cyberwatch configure --no-db
En el caso de una instancia multi-nodos, es necesario especificar todas las opciones de configuración. Configurar el nodo maestro con el siguiente comando:
sudo cyberwatch configure --no-db --master
Configurar luego los satelites con el comando siguiente:
sudo cyberwatch configure --no-db --satellite
La opción --no-db permite indicar a Cyberwatch el uso de una base de datos externa y desactiva el uso de la base en contenedor.
En caso de que los archivos de configuración ya existan, el ejecutable cyberwatch solicitara al usuario si desea realizar cambios de configuración.
Responder afirmativamente a las solicitudes de cambios de configuración le permitirá configurar los certificados TLS así como una parte de las variables de conexión a la base de datos.
Generación de certificados
El ejecutable cyberwatch permite generar los certificados necesarios para implementar un cifrado TLS para la comunicación entre las instancias Cyberwatch y la base de datos dedicada.
Estos certificados permiten a las instancias Cyberwatch verificar que se conectan al servicio esperado, pero no permiten que estos servicios verifiquen la identidad de los clientes que se conectan. Una buena forma de endurecer en este caso la configuración de TLS unidireccional es limitar los privilegios de acceso a la base de datos, definiendo una lista exhaustiva de las fuentes de los clientes.
Por lo tanto, durante las solicitudes de información para la generación de certificados, debe indicar la dirección IP y el/los nombres DNS de los servicios a los que se conectaran las instancias.
Para la base de datos, los certificados utiles son los siguientes:
/etc/cyberwatch/certs/cbw-root-ca-cert.pem: certificado raiz usado para generar los certificados de los servicios. Permite a las instancias Cyberwatch verificar los certificados instalados en la base de datos y la base Redis/etc/cyberwatch/certs/cbw-db-cert.pem: certificado para la base de datos/etc/cyberwatch/certs/cbw-db-key.pem: clave privada para la base de datos
Estos tres archivos deben copiarse en el servidor de base de datos y declararse en el archivo de configuración de la base. Estos elementos se detallan mas abajo.
Agregar el certificado raiz a la aplicación cyberwatch
En el caso de implementar un par de claves firmado por una autoridad de certificacion externa, es necesario declararla como autoridad de confianza adicional en Cyberwatch. Para ello, basta con concatenar el certificado raiz de esa autoridad y el de Cyberwatch.
Docker-Swarm
En Docker Swarm, esta operación puede realizarse con el comando siguiente:
sudo cat camino_del_certificado_raiz_de_la_autoridad_externa.pem >> /etc/cyberwatch/cbw-root-ca-cert.pem
Kubernetes
En Kubernetes, esto pasa por crear un secreto dedicado con el comando siguiente, reemplazando YOUR_CA_FILE.pem por el nombre del archivo que contiene el certificado raiz:
kubectl -n cyberwatch create secret generic db-root-ca --from-file=db-root-ca.pem=YOUR_CA_FILE.pem
Luego el nombre del secreto generado debe indicarse en el archivo values.yml del chart helm:
database:
external: true
tls:
mode: required
secret: db-root-ca
Luego el chart debe desplegarse según el procedimiento indicado Actualizar la aplicación y el socle Cyberwatch en Kubernetes.
Adaptar la configuración de Cyberwatch a la base externa
A continuación, es necesario reemplazar la contraseña MYSQL_PASSWORD por la del usuario dedicado en el archivo /etc/cyberwatch/secrets.env.