sql >> Databáze >  >> RDS >> PostgreSQL

Multi-DC PostgreSQL:Nastavení pohotovostního uzlu v jiné geografické poloze přes VPN

Dříve jsme psali o nastavení geograficky distribuovaného databázového clusteru pomocí replikace MySQL. Tentokrát jde o PostgreSQL. Nastavení geograficky distribuovaného clusteru pro PostgreSQL není nový koncept a topologie je docela běžná.

Pro dosažení vysoké dostupnosti organizace a společnosti rozmístí své databázové uzly, takže když dojde ke katastrofické události v určité oblasti (která ovlivní vaše datové centrum), budete mít pohotovostní uzly k dispozici pro převzetí služeb při selhání.

P>

Toto je velmi běžná praxe (při použití tohoto typu topologie) jako součást plánů kontinuity podnikání a obnovy po havárii vaší organizace. Tento typ topologie odstraňuje jediný bod selhání (SPOF). Běžný požadavek, zejména pokud máte nízké RPO a vyšší dobu provozuschopnosti (pokud možno na 99,999999999 %).

V tomto blogu provedu jednoduchou implementaci toho, jak to udělat pomocí ClusterControl. ClusterControl je software pro správu a automatizaci databázových clusterů bez agentů. Pomáhá nasazovat, monitorovat, spravovat a škálovat váš databázový server/klastr přímo z uživatelského rozhraní ClusterControl.

Požadované architektonické nastavení

Cílovým výsledkem je zde efektivní nasazení v zabezpečeném prostředí. Chcete-li to provést, je důležité, že musíte umístit své navázané připojení pomocí VPN a bylo by bezpečnější, pokud také nastavíte uzly databáze přes připojení TLS/SSL. Pro toto nastavení v našem blogu jednoduše nasadíme uzel přes VPN a předvedeme vám, jak můžete tento přístup snadno provést. Níže naleznete schéma cílového nastavení:

K vypracování nastavení musí místní síť komunikovat prostřednictvím veřejnosti cloud využívající tunel VPN a obě tyto sítě musí mít bránu VPN, aby obě mohly komunikovat nebo navazovat spojení. ClusterControl vyžaduje, abyste dohlíželi na všechny uzly, které je třeba zaregistrovat, protože bude shromažďovat informace o vašich uzlech pro metriky dat. Kromě toho to vyžaduje, aby váš místní uzel s aktivním zápisem mohl také dosáhnout pohotovostního uzlu do druhé domény, která je pro tento blog hostována na platformě Google Cloud Platform (GCP).

Nastavení OpenVPN

Nastavení OpenVPN je velmi složité pro obě síťové domény. Podstatou toho je, že je třeba vzít v úvahu následující:

  • Uzly z vašeho místního počítače musí být schopny navázat spojení s cílovými uzly veřejné cloudové domény
  • Uzly z vašeho on-prem mohou mít přístup k internetu pro stahování balíčků, které jsou nutné k nastavení. Pokud nemáte lokálně uložena všechna potřebná úložiště, nemusí to tak být
  • Uzly z vaší veřejné cloudové domény musí být schopny navázat spojení s místními uzly
  • Uzly z vaší veřejné cloudové domény mohou mít přístup k internetu pro stahování balíčků, které jsou nutné k nastavení. Pokud nemáte lokálně uložena všechna potřebná úložiště, nemusí to tak být

Instalace a konfigurace OpenVPN

Krok jedna

Nainstalujte balíček openvpn (a balíčky easy-rsa pro distribuce Ubuntu/Debian)

$ sudo apt-get install openvpn easy-rsa

Pro OS založené na CentOS/RHEL, 

$ sudo yum install openvpn wget

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

Krok dva

Vygenerujte své certifikáty, jako jsou certifikáty certifikační autority (CA), serverové a klientské certifikáty.

U Ubuntu/Debianu můžete provést následující akce:

$ /usr/bin/make-cadir CA

Změnit na adresář CA

$ cd CA

V tuto chvíli pravděpodobně upravíte soubor vars podle svých potřeb, např.

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"

Potom spusťte skript vars k definování požadovaných proměnných env

[ ~/CA ]$ source ./vars

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

Spusťte čištění

[ ~/CA ]$ ./clean-all

Potom vytvořte certifikáty pro svou CA, server a klienta.

[ ~/CA ]$ ./build-ca

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

 $ ./build-dh 2048

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

Nakonec vygenerujte klíč Perfect Forward Secrecy.

$ openvpn --genkey --secret pfs.key

Pokud používáte distribuce typu CentOS/RHEL, můžete provést následující:

$ 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

# Ujistěte se, že vaše klíče RSA mají z bezpečnostních důvodů správná oprávnění

$ 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

V tuto chvíli pravděpodobně upravíte soubor vars podle svých potřeb, např.

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"

Potom spusťte skript vars k definování požadovaných proměnných env

$ source ./vars

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

Spusťte čištění

$ ./clean-all

Potom vytvořte certifikáty pro svou CA, server a klienta.

$ ./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

Jakmile budete mít všechna nastavení, musíte vzít v úvahu, kde máte klíče a certifikáty. Pokud ke spuštění tohoto používáte systemd nebo service v Linuxu, můžete své certifikáty a klíče umístit do /etc/openvpn. Pravděpodobně budete muset spustit následující příkaz:

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

Krok tři

V tuto chvíli končím s následující konfigurací serveru a klienta. Viz moje konfigurační soubory podle toho,

Konfigurace serveru 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

Nejdůležitější věc, kterou musíte vzít v úvahu, jsou následující možnosti, jak je uvedeno níže.

client-to-client – ​​Velmi důležité, aby uzly ve VPN mohly pingnout ostatní uzly v jiné síťové doméně. Řekněme, že ClusterControl je umístěn v on-prem, může pingnout na uzly v GCP.

push "route 192.168.30.0 255.255.255.0" - Posílám směrovací tabulky, aby uzel/uzel GCP připojený k VPN mohl pingnout na mé uzly v místní doméně. V mé bráně GCP VPN mám následující směrovací tabulky jako push "route 10.142.0.0 255.255.255.0"

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

#push "redirect-gateway" - Obě tyto sekce nejsou vyžadovány, protože potřebuji připojení k internetu jak pro nastavení repo, tak pro závislé balíčky při instalaci.

push "dhcp-option DNS 8.8.8.8", 

push "dhcp-option DNS 8.8.4.4" -  Obě tyto sekce lze v případě potřeby změnit na požadovaný DNS. Toto je pro váš požadovaný DNS, zvláště když potřebujete připojení k internetu.

Konfigurace klienta 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

Nejdůležitější zde je, že si musíte být jisti svými klíčovými cestami a také nahradit parametry v této sekci,

remote 34.73.238.239  1194  

což může být název hostitele/IP adresa brány serveru VPN, ke které se chcete připojit.

Krok čtyři

Nakonec nastavte proxy server VPN, aby byly síťové pakety směrovány do síťového rozhraní na serveru a aby jádro mohlo předávat provoz 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

Pro podrobnější instalaci doporučuji podívat se na tyto příspěvky pro CentOS a Ubuntu.

Efektivní rozšíření přes cloud

Předpokládejme, že máte ve své on-prem doméně následující topologii,

a nyní chcete rozšířit svou dostupnost na další datové centrum, kterým je GCP pro tento blog. Nasazení pomocí ClusterControl je velmi přímočaré. Můžete provést následující postup uvedený níže,

Krok jedna

Vytvořit Slave Cluster

Krok dva

Vyberte hlavní server pro replikaci

Krok tři

Nastavte přístup do svého veřejného cloudového prostředí

Krok čtyři

Uveďte název hostitele/IP vašeho uzlu, který má být rozšířen do vašeho replikačního clusteru PG,

Krok 5

Nakonec sledujte pracovní aktivitu, jak ClusterControl reaguje na tento typ akce

Výsledek vám ukáže propojení mezi vaším on-prem a vaším rozšířeným datovým centrem, které je na tomto blogu, náš pohotovostní uzel GCP PostgreSQL. Výsledek naleznete níže

Závěr

Nastavení pohotovostního uzlu pro geografickou polohu není obtížné, ale hlavním problémem je, jak bezpečné to bude ve vašem architektonickém návrhu. Použití VPN může zmírnit hlavní problém problému. Použití OpenVPN je jen jednoduchý způsob, jak to implementovat, ale u náročných transakčních aplikací budou organizace pravděpodobně investovat do nadstandardních služeb nebo hardwaru, aby se s tímto nastavením vypořádaly. Také přidání TLS/SSL může být snazší než hotovo. O tom, jak můžete používat TLS/SSL s PostgreSQL, probereme v našich dalších blozích.


  1. Jak opravit chyby nesouladu verzí pg_dump?

  2. rozdělení alfa a čísel pomocí sql

  3. Jak vybrat všechny sloupce a počet (*) ve stejném dotazu

  4. Obecná chyba:Neshoda verze OS