sql >> Database >  >> RDS >> PostgreSQL

Multi-DC PostgreSQL:een stand-byknooppunt instellen op een andere geografische locatie via een VPN

Eerder schreven we over het opzetten van een geografisch gedistribueerde databasecluster met MySQL-replicatie. Deze keer gaat het over PostgreSQL. Het opzetten van een geo-gedistribueerd cluster voor PostgreSQL is geen nieuw concept en de topologie is vrij gebruikelijk.

Om een ​​hoge beschikbaarheid te bereiken, verspreiden organisaties en bedrijven hun databaseknooppunten, zodat wanneer zich een rampzalige gebeurtenis voordoet in een specifieke regio (die uw datacenter beïnvloedt), u uw stand-byknooppunten beschikbaar heeft voor failover.

P>

Dit is een veel voorkomende praktijk (waarbij dit type topologie wordt gebruikt) als onderdeel van de plannen voor bedrijfscontinuïteit en noodherstel van uw organisatie. Dit type topologie verwijdert het hebben van een single point of failure (SPOF). Een veel voorkomende vereiste, vooral als je een lage RPO en een hogere uptime hebt (indien mogelijk tegen 99,999999999%).

In deze blog zal ik een eenvoudige implementatie geven om dit te doen met ClusterControl. ClusterControl is agentless beheer- en automatiseringssoftware voor databaseclusters. Het helpt bij het implementeren, bewaken, beheren en schalen van uw databaseserver/cluster rechtstreeks vanuit de gebruikersinterface van ClusterControl.

De gewenste architecturale opstelling

Het doel hier is om efficiënt te implementeren in een veilige omgeving. Om dit te doen, is het belangrijk dat u uw bestaande verbinding tussen het gebruik van VPN plaatst en dat u veiliger bent als u uw databaseknooppunten ook via een TLS/SSL-verbinding instelt. Voor deze opstelling in onze blog implementeren we eenvoudig een knooppunt via een VPN en laten we u zien hoe u deze aanpak eenvoudig kunt uitvoeren. Zie hieronder voor het diagram van de doelconfiguratie:

Om de installatie uit te werken, moet het lokale netwerk communiceren via het publiek cloud met behulp van een VPN-tunnel en beide netwerken hebben een VPN-gateway zodat beide kunnen communiceren of een verbinding tot stand kunnen brengen. ClusterControl vereist dat u toezicht houdt op alle knooppunten die moeten worden geregistreerd, omdat het informatie over uw knooppunten verzamelt voor gegevensmetrische gegevens. Afgezien daarvan is het vereist dat uw actieve-schrijver-node op locatie ook de standby-node kan bereiken in het andere domein, dat voor deze blog is, gehost in Google Cloud Platform (GCP).

Uw OpenVPN instellen

OpenVPN instellen is erg lastig voor beide netwerkdomeinen. De kern hiervan is dat het de volgende overweging moet hebben:

  • Knooppunten van uw on-prem zullen een verbinding tot stand kunnen brengen met de doelknooppunten van het openbare clouddomein
  • Nodes op uw locatie kunnen internettoegang hebben om pakketten te downloaden die nodig zijn om in te stellen. Tenzij je alle benodigde repositories lokaal hebt opgeslagen, kan dit niet het geval zijn
  • Nodes uit uw publieke clouddomein kunnen een verbinding tot stand brengen met de on-premise nodes
  • Knooppunten uit uw openbare clouddomein kunnen internettoegang hebben om pakketten te downloaden die vereist zijn om in te stellen. Tenzij je alle benodigde repositories lokaal hebt opgeslagen, kan dit niet het geval zijn

OpenVPN installatie en configuratie

Stap één

Installeer het openvpn-pakket (en easy-rsa-pakketten voor Ubuntu/Debian-distributies)

$ sudo apt-get install openvpn easy-rsa

Voor op CentOS/RHEL gebaseerd besturingssysteem, 

$ sudo yum install openvpn wget

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

Stap twee

Genereer uw certificaten, zoals certificeringsinstantie (CA), server- en clientcertificaten.

Voor Ubuntu/Debian kunt u de volgende acties uitvoeren:

$ /usr/bin/make-cadir CA

Wijzigen naar CA-map

$ cd CA

Op dit moment kunt u het vars-bestand waarschijnlijk aanpassen aan uw behoeften, bijvoorbeeld

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"

Voer vervolgens het vars-script uit om de vereiste env-variabelen te definiëren

[ ~/CA ]$ source ./vars

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

Maak een opruimactie

[ ~/CA ]$ ./clean-all

Bouw vervolgens de certificaten voor uw CA, server en client.

[ ~/CA ]$ ./build-ca

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

 $ ./build-dh 2048

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

Genereer tot slot een Perfect Forward Secrecy-sleutel.

$ openvpn --genkey --secret pfs.key

Als je distributies van het type CentOS/RHEL gebruikt, kun je het volgende doen:

$ 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

# Zorg ervoor dat uw RSA-sleutels de juiste rechten hebben om veiligheidsredenen

$ 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

Op dit moment kunt u het vars-bestand waarschijnlijk aanpassen aan uw behoeften, bijvoorbeeld

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"

Voer vervolgens het vars-script uit om de vereiste env-variabelen te definiëren

$ source ./vars

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

Maak een opruimactie

$ ./clean-all

Bouw vervolgens de certificaten voor uw CA, server en 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

Zodra je alles hebt ingesteld, moet je er rekening mee houden waar je sleutels en certificaten zich bevinden. Als je systemd of service in Linux gebruikt om dit uit te voeren, dan zou je je certificaten en sleutels in /etc/openvpn kunnen plaatsen. Waarschijnlijk moet u de volgende opdracht uitvoeren:

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

Stap drie

Op dit moment krijg ik de volgende server- en clientconfiguratie. Zie mijn configuratiebestanden dienovereenkomstig,

OpenVPN Server Config

$ 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

Het belangrijkste waar u rekening mee moet houden, zijn de volgende opties, zoals hieronder vermeld.

client-to-client - Zeer belangrijk, zodat knooppunten in de VPN de andere knooppunten in een ander netwerkdomein kunnen pingen. Stel, ClusterControl bevindt zich op locatie en kan de knooppunten in GCP pingen.

push "route 192.168.30.0 255.255.255.0" - Ik push de routeringstabellen zodat GCP-knooppunt(en) die met VPN zijn verbonden, mijn knooppunten in het lokale domein kunnen pingen. In mijn GCP VPN-gateway heb ik de volgende routeringstabellen als push "route 10.142.0.0 255.255.255.0"

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

#push "redirect-gateway" - Beide secties zijn niet vereist omdat ik een internetverbinding nodig heb voor beide om mijn repo en afhankelijke pakketten in te stellen bij installatie.

push "dhcp-option DNS 8.8.8.8", 

push "dhcp-option DNS 8.8.4.4" -  Beide secties kunnen indien nodig worden gewijzigd in uw gewenste DNS. Dit is voor uw gewenste DNS, vooral wanneer u een internetverbinding nodig heeft.

OpenVPN Client Config

$ 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

Het belangrijkste hier is dat je zeker moet zijn van je sleutelpaden, en ook de params in deze sectie moet vervangen,

remote 34.73.238.239  1194  

dit kan de hostnaam/IP-adres zijn van uw VPN-servergateway om verbinding mee te maken.

Stap vier

Stel ten slotte een proxy VPN-server in om de netwerkpakketten naar de netwerkinterface op de server te laten routeren en laat de kernel IPV4-verkeer doorsturen

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

Voor een meer diepgaande installatie raad ik je aan deze berichten voor CentOS en Ubuntu te bekijken.

Efficiënt uitbreiden via de cloud

Stel dat u de volgende topologie in uw on-prem domein heeft,

en u wilt nu uw beschikbaarheid uitbreiden naar een ander datacenter, namelijk GCP voor deze blog. Het implementeren met ClusterControl is heel eenvoudig. U kunt de onderstaande procedure uitvoeren,

Stap één

Maak een slavencluster

Stap twee

Kies uw master voor replicatie,

Stap drie

De toegang tot uw openbare cloudomgeving instellen

Stap vier

Specificeer de hostnaam/IP van uw node die moet worden uitgebreid naar uw PG-replicatiecluster,

Stap vijf

Tot slot, controleer de taakactiviteit, hoe reageert ClusterControl op dit soort acties

Het resultaat toont u de koppeling tussen uw on-prem en uw uitgebreide datacenter, dat in deze blog staat, onze GCP PostgreSQL-standby-node. Zie hieronder voor het resultaat

Conclusie

Het opzetten van een stand-byknooppunt voor geolocatie is niet moeilijk, maar het belangrijkste probleem is hoe veilig dit zal zijn in uw architectonisch ontwerp. Het gebruik van een VPN kan de grootste zorg van het probleem wegnemen. Het gebruik van OpenVPN is slechts een eenvoudige manier om dit te implementeren, maar voor zware transactietoepassingen zullen organisaties waarschijnlijk investeren in hoogwaardige services of hardware om met deze configuratie om te gaan. Ook het toevoegen van een TLS/SSL kan makkelijker dan gedaan worden. In onze volgende blogs bespreken we hoe je TLS/SSL kunt gebruiken met PostgreSQL.


  1. Kan pg gem niet installeren in Mavericks met Postgres.app

  2. Kan PostgreSQL niet installeren:er is een fout opgetreden bij het uitvoeren van het Microsoft VC++ runtime-installatieprogramma op Windows XP

  3. Hoe SQLite Ifnull() werkt

  4. MySQL InnoDB Cluster 8.0 - Een complete implementatie-walk-through:deel één