PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Multi-DC PostgreSQL:Настройка на възел в режим на готовност на различно географско местоположение през VPN

По-рано писахме за настройка на клъстер с гео-разпределена база данни с помощта на MySQL репликация. Този път става въпрос за PostgreSQL. Създаването на гео-разпределен клъстер за PostgreSQL не е нова концепция и топологията е доста често срещана.

За да постигнат висока наличност, организациите и компаниите разпръскват своите възли в базата данни, така че когато се случи катастрофално събитие в конкретен регион (което засяга вашия център за данни), да имате своите резервни възли, достъпни за отказване.

Това е много често срещана практика (използване на този тип топология) като част от плановете на вашата организация за непрекъснатост на бизнеса и възстановяване след бедствие. Този тип топология премахва наличието на една точка на отказ (SPOF). Често срещано изискване, особено ако имате нисък RPO и по-високо време на работа (ако е възможно при 99,999999999%).

В този блог ще направя проста реализация как да направите това с помощта на ClusterControl. ClusterControl е софтуер за управление и автоматизация без агенти за клъстери от бази данни. Той помага за внедряване, наблюдение, управление и мащабиране на вашия сървър/клъстер на база данни директно от потребителския интерфейс на ClusterControl.

Желаната архитектурна настройка

Целевият резултат тук е ефективно внедряване в сигурна среда. За да направите това, важно е да поставите установената си връзка между използването на VPN и би било по-сигурно, ако също така настроите възлите на базата си данни през TLS/SSL връзка. За тази настройка в нашия блог ние просто разгръщаме възел през VPN и ви демонстрираме как можете лесно да направите този подход. Вижте по-долу диаграмата на целевата настройка:

За да се разработи настройката, локалната мрежа трябва да комуникира през обществеността облак, използващ VPN тунел и двете мрежи трябва да имат VPN шлюз, така че и двете да могат да комуникират или да установят връзка. ClusterControl изисква от вас да наблюдавате всички възли, които трябва да бъдат регистрирани, тъй като ще събира информация за вашите възли за показатели за данни. Освен това, това изисква вашият възел за активен запис в предварителна версия да може да достигне до възела в режим на готовност в другия домейн, който е за този блог, хостван в Google Cloud Platform (GCP).

Настройване на вашия OpenVPN

Настройката на OpenVPN е много трудна и за двата мрежови домейна. Същността на това е, че трябва да има следното съображение:

  • Възлите от вашия on-prem трябва да могат да установят връзка с целевите възли в публичен облачен домейн
  • Възлите от вашия on-prem могат да имат достъп до интернет за изтегляне на пакети, които са необходими за настройка. Освен ако нямате всички локално съхранявани хранилища, които са необходими, това може да не е така
  • Възлите от вашия публичен облачен домейн трябва да могат да установят връзка с локалните възли
  • Възлите от вашия публичен облачен домейн могат да имат достъп до интернет за изтегляне на пакети, които са необходими за настройка. Освен ако нямате всички локално съхранявани хранилища, които са необходими, това може да не е така

Инсталиране и конфигуриране на OpenVPN

Първа стъпка

Инсталирайте пакета openvpn (и easy-rsa пакетите за дистрибуции на Ubuntu/Debian)

$ sudo apt-get install openvpn easy-rsa

За ОС, базирана на CentOS/RHEL, 

$ sudo yum install openvpn wget

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

Стъпка втора

Генерирайте вашите сертификати, като сертификати на сертифициращ орган (CA), сървърни и клиентски сертификати.

За Ubuntu/Debian можете да направите следните действия:

$ /usr/bin/make-cadir CA

Промяна към CA директория

$ cd CA

В този момент е възможно да редактирате vars файла според нуждите си, напр.

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"

След това изпълнете скрипта vars, за да дефинирате необходимите env променливи

[ ~/CA ]$ source ./vars

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

Изпълнете почистване

[ ~/CA ]$ ./clean-all

След това създайте сертификатите за вашия CA, сървър и клиент.

[ ~/CA ]$ ./build-ca

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

 $ ./build-dh 2048

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

Накрая генерирайте перфектен ключ за секретност за препращане.

$ openvpn --genkey --secret pfs.key

Ако използвате дистрибуции от тип CentOS/RHEL, можете да направите следното:

$ 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

# Уверете се, че вашите RSA ключове са с правилното разрешение за целите на сигурността

$ 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

В този момент е възможно да редактирате vars файла според нуждите си, напр.

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"

След това изпълнете скрипта vars, за да дефинирате необходимите env променливи

$ source ./vars

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

Изпълнете почистване

$ ./clean-all

След това създайте сертификатите за вашия CA, сървър и клиент.

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

След като имате всички настройки, трябва да вземете предвид къде са разположени вашите ключове и сертификати. Ако използвате systemd или услуга в Linux, за да стартирате това, тогава можете да поставите вашите сертификати и ключове в /etc/openvpn. Вероятно може да се наложи да изпълните следната команда:

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

Трета стъпка

В този момент получавам следната конфигурация на сървъра и клиента. Вижте моите конфигурационни файлове съответно,

Конфигурация на 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

Най-важното нещо, което трябва да вземете предвид, са следните опции, както е отбелязано по-долу.

клиент към клиент – Много важно, така че възлите в VPN да могат да пингуват другите възли в различен мрежов домейн. Да речем, ClusterControl се намира в on-prem, той може да пингува възлите в GCP.

push "route 192.168.30.0 255.255.255.0" - Натискам таблиците за маршрутизиране, така че GCP възел/и, свързани към VPN, могат да пингуват моите възли в локалния домейн. В моя GCP VPN шлюз имам следните таблици за маршрутизиране като push "route 10.142.0.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" -  И двете секции могат да бъдат променени на желания от вас DNS, ако е необходимо. Това е за желания от вас DNS, особено когато имате нужда от интернет връзка.

Конфигурация на 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

Най-важното тук е, че трябва да сте сигурни в ключовите си пътища, както и да замените параметрите в този раздел,

remote 34.73.238.239  1194  

който може да бъде името на хоста/IP адреса на шлюза на вашия VPN сървър, към който да се свържете.

Стъпка четвърта

Накрая, настройте прокси VPN сървър, за да насочвате мрежовите пакети към мрежовия интерфейс на сървъра и да позволите на ядрото да препраща 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

За по-задълбочена инсталация ви предлагам да разгледате тези публикации за CentOS и Ubuntu.

Ефективно разширяване в облака

Да предположим, че имате следната топология във вашия on-prem домейн,

и сега искате да разширите наличността си върху друг център за данни, който е GCP за този блог. Разгръщането с помощта на ClusterControl е много лесно. Можете да направите следната процедура, посочена по-долу,

Първа стъпка

Създайте подчинен клъстер

Стъпка втора

Изберете своя главен код за репликация,

Трета стъпка

Настройте достъпа до вашата обществена облачна среда

Стъпка четвърта

Посочете името на хоста/IP на вашия възел, който да бъде разширен във вашия PG репликационен клъстер,

Стъпка пета

Накрая, наблюдавайте дейността на работата как ClusterControl реагира на този тип действие

Резултатът ще ви покаже връзката между вашия on-prem и вашия разширен център за данни, който е в този блог, нашият GCP PostgreSQL възел в готовност. Вижте по-долу за резултата

Заключение

Създаването на резервен възел за геолокация не е трудно,  но основният проблем е колко сигурно ще бъде това във вашия архитектурен дизайн. Използването на VPN може да облекчи основната грижа на проблема. Използването на OpenVPN е просто прост начин за прилагане на това, но за тежки транзакционни приложения, организациите вероятно ще инвестират в висококачествени услуги или хардуер, за да се справят с тази настройка. Също така добавянето на TLS/SSL може да бъде по-лесно, отколкото да се направи. Ще обсъдим това как можете да използвате TLS/SSL с PostgreSQL в следващите ни блогове.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете родител рекурсивно с помощта на заявка

  2. PostgreSQL 9.2 JDBC драйвер използва клиентска часова зона?

  3. Където условие за съединена маса в Sequelize ORM

  4. Проблеми с createdb в postgres

  5. PostgreSQL 12:Внедряване на K-Nearest Neighbor Space Partitioned Generalized Search Tree Indexs