Utilitzar una base de dades externa

Aquesta pàgina descriu com configurar Cyberwatch perquè utilitzi una base de dades externa en lloc de la base de dades en contenidor de la instància de Cyberwatch.

Requisits de programari

Cyberwatch és compatible amb les bases de dades següents:

  • MariaDB 11.8 o 12.3
  • MySQL 8.4 o 9.7

    Us recomanem que utilitzeu MariaDB 12.3 o, si utilitzeu MySQL, la versió 9.7 LTS.

Requisits de maquinari

Cyberwatch recomana la configuració de maquinari següent al servidor que allotja la base de dades per garantir el bon funcionament de l’aplicació:

  • 2 vCPU
  • 12 GB de RAM
  • 100 GB d’espai de disc

Casos d’ús d’una base de dades externa

Per defecte, Cyberwatch utilitza una base de dades MariaDB en contenidor.

En alguns casos, cal utilitzar una base de dades externalitzada en lloc d’una base de dades en contenidor.

Cyberwatch requereix l’ús d’una base de dades externalitzada per a qualsevol instància que hagi de supervisar 5000 actius o més. L’ús d’una base de dades externalitzada també és possible per a les instàncies més petites, tenint en compte els avantatges i les limitacions següents.

Avantatges de l’ús d’una base de dades externalitzada

  • possibilitat de personalitzar les configuracions de la base de dades
  • ús d’un servidor dedicat, que permet assignar els recursos amb més precisió
  • millor rendiment
  • mecanismes de replicació i de còpia de seguretat configurables amb més precisió

Limitacions de l’ús d’una base de dades externalitzada

  • l’ús d’un servidor dedicat comporta necessitats d’infraestructura addicionals
  • el manteniment de la base de dades i del servidor dedicat no és responsabilitat de Cyberwatch, tot i que els nostres equips estan disponibles per assessorar-vos si cal

Creació d’un usuari i d’una base de dades externa dedicada

Si utilitzeu un servidor de base de dades dedicat, cal crear una base de dades i concedir-ne tots els privilegis a un usuari dedicat. Per defecte, Cyberwatch utilitza una base de dades i un usuari anomenats olympe.

Aquestes operacions es poden fer executant les ordres següents des del servidor de base de dades:

CREATE DATABASE olympe;
CREATE USER 'olympe'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON olympe.* TO 'olympe'@'%';
FLUSH PRIVILEGES;

En assignar els privilegis, cal substituir % per l’adreça IP del servidor Cyberwatch, o pel seu nom de domini amb el format %.example.com, sempre que la resolució inversa funcioni. En una arquitectura de diversos nodes, aquesta operació s’ha de repetir per a cada satèl·lit, si els privilegis s’assignen per adreça IP.

Configuració de la plataforma base de Cyberwatch

Generació d’una còpia de seguretat de la base de dades en contenidor

En cas de migració d’una base de dades en contenidor existent, cal fer una còpia de seguretat de la base de dades de l’aplicació.

Per fer-ho, utilitzeu l’ordre:

sudo cyberwatch backup save

El bolcat generat està disponible al directori /var/lib/cyberwatch/backups/ i permetrà restaurar la base de dades de Cyberwatch.

Configurar els nodes de Cyberwatch perquè utilitzin la base de dades externa

L’ús d’una base de dades externalitzada requereix configurar el node mestre de Cyberwatch amb l’opció --no-db. En una instància d’un sol node, amb l’ordre:

sudo cyberwatch configure --no-db

En una instància de diversos nodes, cal especificar totes les opcions de configuració. Configureu el node mestre amb l’ordre següent:

sudo cyberwatch configure --no-db --master

A continuació, configureu els satèl·lits amb l’ordre següent:

sudo cyberwatch configure --no-db --satellite 

L’opció --no-db indica a Cyberwatch que s’utilitza una base de dades externa i, per tant, desactiva l’ús de la base de dades en contenidor.

Si els fitxers de configuració ja existeixen, l’executable cyberwatch preguntarà a l’usuari si vol fer canvis de configuració.

Si responeu afirmativament a les sol·licituds de canvi de configuració, podreu configurar els certificats TLS i una part de les variables de connexió a la base de dades.

Generació dels certificats

L’executable cyberwatch permet generar els certificats necessaris per configurar un xifratge TLS per a la comunicació entre les instàncies de Cyberwatch i la base de dades dedicada.

Aquests certificats permeten a les instàncies de Cyberwatch comprovar que es connecten realment al servei esperat, però, en canvi, no permeten a aquests serveis comprovar la identitat dels clients que s’hi connecten. En aquest cas, una bona manera de reforçar la configuració del TLS unidireccional és limitar els privilegis d’accés a la base de dades, definint una llista exhaustiva dels orígens dels clients.

Per tant, quan se us demani la informació necessària per generar els certificats, cal indicar l’adreça IP i el nom o els noms DNS dels serveis als quals es connectaran les instàncies.

Per a la base de dades, els certificats útils són els següents:

  • /etc/cyberwatch/certs/cbw-root-ca-cert.pem: certificat arrel que s’utilitza per generar els certificats dels serveis. Permet a les instàncies de Cyberwatch verificar els certificats dipositats a la base de dades i a la base de dades Redis
  • /etc/cyberwatch/certs/cbw-db-cert.pem: certificat per a la base de dades
  • /etc/cyberwatch/certs/cbw-db-key.pem: clau privada per a la base de dades

Aquests tres fitxers s’han de copiar al servidor de base de dades i indicar al fitxer de configuració de la base de dades; aquests elements es detallen més avall.

Afegir el certificat arrel a l’aplicació Cyberwatch

Si configureu un parell de claus signat per una autoritat de certificació externa, cal declarar-la com a autoritat de confiança addicional a Cyberwatch. Per fer-ho, n’hi ha prou de concatenar el certificat arrel d’aquesta autoritat i el de Cyberwatch.

Docker-Swarm

A Docker Swarm, aquesta operació es pot fer amb l’ordre següent:

sudo cat chemin_du_certificat_racine_de_lautorité_externe.pem >> /etc/cyberwatch/certs/cbw-root-ca-cert.pem

Kubernetes

A Kubernetes, cal crear un secret dedicat amb l’ordre següent, substituint YOUR_CA_FILE.pem pel nom del fitxer que conté el certificat arrel:

kubectl -n cyberwatch create secret generic db-root-ca --from-file=db-root-ca.pem=YOUR_CA_FILE.pem

A continuació, cal indicar el nom del secret generat al fitxer values.yml del chart de Helm:

database:
  external: true
  
  tls: 
    mode: required
    secret: db-root-ca 

Després, cal desplegar el chart segons el procediment descrit a Actualitzar l’aplicació i la plataforma base de Cyberwatch a Kubernetes.

Adaptar la configuració de Cyberwatch a la base de dades externa

A continuació, cal substituir la contrasenya MYSQL_PASSWORD per la de l’usuari dedicat al fitxer /etc/cyberwatch/secrets.env.

D’altra banda, la informació de connexió a la base de dades externa es pot editar des del fitxer /etc/cyberwatch/containers.env; pot ser necessari modificar-hi:

  • el valor del camp MYSQL_HOSTNAME per l’adreça del servidor de base de dades al qual cal connectar-se
  • el valor del camp MYSQL_DATABASE pel nom de la base de dades dedicada
  • el valor del camp MYSQL_USER pel nom de l’usuari dedicat creat anteriorment

Un cop aplicada aquesta configuració, cal reiniciar el servidor de base de dades perquè sigui persistent. A més, és important comprovar que el TLS està activat després de definir aquests certificats; per fer-ho, n’hi ha prou d’executar l’ordre:

SHOW VARIABLES LIKE 'have_ssl';

Restaurar el bolcat de la base de dades

Només en cas de migració, finalment es pot restaurar la base de dades de l’aplicació executant l’ordre:

sudo cyberwatch backup restore

Configuració de la base de dades

Modificació de la configuració per defecte

Per poder aprofitar les millores de rendiment que s’esperen de l’ús d’una base de dades externalitzada, cal configurar-la en funció del dimensionament de la instància de Cyberwatch. La configuració per defecte no és satisfactòria.

El fitxer de configuració que cal editar pot dependre de la base de dades i del sistema on està instal·lada. En aquesta documentació, optem per modificar el fitxer /etc/my.cnf (o /etc/mysql/my.cnf) tenint en compte la configuració que es detalla a continuació.

Aquest és un exemple de configuració habitual per a una base de dades externalitzada:

[mysqld]
character-set-server       = utf8mb4
collation-server           = utf8mb4_general_ci
innodb_buffer_pool_size    = 4096M
innodb_log_file_size       = 1024M              # innodb_redo_log_capacity pour les serveurs MySQL
innodb_fast_shutdown       = 0
innodb_snapshot_isolation  = 0                  # Uniquement pour les serveurs MariaDB
ssl-ca=/path/to/cbw-root-ca-cert.pem
ssl-cert=/path/to/generated-db-cert.pem
ssl-key=/path/to/generated-db-key.pem
default-time-zone=+00:00

Per als servidors MySQL, cal suprimir l’opció innodb_snapshot_isolation, que només és compatible amb MariaDB, i substituir innodb_log_file_size per innodb_redo_log_capacity amb el mateix valor. MySQL 9.7 ja no reconeix innodb_log_file_size i no s’inicia.

  • Les dues primeres línies permeten definir el joc de caràcters que cal utilitzar per evitar qualsevol problema de codificació
  • Les quatre línies següents són les configuracions mínimes d’InnoDB que cal utilitzar en la data de redacció d’aquesta documentació
  • Les tres línies següents permeten especificar la ubicació dels certificats al servidor que allotja la base de dades Aquests certificats permeten configurar un xifratge TLS entre les instàncies de Cyberwatch i la base de dades
  • La darrera línia serveix per posar la base de dades al fus horari UTC per no tenir desfasaments horaris a Cyberwatch

Per a més informació, consulteu la documentació de MariaDB sobre els fitxers de configuració: https://mariadb.com/kb/en/configuring-mariadb-with-option-files/#default-option-file-locations-on-linux-unix-mac

Adaptar la configuració a la mida de la base de dades

Aquesta configuració per defecte s’ha d’adaptar segons el dimensionament de la base de dades de Cyberwatch.

La mida de la base de dades dependrà principalment del nombre d’actius supervisats.

Cal seguir dues regles d’or en qualsevol circumstància per obtenir un rendiment raonable:

  • la variable innodb_buffer_pool_size sempre ha de ser superior a la mida de la base de dades
  • la variable innodb_log_file_size (innodb_redo_log_capacity per a MySQL) ha de ser aproximadament igual o lleugerament superior al valor de innodb_buffer_pool_size/4

Sovint es defineixen altres paràmetres per millorar el rendiment de la base de dades. L’ideal és seguir les recomanacions de l’eina MySQLTuner, que permet fer un diagnòstic de l’estat de salut i del rendiment de la base de dades.

Ús de MySQLTuner

MySQLTuner és una eina de codi obert que permet auditar la configuració d’una base de dades MySQL i que emet recomanacions de configuració per millorar el rendiment i l’estabilitat de la instal·lació: https://github.com/major/MySQLTuner-perl

L’eina MySQLTuner està integrada al contenidor sidekiq de l’aplicació Cyberwatch i, per tant, es pot utilitzar amb l’ordre següent:

sudo cyberwatch mysqltuner

En funció de les recomanacions que emeti l’script, es podran fer modificacions de configuració a la base de dades. Si teniu cap pregunta, no dubteu a posar-vos en contacte amb el nostre suport tècnic.

Comprovar la comunicació amb la base de dades

La comunicació amb la base de dades dedicada es considera operativa quan la sortida de l’ordre següent és semblant a la que es mostra a continuació:

  • sudo cyberwatch logs sidekiq_master per a Docker Swarm
  • kubectl -n cyberwatch logs --selector app=sidekiq-master --tail=-1 per a Kubernetes
Start healthcheck server...
Watch Redis
Testing redis uri redis:6379
Trying to connect to redis://redis:6379/0
Redis is up !
Watch Migration
All migration are done
Healthcheck completed reporting a successful start
Redis is on the same node, TLS is not required.
Checking if MariaDB supports TLS
TLS is available for MariaDB
Root CA found and valid, MariaDB certificate will be verified
2023-12-04T16:22:58.483Z pid=1 tid=53x INFO: Booted Rails 7.0.8 application in production environment

Aquesta ordre es pot executar des del node mestre o des d’un node satèl·lit per comprovar la comunicació del node en qüestió amb la base de dades.