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.