PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Multi-DC PostgreSQL :Configuration d'un nœud de secours à une géolocalisation différente sur un VPN

Auparavant, nous avons écrit sur la configuration d'un cluster de bases de données géo-distribuées à l'aide de la réplication MySQL. Cette fois, il s'agit de PostgreSQL. La configuration d'un cluster géo-distribué pour PostgreSQL n'est pas un nouveau concept et la topologie est assez courante.

Pour atteindre une haute disponibilité, les organisations et les entreprises dispersent leurs nœuds de base de données afin que lorsqu'un événement catastrophique se produit dans une région spécifique (qui affecte votre centre de données), vos nœuds de secours soient disponibles pour le basculement.

Il s'agit d'une pratique très courante (utilisant ce type de topologie) dans le cadre des plans de continuité des activités et de reprise après sinistre de votre organisation. Ce type de topologie supprime le fait d'avoir un point de défaillance unique (SPOF). Une exigence courante, surtout si vous avez un faible RPO et un temps de disponibilité plus élevé (si possible à 99,999999999 %).

Dans ce blog, je vais prendre une implémentation simple sur la façon de procéder à l'aide de ClusterControl. ClusterControl est un logiciel de gestion et d'automatisation sans agent pour les clusters de bases de données. Il aide à déployer, surveiller, gérer et mettre à l'échelle votre serveur/cluster de base de données directement à partir de l'interface utilisateur de ClusterControl.

La configuration architecturale souhaitée

Le résultat visé ici est de déployer efficacement dans un environnement sécurisé. Pour ce faire, il est important que vous deviez placer votre connexion établie entre deux utilisations VPN et que vous soyez plus sécurisé si vous configuriez également vos nœuds de base de données via une connexion TLS/SSL. Pour cette configuration dans notre blog, nous déployons simplement un nœud sur un VPN et vous montrons comment vous pouvez facilement appliquer cette approche. Voir ci-dessous le schéma de la configuration cible :

Pour élaborer la configuration, le réseau sur site doit communiquer sur le public cloud à l'aide d'un tunnel VPN et ces deux réseaux doivent avoir une passerelle VPN afin que les deux puissent communiquer ou établir une connexion. ClusterControl vous oblige à superviser tous les nœuds qui doivent être enregistrés car il collectera des informations sur vos nœuds pour les métriques de données. En plus de cela, il faut que votre nœud d'écriture actif sur site puisse également atteindre le nœud de secours dans l'autre domaine, qui est pour ce blog, hébergé sur Google Cloud Platform (GCP).

Configurer votre OpenVPN

La configuration d'OpenVPN est très délicate pour les deux domaines de réseau. L'essentiel de ceci est qu'il doit avoir la considération suivante :

  • Les nœuds de votre site sur site doivent pouvoir établir une connexion avec les nœuds du domaine de cloud public cible
  • Les nœuds de votre site sur site peuvent avoir accès à Internet pour télécharger les packages nécessaires à la configuration. À moins que vous n'ayez tous les référentiels stockés localement qui sont nécessaires, cela peut ne pas être le cas
  • Les nœuds de votre domaine de cloud public doivent pouvoir établir une connexion avec les nœuds sur site
  • Les nœuds de votre domaine de cloud public peuvent avoir accès à Internet pour télécharger les packages nécessaires à la configuration. À moins que vous n'ayez tous les référentiels stockés localement qui sont nécessaires, cela peut ne pas être le cas

Installation et configuration d'OpenVPN

Première étape

Installez le package openvpn (et les packages easy-rsa pour les distributions Ubuntu/Debian)

$ sudo apt-get install openvpn easy-rsa

Pour les systèmes d'exploitation basés sur CentOS/RHEL, 

$ sudo yum install openvpn wget

$ wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz

Étape 2

Générez vos certificats tels que les certificats d'autorité de certification (CA), de serveur et de client.

Pour Ubuntu/Debian, vous pouvez effectuer les actions suivantes :

$ /usr/bin/make-cadir CA

Passer au répertoire CA

$ cd CA

À ce stade, vous pouvez modifier le fichier vars en fonction de vos besoins, par exemple

export KEY_COUNTRY="SE"

export KEY_PROVINCE="SMD"

export KEY_CITY="Kalmar"

export KEY_ORG="Severalnines"

export KEY_EMAIL="[email protected]"

export KEY_CN="S9s"

export KEY_NAME="server"

export KEY_OU="Support Unit"

Ensuite, exécutez le script vars pour définir les variables d'environnement requises

[ ~/CA ]$ source ./vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /CA/keys

Exécuter un nettoyage

[ ~/CA ]$ ./clean-all

Ensuite, créez les certificats pour votre autorité de certification, votre serveur et votre client.

[ ~/CA ]$ ./build-ca

[ ~/CA ]$ ./build-key-server server

 $ ./build-dh 2048

[ ~/CA ]$ ./build-key client

Enfin, générez une clé Perfect Forward Secrecy.

$ openvpn --genkey --secret pfs.key

Si vous utilisez des distributions de type CentOS/RHEL, vous pouvez effectuer les opérations suivantes :

$ tar xfz /tmp/easyrsa

$ sudo mkdir /etc/openvpn/easy-rsa

$ sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa

# Assurez-vous que vos clés RSA sont sur la bonne autorisation pour des raisons de sécurité

$ sudo chown vagrant /etc/openvpn/easy-rsa/

$ sudo cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn

$ sudo mkdir /etc/openvpn/easy-rsa/keys

$ sudo nano /etc/openvpn/easy-rsa/vars

$ cd /etc/openvpn/easy-rsa

À ce stade, vous pouvez modifier le fichier vars en fonction de vos besoins, par exemple

export KEY_COUNTRY="SE"

export KEY_PROVINCE="SMD"

export KEY_CITY="Kalmar"

export KEY_ORG="Severalnines"

export KEY_EMAIL="[email protected]"

export KEY_CN="S9s"

export KEY_NAME="server"

export KEY_OU="Support Unit"

Ensuite, exécutez le script vars pour définir les variables d'environnement requises

$ source ./vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /CA/keys

Exécuter un nettoyage

$ ./clean-all

Ensuite, créez les certificats pour votre autorité de certification, votre serveur et votre client.

$ ./build-ca

$ ./build-key-server server

$ ./build-dh 2048

$ cd /etc/openvpn/easy-rsa

$ ./build-key client

$ cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Une fois que vous avez tout configuré, vous devez tenir compte de l'emplacement de vos clés et certificats. Si vous utilisez systemd ou service sous Linux pour l'exécuter, vous pouvez placer vos certificats et clés dans /etc/openvpn. Vous devrez probablement exécuter la commande suivante :

sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

Étape 3

À ce stade, je me retrouve avec la configuration suivante du serveur et du client. Voir mes fichiers de configuration en conséquence,

Configuration du serveur OpenVPN

$ cat /etc/openvpn/server-ovpn.conf 

port 1194

proto udp

dev tun

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/server.crt

key /etc/openvpn/keys/server.key # This file should be kept secret

dh /etc/openvpn/keys/dh2048.pem

cipher AES-256-CBC

auth SHA512

server 10.8.0.0 255.255.255.0

client-to-client

topology subnet

push "route 192.168.30.0 255.255.255.0"

#push "redirect-gateway def1 bypass-dhcp"

#push "redirect-gateway"

push "dhcp-option DNS 8.8.8.8"

push "dhcp-option DNS 8.8.4.4"

ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key

persist-tun

#status openvpn-status.log

#log-append  openvpn.log

verb 3

tls-server

tls-auth /etc/openvpn/keys/pfs.key

La chose la plus importante que vous devez prendre en compte sont les options suivantes, comme indiqué ci-dessous.

client à client - Très important pour que les nœuds du VPN puissent envoyer un ping aux autres nœuds dans un domaine de réseau différent. Disons que ClusterControl est situé sur site, il peut envoyer un ping aux nœuds dans GCP.

push "route 192.168.30.0 255.255.255.0" :je pousse les tables de routage afin que le ou les nœuds GCP connectés au VPN puissent envoyer un ping à mes nœuds dans le domaine sur site. Dans ma passerelle VPN GCP, j'ai les tables de routage suivantes en push "route 10.142.0.0 255.255.255.0"

#push "redirect-gateway def1 bypass-dhcp" ,

#push "redirect-gateway" - Ces deux sections ne sont pas nécessaires car j'ai besoin d'une connexion Internet pour configurer mon référentiel et les packages dépendants lors de l'installation.

push "dhcp-option DNS 8.8.8.8", 

push "dhcp-option DNS 8.8.4.4" : ces deux sections peuvent être modifiées selon le DNS de votre choix si nécessaire. Ceci est pour votre DNS souhaité, en particulier lorsque vous avez besoin d'une connexion Internet.

Configuration du client OpenVPN

$ cat openvpn/client-vpn.ovpn 

client

dev tun

proto udp

remote 34.73.238.239  1194  

ca ca.crt

cert client.crt

key client.key

tls-version-min 1.2

tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256

cipher AES-256-CBC

auth SHA512

resolv-retry infinite

auth-retry none

nobind

persist-key

persist-tun

ns-cert-type server

comp-lzo

verb 3

tls-client

tls-auth pfs.key

La chose la plus importante ici est que vous devez être sûr de vos chemins de clé, et également remplacer les paramètres dans cette section,

remote 34.73.238.239  1194  

qui peut être le nom d'hôte/l'adresse IP de la passerelle de votre serveur VPN auquel se connecter.

Étape 4

Enfin, configurez le serveur proxy VPN pour que les paquets réseau soient acheminés vers l'interface réseau sur le serveur et permettre au noyau de transférer le trafic IPV4

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Pour une installation plus approfondie, je vous suggère de consulter ces articles pour CentOS et sur Ubuntu.

S'étendre efficacement sur le cloud

Supposons que vous ayez la topologie suivante dans votre domaine sur site,

et vous souhaitez maintenant étendre votre disponibilité sur un autre centre de données, qui est GCP pour ce blog. Le déploiement à l'aide de ClusterControl est très simple. Vous pouvez effectuer la procédure suivante indiquée ci-dessous,

Première étape

Créer un cluster esclave

Étape 2

Choisissez votre maître pour la réplication,

Étape 3

Configurez l'accès à votre environnement de cloud public

Étape 4

Spécifiez le nom d'hôte/IP de votre nœud à étendre dans votre cluster de réplication PG,

Étape 5

Enfin, surveillez l'activité du travail, comment ClusterControl réagit-il à ce type d'action

Le résultat vous montrera le lien entre votre centre de données sur site et votre centre de données étendu, qui se trouve dans ce blog, notre nœud de secours GCP PostgreSQL. Voir ci-dessous pour le résultat

Conclusion

La configuration d'un nœud de secours de géolocalisation n'est pas difficile, mais le principal problème est de savoir dans quelle mesure il sera sécurisé dans votre conception architecturale. L'utilisation d'un VPN peut atténuer la principale préoccupation du problème. L'utilisation d'OpenVPN n'est qu'un moyen simple de mettre cela en œuvre, mais pour les applications transactionnelles lourdes, les organisations sont susceptibles d'investir dans des services ou du matériel haut de gamme pour faire face à cette configuration. Aussi en ajoutant un TLS/SSL peut être plus facile que fait. Nous en discuterons sur la façon dont vous pouvez utiliser TLS/SSL avec PostgreSQL dans nos prochains blogs.