Aller au contenu

Installation

Note

Pour rappel, le passage en tant que root sur les machines Debian doit s'effectuer avec la commande suivante :

1
su -

Les indications données sur cette page seront à reproduire pour l'installation de l'ensemble des nœuds du cluster PostgreSQL.

Paramétrages systèmes

Connexion à la machine

Par défaut, deux comptes sont présents sur les appliances virtuelles : un compte utilisateur et un compte super-utilisateur.

  • Compte utilisateur
    • Login : systancia
    • Mot de passe : systnci
  • Compte super-utilisateur
    • Login : root
    • Mot de passe : systnci

Connectez-vous en mode console à la machine.

Note

La disposition du clavier est par défaut en QWERTY.

Modification de la disposition du clavier

Vous pouvez changer la disposition du clavier avec la ligne de commande suivante :

1
dpkg-reconfigure keyboard-configuration

Un menu apparaît pour permettre de choisir une autre disposition de clavier.

Utilisez ensuite la ligne de commande suivante pour appliquer et péréniser le paramétrage :

1
setupcon -k --save

La prise en compte des paramètres est immédiate après le lancement de cette commande.

Configuration du réseau

Il se peut que l'appliance virtuelle ne reçoive pas de configuration réseau à son démarrage pour les raisons suivantes :

  • Le nom de l'interface réseau n’est pas ens192 : l’appliance est paramétrée en DHCP pour l’interface ens192 seulement
  • Aucun serveur DHCP n'est disponible

Pour contrôler le nom de l’interface réseau, son état et les adresses IP affectées, lancez la commande suivante en tant que root :

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

Après exécution de la commande le retour suivant est affiché :

1
ens192      UP      10.100.0.51/24

Le nom de l'interface réseau de l'exemple est ens192, l'interface est active et possède l'adresse IP 10.100.0.51/24.

Dans le cas où le nom est différent d'ens192 ou que la commande ne ressort aucun paramétrage réseau, il faudra paramétrer une configuration réseau manuellement grâce aux commandes suivantes :

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

Remplacez :

  • IP_ADDRESS par l'adresse IP de la machine
  • SUBNET par le sous-réseau
  • DEV_NAME nom de l'interface réseau récupéré précédemment
  • GATEWAY par la passerelle réseau
Example

Pour configurer le nœud PostgreSQL avec les informations suivantes :

  • Adresse IP : 10.100.0.51
  • Sous-réseau : /24 ou 255.255.255.0
  • Nom de l'interface réseau : eth0
  • Passerelle réseau : 10.100.0.254

Les commandes sont les suivantes :

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

Note

Cette configuration réseau est temporaire, par conséquent tout redémarrage du serveur entrainera la réinitialisation du paramétrage manuel réalisé avec les commandes ip address et ip route.
Un paramétrage permanent sera réalisé par l'utilitaire de configuration du cluster PostgreSQL.

Pour autant grâce à cette configuration réseau il vous est maintenant possible d'accéder en SSH au nœud PostgreSQL.

Modification du fuseau horaire

Par défaut, l'appliance virtuelle est paramétrée sur le fuseau horaire Europe/Paris.

Pour changer ce fuseau horaire, commencez par utiliser la commande suivante pour récupérer la syntaxe des fuseaux horaires disponibles :

1
timedatectl list-timezones

Utilisez ensuite la ligne de commande suivante :

1
timedatectl set-timezone your_time_zone
Exemple

Pour définir le fuseau horaire sur celui de Londres la commande suivante doit être exécutée :

1
timedatectl set-timezone Europe/London

Vérifiez le fuseau horaire du serveur en utilisant la ligne de commande suivante :

1
timedatectl

Configuration d'un serveur de temps NTP

Danger

Il est vivement recommandé de paramétrer un serveur de temps pour maintenir l'horloge du système à jour : tout écart de temps entre les nœuds PostgreSQL pourra provoquer des instabilités voire l'arrêt du fonctionnement du cluster.

Les étapes nécessaires sont décrites sur la page de configuration du NTP (la configuration étant équivalente à celle des serveurs Mediation Controller cyberelements Cleanroom).

Création d'une PKI pour générer les certificats des nœuds PostgreSQL

Information

Cette section est facultative si vous possédez déjà une PKI depuis laquelle vous avez pu générer les certificats indiqués dans les prérequis.
Il sera présenté dans cette section les différentes étapes permettant de créer une PKI et les certificats nécessaires au cluster PostgreSQL. A noter qu’il ne sera pas indiqué comment les renouveler, le renouvèlement d’un certificat consistant en sa recréation.

Passer cette étape

Attention !

La procédure indiquée a été validée sur une machine Debian 12 possédant le paquet openssl. Pour autant, toute machine ayant une version récente d’OpenSSL (la version validée étant la 3.0.17) pourra permettre d’arriver au bout de la procédure. Sauf s’il s’agit de Windows ou MacOS où il faudra adapter les commandes systèmes.

Définition des variables et personnalisations

Cette section propose différentes commandes et fichiers de configurations utilisant des variables à modifier.
Le tableau ci-dessous récapitule l'ensemble des valeurs et vous permet de les définir pour les modifier directement dans les commandes affichées sur cette page.

Valeur Variable Définition
PSQL_IP Adresse IP virtuelle du cluster PostgreSQL.
PSQL_NAME Nom court (pas le FQDN) associé à l'IP virtuelle du cluster PostgreSQL.
PSQL_1_IP Adresse IP du nœud n°1 du cluster PostgreSQL.
PSQL_1_NAME Nom court (pas le FQDN) du nœud n°1 du cluster PostgreSQL.
PSQL_2_IP Adresse IP du nœud n°2 du cluster PostgreSQL.
PSQL_2_NAME Nom court (pas le FQDN) du nœud n°2 du cluster PostgreSQL.
PSQL_3_IP Adresse IP du nœud n°3 du cluster PostgreSQL.
PSQL_3_NAME Nom court (pas le FQDN) du nœud n°3 du cluster PostgreSQL.
CA_ROOT_NAME Nom affecté à l'autorité de certification (AC) racine de la PKI.

Préparation

Les actions suivantes seront réalisées dans un nouveau répertoire afin de rassembler l’ensemble des nouveaux fichiers dans un répertoire unique. N’importe quel répertoire peut être utilisé mais il faut en limiter son accès au maximum. Connectez-vous au nœud PostgreSQL n°1 en tant que root et exécutez les commandes suivantes :

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

Création de l'autorité de certification racine

Exécutez la commande suivante pour créer une nouvelle AC racine, un mot de passe vous sera demandé pour protéger l'AC :

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"

Remplacez CA_ROOT_NAME par le nom de l'AC racine si vous ne l'avez pas personnalisé ici.

Création des certificats

Les commandes nécessaires pour générer les certificats des nœuds PostgreSQL sont les suivantes :

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")

Remplacez CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP et PSQL_1_NAME si vous ne l'avez pas personnalisé ici.

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")

Remplacez CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP et PSQL_2_NAME si vous ne l'avez pas personnalisé ici.

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")

Remplacez CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP et PSQL_3_NAME si vous ne l'avez pas personnalisé ici.

La première commande créer une nouvelle clef, la seconde génère un fichier de requête de certificat CSR et la troisième créer le certificat en lui même.

Il reste encore la transformation du certificat en P12 où il sera demandé de définir un mot de passe :

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

Les fichiers nécessaires pour l'installation du cluster PostgreSQL se trouvent ici (veuillez remplacer la variables CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME et PSQL_3_NAME en fonction des éléments retenus précédemment) :

  • /root/psql-certificates/CA_ROOT_NAME.crt : certificat de l'AC racine
  • /root/psql-certificates/PSQL_1_NAME.p12 : certificat pour le nœud PostgreSQL n°1
  • /root/psql-certificates/PSQL_2_NAME.p12 : certificat pour le nœud PostgreSQL n°2
  • /root/psql-certificates/PSQL_3_NAME.p12 : certificat pour le nœud PostgreSQL n°3

Installation du cluster PostgreSQL

Information

Les indications suivantes seront à réaliser sur les 3 nœuds PostgreSQL.

Préparation à la configuration du cluster PostgreSQL

Il est nécessaire d’établir une connexion SFTP ou SCP afin d’envoyer sur l’appliance :

  • Le certificat de l’autorité de certification ayant signé les certificats pour les nœuds PostgreSQL
  • Le certificat du nœud PostgreSQL au format P12

A noter que la connexion SFTP ou SCP ne pourra pas s’initialiser avec le compte root. De plus les fichiers peuvent simplement être déposés dans /home/systancia/.

Il est nécessaire de déplacer ces fichiers dans un nouveau répertoire :

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/

Remplacez :

  • PSQL_?_NAME par le nom du certificat prévu pour le nœud PostgreSQL en cours d'installation
  • ROOT_CA_NAME par le nom du certificat de l'autorité de certification racine
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/

Les commandes ci-dessus doivent avoir été personnalisées en fonction des paramètres de personnalisation.

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/

Les commandes ci-dessus doivent avoir été personnalisées en fonction des paramètres de personnalisation.

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/

Les commandes ci-dessus doivent avoir été personnalisées en fonction des paramètres de personnalisation.

Configuration du nœud PostgreSQL

Afin de lancer l’initialisation de la configuration du nœud, les commandes suivantes doivent être exécutées :

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

La seconde commande lancera un utilitaire qui demandera plusieurs informations :

  1. Nouveaux mots de passe pour les utilisateurs locaux root et systancia
  2. Nom du nœud PostgreSQL (pas le FQDN)
  3. L’adresse IP du nœud PostgreSQL, le nom de son interface réseau, la passerelle réseau par défaut à utiliser, ainsi que les serveurs DNS et suffixe DNS
  4. La version de PostgreSQL, préférez l'usage de la version 15
  5. Le port d'accès au cluster PostgreSQL, préférez l'usage du port 5432
  6. Mot de passe du compte PostgreSQL utilisé pour la réplication ainsi que pour pg_rewind
  7. Nom et adresse IP d’un second nœud PostgreSQL
  8. Nom et adresse IP du dernier nœud PostgreSQL
  9. Adresse IP virtuelle du cluster PostgreSQL
  10. Les adresses IP (séparées par des virgules) des Edges Gateways cyberelements Cleanroom ou de toutes autres machines devant se connecter au cluster
  11. Nom et mot de passe du compte utilisateur PostgreSQL
  12. Les adresses IP ou réseaux (séparés par des virgules) autorisés à se connecter en SSH aux nœuds PostgreSQL
  13. Les informations liées aux certificats pour le nœud PostgreSQL (certificat du nœud au format P12 + certificat de l’AC racine)

Après saisie de ces informations, un récapitulatif de l'ensemble de vos saisies vous sera fourni avant validation.
Après avoir validé les informations fournies, un message apparaîtra concernant l'application de modifications au fichier /etc/ssh/sshd_config veuillez répondre le choix par défaut keep the local version currently installed.

Afin d'appliquer la configuration, un redémarrage est requis :

1
reboot
Astuce pour accélérer l'installation des nœuds PostgreSQL n°2 et n°3

Après avoir installé le nœud PostgreSQL n°1, il est possible de récupérer sur ce dernier les paramètres qui ont permis de la configurer à l'aide du fichier /etc/cleanroom-vault.ini.

Exemple de fichier /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

Il suffit de modifier les lignes surlignés avec les valeurs du nœud PostgreSQL en cours d'installation d'après le fichier que vous aurez récupéré sur le nœud PostgreSQL n°1.

Danger

Si vous réutilisez le fichier d'exemple, il vous faudra modifier toutes les valeurs surlignées suivantes en fonction de votre environnement :

 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

Configurations supplémentaires pour patronictl

Afin de permettre d'exploiter les commandes de gestion du cluster PostgreSQL avec patronictl, il reste encore quelques commandes à exécuter en tant que root sur le nœud 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

Création de la BDD default nécessaire pour l'installation de cyberelements Cleanroom

Lors de l'installation de cyberelements Cleanroom, il est nécessaire de créer en amont une BDD nommée default.
Pour se faire remplissez le tableau suivant pour personnaliser la commande qui vous sera nécessaire d'exécuter depuis un seul des nœuds du cluster PostgreSQL (n'importe lequel) :

Valeur Variable Définition
PSQL_VIP Adresse IP virtuelle du cluster PostgreSQL.
DB_USER Nom de l'utilisateur de la BDD déclaré lors de la Configuration du nœud PostgreSQL

Commande qui à exécuter depuis un seul des nœuds du cluster PostgreSQL (n'importe lequel) :

1
createdb -h PSQL_VIP -U DB_USER default