Saltar a contenido

Instalación

Nota

Recordatorio: el cambio a root en las máquinas Debian debe realizarse con el siguiente comando:

1
su -

Las instrucciones indicadas en esta página deben seguirse para la instalación de todos los nodos del clúster de PostgreSQL.

Configuración de los sistemas

Conexión a la máquina

Por defecto, hay dos cuentas en los aparatos virtuales: una cuenta de usuario y una cuenta de superusuario.

  • Cuenta de usuario
    • Iniciación de sesión: systancia
    • Paseo: systnci
  • Cuenta de superusuario
    • Iniciación de sesión: root
    • Paseo: systnci

Conectarse a la máquina en modo de consola.

Nota

El diseño predeterminado del teclado es QWERTY.

Modificación de la distribución del teclado

Puede cambiar el diseño del teclado con la siguiente línea de comandos:

1
dpkg-reconfigure keyboard-configuration

Aparece un menú que le permite elegir otro diseño de teclado.

Luego use la siguiente línea de comandos para aplicar y guardar la configuración:

1
setupcon -k --save

La configuración entrará en vigor inmediatamente después de que se ejecute este comando.

Configuración de la red

Es posible que la appliance virtual no reciba ninguna configuración de red al arrancar, por los siguientes motivos:

  • El nombre de la interfaz de red no es ens192: la appliance está configurada en DHCP únicamente en la interfaz ens192
  • No hay ningún servidor DHCP disponible

Para comprobar el nombre de la interfaz de red, su estado y las direcciones IP asignadas, ejecute el siguiente comando como root:

1
ip -br a | grep -ve "^lo"
Ejemplo

Tras ejecutar el comando, se muestra la siguiente respuesta:

1
ens192      UP      10.100.0.51/24

El nombre de la interfaz de red en el ejemplo es ens192, la interfaz está activa y tiene la dirección IP 10.100.0.51/24.

Si el nombre es distinto de ens192 o si el comando no devuelve ninguna configuración de red, deberá configurar la red manualmente con los siguientes comandos:

1
2
ip address add IP_ADDRESS/SUBNET dev DEV_NAME
ip route add default via GATEWAY

Sustituya:

  • IP_ADDRESS por la dirección IP de la máquina
  • SUBNET por la subred
  • DEV_NAME nombre de la interfaz de red obtenida anteriormente
  • GATEWAY por la puerta de enlace de red
Ejemplo

Para configurar el nodo PostgreSQL con la siguiente información:

  • Dirección IP: 10.100.0.51
  • Subred: /24 o 255.255.255.0
  • Nombre de la interfaz de red: eth0
  • Puerta de enlace de red: 10.100.0.254

Los comandos son los siguientes:

1
2
ip address add 10.100.0.51/24 dev eth0
ip route add default via 10.100.0.254

Nota

Esta configuración de red es temporal, por lo que cualquier reinicio del servidor restablecerá los ajustes manuales realizados con los comandos ip address e ip route.
La configuración permanente la realizará la utilidad de configuración del clúster de PostgreSQL.

No obstante, gracias a esta configuración de red, ya puede acceder al nodo PostgreSQL por SSH.

Modificación de la zona horaria

Por defecto, el aparato virtual está configurado en la zona horaria Europe/Paris.

Para cambiar esta zona horaria, primero use el siguiente comando para recuperar la sintaxis de las zonas horarias disponibles:

1
timedatectl list-timezones

Entonces use la siguiente línea de comandos:

1
timedatectl set-timezone your_time_zone
Ejemplo

Para establecer la zona horaria de Londres, se debe ejecutar el siguiente comando:

1
timedatectl set-timezone Europe/London

Compruebe la zona horaria del servidor usando la siguiente línea de comandos:

1
timedatectl

Configuración de un servidor de tiempo NTP

Peligro

Se recomienda encarecidamente configurar un servidor de tiempo para mantener el reloj del sistema actualizado: cualquier diferencia horaria entre los nodos PostgreSQL puede provocar inestabilidad, e incluso dejar el clúster fuera de servicio.

Los pasos necesarios se describen en la página de configuración NTP (la configuración es equivalente a la de los servidores Mediation Controller de CyberElements Bastion).

Creación de una PKI para generar los certificados de los nodos PostgreSQL

Información

Esta sección es opcional si ya dispone de una PKI con la que haya podido generar los certificados indicados en los requisitos previos.
Esta sección presenta las distintas etapas de creación de una PKI y de los certificados necesarios para el clúster de PostgreSQL. Tenga en cuenta que no se indica cómo renovarlos, ya que la renovación de un certificado implica volver a crearlo.

Omitir esta etapa

¡Atención!

El procedimiento descrito se ha validado en una máquina Debian 12 con el paquete openssl. No obstante, cualquier máquina que disponga de una versión reciente de OpenSSL (la versión validada es 3.0.17) podrá completar el procedimiento. Salvo en Windows o MacOS, donde habrá que adaptar los comandos del sistema.

Definición de las variables y personalizaciones

Esta sección proporciona diversos comandos y archivos de configuración que utilizan variables que pueden modificarse.
La tabla siguiente recoge todos los valores y permite definirlos para poder modificarlos directamente en los comandos que se muestran en esta página.

Valor Variable Definición
PSQL_IP Dirección IP virtual del clúster de PostgreSQL.
PSQL_NAME Nombre corto (no el FQDN) asociado a la dirección IP virtual del clúster de PostgreSQL.
PSQL_1_IP Dirección IP del nodo n°1 del clúster de PostgreSQL.
PSQL_1_NAME Nombre corto (no el FQDN) del nodo n°1 del clúster de PostgreSQL.
PSQL_2_IP Dirección IP del nodo n°2 del clúster de PostgreSQL.
PSQL_2_NAME Nombre corto (no el FQDN) del nodo n°2 del clúster de PostgreSQL.
PSQL_3_IP Dirección IP del nodo n°3 del clúster de PostgreSQL.
PSQL_3_NAME Nombre corto (no el FQDN) del nodo n°3 del clúster de PostgreSQL.
CA_ROOT_NAME Nombre asignado a la autoridad de certificación (CA) raíz de la PKI.

Preparación

Las siguientes acciones se realizarán en un nuevo directorio, con el fin de reunir todos los archivos nuevos en un único directorio. Puede utilizarse cualquier directorio, pero su acceso debe estar restringido en la medida de lo posible. Conéctese al nodo PostgreSQL n°1 como root y ejecute los siguientes comandos:

1
2
3
mkdir /root/psql-certificates/
chmod 600 /root/psql-certificates/
cd /root/psql-certificates/

Creación de la autoridad de certificación raíz

Ejecute el siguiente comando para crear una nueva CA raíz. Se le solicitará una contraseña para proteger la CA:

1
openssl req -x509 -newkey rsa:4096 -days 3650 -sha512 -keyout CA_ROOT_NAME.key -out CA_ROOT_NAME.crt -subj "/CN=CA_ROOT_NAME" -extensions v3_ca -addext "subjectKeyIdentifier=hash" -addext "authorityKeyIdentifier=keyid:always,issuer:always" -addext "basicConstraints=critical,CA:true" -addext "keyUsage=critical,digitalSignature,cRLSign,keyCertSign"

Sustituya CA_ROOT_NAME por el nombre de la CA raíz si no lo ha personalizado aquí.

Creación de los certificados

Los comandos necesarios para generar los certificados de los nodos PostgreSQL son los siguientes:

1
2
3
openssl genrsa -out PSQL_1_NAME.key 4096
openssl req -new -key PSQL_1_NAME.key -out PSQL_1_NAME.csr -subj "/CN=PSQL_1_NAME"
openssl x509 -req -in PSQL_1_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_1_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_1_NAME,IP:PSQL_IP,IP:PSQL_1_IP")

Sustituya CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP y PSQL_1_NAME si no los ha personalizado aquí.

1
2
3
openssl genrsa -out PSQL_2_NAME.key 4096
openssl req -new -key PSQL_2_NAME.key -out PSQL_2_NAME.csr -subj "/CN=PSQL_2_NAME"
openssl x509 -req -in PSQL_2_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_2_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_2_NAME,IP:PSQL_IP,IP:PSQL_2_IP")

Sustituya CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP y PSQL_2_NAME si no los ha personalizado aquí.

1
2
3
openssl genrsa -out PSQL_3_NAME.key 4096
openssl req -new -key PSQL_3_NAME.key -out PSQL_3_NAME.csr -subj "/CN=PSQL_3_NAME"
openssl x509 -req -in PSQL_3_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_3_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_3_NAME,IP:PSQL_IP,IP:PSQL_3_IP")

Sustituya CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP y PSQL_3_NAME si no los ha personalizado aquí.

El primer comando crea una nueva clave, el segundo genera un archivo de solicitud de firma de certificado CSR y el tercero crea el certificado propiamente dicho.

Ya solo queda convertir el certificado a P12, lo que le exigirá definir una contraseña:

1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_1_NAME.key -in PSQL_1_NAME.crt -out PSQL_1_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_2_NAME.key -in PSQL_2_NAME.crt -out PSQL_2_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_3_NAME.key -in PSQL_3_NAME.crt -out PSQL_3_NAME.p12

Los archivos necesarios para la instalación del clúster de PostgreSQL se encuentran aquí (sustituya las variables CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME y PSQL_3_NAME por los valores que haya elegido anteriormente):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certificado de la CA raíz
  • /root/psql-certificates/PSQL_1_NAME.p12: certificado del nodo PostgreSQL n°1
  • /root/psql-certificates/PSQL_2_NAME.p12: certificado del nodo PostgreSQL n°2
  • /root/psql-certificates/PSQL_3_NAME.p12: certificado del nodo PostgreSQL n°3

Instalación de un clúster de PostgreSQL

Información

Las etapas siguientes deben realizarse en los tres nodos PostgreSQL.

Preparación para la configuración del clúster de PostgreSQL

Es necesario establecer una conexión SFTP o SCP para enviar a la appliance:

  • El certificado de la autoridad de certificación que ha firmado los certificados de los nodos PostgreSQL
  • El certificado del nodo PostgreSQL en formato P12

Tenga en cuenta que las conexiones SFTP o SCP no pueden iniciarse con la cuenta root. Además, los archivos pueden colocarse simplemente en /home/systancia/.

Es necesario mover estos archivos a un nuevo directorio:

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_?_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/ROOT_CA_NAME.crt /etc/ssl/certs/cleanroom/

Sustituya:

  • PSQL_?_NAME por el nombre del certificado destinado al nodo PostgreSQL que se está instalando
  • ROOT_CA_NAME por el nombre del certificado de la autoridad de certificación raíz
1
2
3
mkdir /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/PSQL_1_NAME.p12 /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Los comandos anteriores deben haberse personalizado conforme a los parámetros de personalización.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_2_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Los comandos anteriores deben haberse personalizado conforme a los parámetros de personalización.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_3_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Los comandos anteriores deben haberse personalizado conforme a los parámetros de personalización.

Configuración del nodo PostgreSQL

Para iniciar la configuración del nodo, deben ejecutarse los siguientes comandos:

1
2
cd /etc/ssl/certs/cleanroom/
ConfigureSystanciaVault.py

El segundo comando inicia una utilidad que solicitará la siguiente información:

  1. Las nuevas contraseñas de los usuarios locales root y systancia
  2. El nombre del nodo PostgreSQL (no el FQDN)
  3. La dirección IP del nodo PostgreSQL, el nombre de su interfaz de red, la puerta de enlace de red predeterminada que debe utilizarse, así como los servidores DNS y el sufijo DNS
  4. La versión de PostgreSQL; se recomienda utilizar la versión 15
  5. El puerto de acceso al clúster de PostgreSQL; se recomienda utilizar el puerto 5432
  6. La contraseña de la cuenta PostgreSQL utilizada para la replicación y para pg_rewind
  7. El nombre y la dirección IP de un segundo nodo PostgreSQL
  8. El nombre y la dirección IP del último nodo PostgreSQL
  9. La dirección IP virtual del clúster de PostgreSQL
  10. Las direcciones IP (separadas por comas) de las Edge Gateways de CyberElements Bastion o de cualquier otra máquina que deba conectarse al clúster
  11. El nombre y la contraseña de la cuenta de usuario PostgreSQL
  12. Las direcciones IP o redes (separadas por comas) autorizadas a conectarse por SSH a los nodos PostgreSQL
  13. La información de certificado del nodo PostgreSQL (certificado del nodo en formato P12 + certificado de la CA raíz)

Tras introducir esta información, se mostrará un resumen de todo lo que ha indicado antes de la validación.
Tras confirmar la información proporcionada, aparecerá un mensaje relativo a los cambios en el archivo /etc/ssh/sshd_config. Seleccione la opción predeterminada, keep the local version currently installed.

Para aplicar la configuración, es necesario reiniciar:

1
reboot
Consejo para acelerar la instalación de los nodos PostgreSQL n°2 y n°3

Tras instalar el nodo PostgreSQL n°1, puede recuperar los parámetros de configuración utilizados para su instalación en el archivo /etc/cleanroom-vault.ini.

Ejemplo del archivo /etc/cleanroom-vault.ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Basta con modificar las líneas resaltadas con los valores del nodo PostgreSQL que se está instalando, a partir del archivo recuperado del nodo PostgreSQL n°1.

Peligro

Si reutiliza el archivo de ejemplo, deberá modificar todos los valores resaltados siguientes según su entorno:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Configuraciones adicionales para patronictl

Para poder utilizar los comandos de gestión del clúster de PostgreSQL con patronictl, quedan algunos comandos que deben ejecutarse como root en el nodo PostgreSQL:

1
2
3
4
sed -i "s/2380/2380, 8008/g" /etc/nftables.conf
systemctl reload nftables
cp /etc/patroni/ca.crt /usr/local/share/ca-certificates/PSQL-CA.crt
update-ca-certificates

Configuraciones adicionales para etcd

Para permitir la compactación y la desfragmentación automáticas de la base de datos de etcd, ejecute los siguientes comandos como root en el nodo PostgreSQL:

1
2
3
4
5
6
7
apt update
apt install etcd-client
echo -e 'ETCD_AUTO_COMPACTION_MODE="periodic"\nETCD_AUTO_COMPACTION_RETENTION="1"' >> /etc/default/etcd
systemctl restart etcd
echo -e '#!/bin/bash\n\nsource /etc/default/etcd\netcdctl --endpoints=${ETCD_ADVERTISE_CLIENT_URLS}  --cert=${ETCD_CERT_FILE} --key=${ETCD_KEY_FILE} "$@"' > /usr/bin/clr_etcdctl
chmod a+x /usr/bin/clr_etcdctl
echo '0 3 * * * root clr_etcdctl defrag' > /etc/cron.d/systancia-db

Creación de la base de datos default necesaria para la instalación de CyberElements Bastion

Al instalar CyberElements Bastion, primero debe crear una base de datos llamada default.
Para ello, rellene la tabla siguiente para personalizar el comando que deberá ejecutar desde cualquiera de los nodos del clúster de PostgreSQL:

Valor Variable Definición
PSQL_VIP Dirección IP virtual del clúster de PostgreSQL.
DB_USER El nombre de usuario de la base de datos indicado durante la configuración del nodo PostgreSQL

Comando que debe ejecutarse desde cualquiera de los nodos del clúster de PostgreSQL:

1
createdb -h PSQL_VIP -U DB_USER default