Saltar a contenido

Instalación

Nota

Como recordatorio, el cambio a root en las máquinas Debian debe hacerse con el siguiente comando:

1
su -

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

Configuración del sistema

Conexión con la máquina

Cambiar el diseño del teclado

Configuración de la red

El dispositivo virtual puede no recibir una configuración de red cuando se inicia por las siguientes razones:

  • El nombre de la interfaz de red no es ens192: el aparato está configurado con DHCP para la interfaz ens192 solamente
  • No hay 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"
Example

Después de 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 diferente de ens192 o el comando no devuelve ninguna configuración de red, deberá configurar una configuración de red manualmente utilizando los siguientes comandos:

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

Sustituir:

  • IP_ADDRESS por la dirección IP de la máquina
  • SUBNET por la subred
  • DEV_NAME nombre de la interfaz de red consultada anteriormente
  • GATEWAY por el portal de red
Example

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 acceso a la 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

Note

Esta configuración de red es temporal, por lo que cualquier reinicio del servidor restablecerá la configuración manual hecha con el ip address y ip route las órdenes.
La configuración permanente será realizada por la utilidad de configuración de clúster PostgreSQL.

Sin embargo, gracias a esta configuración de red, ahora se puede acceder al nodo PostgreSQL a través de SSH.

Modificación de las zonas horarias

Configurando un servidor de tiempo NTP

Danger

Se recomienda encarecidamente que configure un servidor de tiempo para mantener el reloj del sistema actualizado: cualquier diferencia de tiempo entre los nodos de PostgreSQL puede causar inestabilidad o incluso hacer que el clúster deje de funcionar.

Los pasos necesarios se describen en el la página de configuración de NTP (la configuración es equivalente a la de cibernéticoLos elementos Cleanroom Mediation Controller servidores).

Creando una PKI para generar certificados de nodo de PostgreSQL

Info

Esta sección es opcional si ya tiene un PKI a partir del cual ha podido generar el los certificados indicados en los requisitos previos.
Esta sección presentará los diversos pasos para crear un PKI y los certificados requeridos para el clúster PostgreSQL. Tenga en cuenta que no se indicará cómo renovarlos, ya que la renovación de un certificado implica su recreación.

Salta este paso

Warning

El procedimiento descrito ha sido validado en una máquina Debian 12 con el openssl Sin embargo, cualquier máquina con una versión reciente de OpenSSL (la versión validada es 3.0.17En el caso de los sistemas operativos Windows y MacOS, los comandos del sistema deberán adaptarse.

Definición de las variables y personalizaciones

Esta sección proporciona varios comandos y archivos de configuración que utilizan variables que pueden modificarse.
La tabla siguiente resume todos los valores y le permite definirlos para que pueda 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 con la dirección IP virtual del clúster PostgreSQL.
PSQL_1_IP Dirección IP del nodo #1 del clúster de PostgreSQL.
PSQL_1_NAME Nombre corto (no el FQDN) del nodo #1 del clúster PostgreSQL.
PSQL_2_IP Dirección IP del nodo #2 del clúster de PostgreSQL.
PSQL_2_NAME Nombre corto (no el FQDN) del nodo #2 del clúster PostgreSQL.
PSQL_3_IP Dirección IP del nodo #3 del clúster de PostgreSQL.
PSQL_3_NAME Nombre corto (no el FQDN) del nodo #3 del clúster PostgreSQL.
CA_ROOT_NAME Nombre asignado a la autoridad de certificación raíz (AC) del PKI.

Planificación y preparación

Las siguientes acciones se realizarán en un nuevo directorio para reunir todos los nuevos archivos en un solo directorio. Se puede utilizar cualquier directorio, pero su acceso debe limitarse tanto como sea posible. * Inicie sesión en el 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 pedirá 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 con el nombre de la CA raíz si no lo ha personalizado aquí .

Creación de certificados

Los comandos necesarios para generar certificados para 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")

Reemplazar CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP y PSQL_1_NAME si no lo ha hecho Lo he hecho 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")

Reemplazar CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP y PSQL_2_NAME si no lo ha hecho Lo he hecho 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")

Reemplazar CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP y PSQL_3_NAME si no lo ha hecho Lo he hecho aquí..

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

El certificado aún necesita ser convertido a P12, lo que requerirá que usted establezca 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 instalar el clúster PostgreSQL se pueden encontrar aquí (reemplazar las variables CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME y PSQL_3_NAME con los elementos seleccionados anteriormente):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certificado de la autoridad de certificación raíz
  • /root/psql-certificates/PSQL_1_NAME.p12: certificado para el nodo PostgreSQL n°1
  • /root/psql-certificates/PSQL_2_NAME.p12: certificado para el nodo n°2 de PostgreSQL
  • /root/psql-certificates/PSQL_3_NAME.p12: certificado para el nodo n°3 de PostgreSQL

Instalación de un clúster de PostgreSQL

Info

Las siguientes instrucciones deben ejecutarse en los 3 nodos PostgreSQL.

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

Es necesario establecer una conexión SFTP o SCP para enviar al aparato:

  • El certificado de la autoridad de certificación que firmó los certificados para los nodos PostgreSQL
  • El certificado de nodo PostgreSQL en P12 formato

Tenga en cuenta que la conexión SFTP o SCP no puede ser inicializada con la cuenta root. Además, los archivos pueden simplemente ser dejados 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/

Sustituir:

  • 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 haber sido personalizados de acuerdo con la configuración 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 haber sido personalizados de acuerdo con la configuración 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 haber sido personalizados de acuerdo con la configuración de personalización.

Configuración del nodo PostgreSQL

Para iniciar la inicialización de la configuración del nodo, se deben ejecutar los siguientes comandos:

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

El segundo comando lanzará una utilidad que requerirá la siguiente información:

  1. Nuevas contraseñas para usuarios locales root y systancia
  2. 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 para usar, así como los servidores DNS y el sufijo DNS
  4. La versión de PostgreSQL; se recomienda el uso de la versión 15
  5. El puerto de acceso al clúster PostgreSQL; se recomienda el uso del puerto 5432
  6. Paseword para la cuenta PostgreSQL utilizada para la replicación y para pg_rewind
  7. Nombre y dirección IP de un segundo nodo PostgreSQL
  8. Nombre y dirección IP del último nodo PostgreSQL
  9. Dirección IP virtual del clúster de PostgreSQL
  10. Las direcciones IP (separadas por comas) de los cibernéticoLos elementos Cleanroom Puertas de enlace de borde o cualquier otra máquina que necesite conectarse al grupo.
  11. Nombre y contraseña de la cuenta de usuario de PostgreSQL
  12. Las direcciones IP o redes (separadas por comas) autorizadas para conectarse a través de SSH a los nodos PostgreSQL
  13. Información sobre el certificado para el nodo PostgreSQL (certificado de nodo en formato P12 + certificado de CA raíz)

Después de introducir esta información, se le proporcionará un resumen de todas sus entradas antes de la validación.
Después de validar la información proporcionada, aparecerá un mensaje sobre la aplicación de los cambios en el archivo /etc/ssh/sshd_config. Por favor, responda con la opción predeterminada keep the local version currently installed.

Para aplicar la configuración, se requiere un reinicio:

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

Después de instalar el nodo PostgreSQL n°1, es posible recuperar los parámetros utilizados para configurarlo desde este nodo utilizando 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

Simplemente modifique las líneas resaltadas con los valores del nodo PostgreSQL que se está instalando, basado en el archivo que recuperó del nodo PostgreSQL n°1.

Danger

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 usar los comandos de administración de clúster de PostgreSQL con patronictl, todavía hay algunos comandos para ejecutar como root en el nodo de 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