Patroni + vip-manager: различия между версиями
Vix (обсуждение | вклад) |
Vix (обсуждение | вклад) |
||
(не показано 7 промежуточных версий этого же участника) | |||
Строка 11: | Строка 11: | ||
Далее опишем настройку кластера с этим пакетом целиком, с примерами конфигураций. | Далее опишем настройку кластера с этим пакетом целиком, с примерами конфигураций. | ||
==НАСТРОЙКА== | ==НАСТРОЙКА== | ||
Для работы кластера необходимо минимум 3 ноды ('''хоста''' или '''vm'''), на всех нодах должен быть установлен пакет '''ETCD'''.<br> | * Для работы кластера необходимо минимум 3 ноды ('''хоста''' или '''vm'''), на всех нодах должен быть установлен пакет '''ETCD'''.<br> | ||
Нам для первичного варианта необходимо 2 ноды с '''PostgreSQL''' для работы в кластере '''Patroni''' - этого достаточно,<br> | Нам для первичного варианта необходимо 2 ноды с '''PostgreSQL''' для работы в кластере '''Patroni''' - этого достаточно,<br> | ||
поэтому на 2х нодах устанавливаем: '''postgresql + patroni + vip-manager''', на ноде '''"Арбитре"''' - это не нужно...<br> | поэтому на 2х нодах устанавливаем: '''postgresql + patroni + vip-manager''', на ноде '''"Арбитре"''' - это не нужно...<br> | ||
Все участники кластера должны быть прописаны или в сервере '''DNS''' внутренней сети, или в '''/etc/hosts''' каждого участника.<br> | Все участники кластера должны быть прописаны или в сервере '''DNS''' внутренней сети, или в '''/etc/hosts''' каждого участника.<br> | ||
Процесс установки кластера описан [https://support.qbpro.ru/index.php/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0_PostgreSQL._%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B5%D0%B9_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BD%D0%B0_PostgreSQL_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85. тут], нам необходимо от туда взять установки ETCD,PostgreSQL,Patroni,а вот Haproxy нам не нужен... | * Процесс установки кластера описан [https://support.qbpro.ru/index.php/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0_PostgreSQL._%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B2%D0%BD%D0%B5%D1%88%D0%BD%D0%B5%D0%B9_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BD%D0%B0_PostgreSQL_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BF%D0%B8%D0%B9_%D0%B1%D0%B0%D0%B7_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85. тут], нам необходимо от туда взять установки только: '''ETCD''','''PostgreSQL''','''Patroni''', а вот '''Haproxy''' нам не нужен...<br> | ||
После того, как вы запустите кластер, необходимо настроить работу '''Vip-manager''', на тех нодах на которых установлен '''Patroni'''.<br> | |||
* Настройка происходит с помощью файла '''/etc/default/vip-manager''' - пример рабочей конфигурации первой ноды: | |||
# The keys below are mandatory | |||
VIP_IP="'''10.1.3.11'''" | |||
# Netmask for IP address | |||
VIP_MASK='''24''' | |||
# Just use the normal interface name of the primary network interface | |||
VIP_IFACE="'''eth0'''" | |||
# This must match scope from Patroni postgres.yml | |||
VIP_KEY="'''/data/cspg/leader'''" | |||
# This value must match the value used in Patroni postgres.yml | |||
VIP_HOST="'''pgdb1'''" | |||
# Specify the type of endpoint (etcd|consul) | |||
VIP_TYPE="'''etcd'''" | |||
# | |||
VIP_ENDPOINT="http://127.0.0.1:2379" | |||
# The keys below are optional | |||
VIP_HOSTINGTYPE="basic" | |||
VIP_ETCD_USER="admin_etcd" | |||
VIP_ETCD_PASSWORD="password_admin" | |||
## | |||
interval: 1000 | |||
retry-num: 2 | |||
retry-after: 250 #in milliseconds | |||
verbose: true | |||
* Пример рабочей конфигурации второй ноды: | |||
# The keys below are mandatory | |||
VIP_IP="'''10.1.3.11'''" | |||
# Netmask for IP address | |||
VIP_MASK='''24''' | |||
# Just use the normal interface name of the primary network interface | |||
VIP_IFACE="'''eth0'''" | |||
# This must match scope from Patroni postgres.yml | |||
VIP_KEY="'''/data/cspg/leader'''" | |||
# This value must match the value used in Patroni postgres.yml | |||
VIP_HOST="'''pgdb2'''" | |||
# Specify the type of endpoint (etcd|consul) | |||
VIP_TYPE="'''etcd'''" | |||
# | |||
VIP_ENDPOINT="http://127.0.0.1:2379" | |||
# The keys below are optional | |||
VIP_HOSTINGTYPE="basic" | |||
VIP_ETCD_USER="admin_etcd" | |||
VIP_ETCD_PASSWORD="password_admin" | |||
## | |||
interval: 1000 | |||
retry-num: 2 | |||
retry-after: 250 #in milliseconds | |||
verbose: true | |||
* Комментарии к параметрам конфигурации Vip-manager: | |||
'''VIP_IP''' - виртуальный ipaddress, который предоставляется для доступа к текущей ноде '''Leader Patroni'''. | |||
'''VIP_MASK''' - маска сети для виртуального ipaddress | |||
'''VIP_TYPE''' - тип кластера ключей (токенов) | |||
'''VIP_ENDPOINT''' - подключение к кластеру ключей (токенов) | |||
'''VIP_HOSTINGTYPE''' - тип авторизации к '''ETCD''' | |||
'''VIP_ETCD_USER''' - суперпользователь '''ETCD''' | |||
'''VIP_ETCD_PASSWORD''' - пароль суперпользователя '''ETCD''' | |||
... | |||
* параметры ниже (interval, retry-num, retry-after) - скорость синхронизации и переключения на '''Leader''' | |||
* '''verbose''' - подробное сообщение о событиях | |||
==ИСТОЧНИКИ== | ==ИСТОЧНИКИ== | ||
* [https://habr.com/ru/companies/serverspace/articles/822257/ Построение отказоустойчивого кластера PostgreSQL для 1С. HAProxy, давай до свидания. Рецепты от Капитана ] | * [https://habr.com/ru/companies/serverspace/articles/822257/ Построение отказоустойчивого кластера PostgreSQL для 1С. HAProxy, давай до свидания. Рецепты от Капитана ] |
Текущая версия от 20:12, 19 августа 2024
ВВЕДЕНИЕ
При создании кластера PostgreSQL с помощью:
Результаты тестов показали устойчивую потерю производительности в сравнении с простой установкой PostgreSQL на 15-20%.
Это касается как PostgreSQL так и PostgresPro.
В связи с чем были предприняты поиски альтернативных решений, без использования Haproxy.
Этим решением стало использование Vip-Manager.
Данный пакет есть во всех дистрибутивах Linux, в том числе Debian и Proxmox, что сильно порадовало!
Далее опишем настройку кластера с этим пакетом целиком, с примерами конфигураций.
НАСТРОЙКА
- Для работы кластера необходимо минимум 3 ноды (хоста или vm), на всех нодах должен быть установлен пакет ETCD.
Нам для первичного варианта необходимо 2 ноды с PostgreSQL для работы в кластере Patroni - этого достаточно,
поэтому на 2х нодах устанавливаем: postgresql + patroni + vip-manager, на ноде "Арбитре" - это не нужно...
Все участники кластера должны быть прописаны или в сервере DNS внутренней сети, или в /etc/hosts каждого участника.
- Процесс установки кластера описан тут, нам необходимо от туда взять установки только: ETCD,PostgreSQL,Patroni, а вот Haproxy нам не нужен...
После того, как вы запустите кластер, необходимо настроить работу Vip-manager, на тех нодах на которых установлен Patroni.
- Настройка происходит с помощью файла /etc/default/vip-manager - пример рабочей конфигурации первой ноды:
# The keys below are mandatory VIP_IP="10.1.3.11" # Netmask for IP address VIP_MASK=24 # Just use the normal interface name of the primary network interface VIP_IFACE="eth0" # This must match scope from Patroni postgres.yml VIP_KEY="/data/cspg/leader" # This value must match the value used in Patroni postgres.yml VIP_HOST="pgdb1" # Specify the type of endpoint (etcd|consul) VIP_TYPE="etcd" # VIP_ENDPOINT="http://127.0.0.1:2379" # The keys below are optional VIP_HOSTINGTYPE="basic" VIP_ETCD_USER="admin_etcd" VIP_ETCD_PASSWORD="password_admin" ## interval: 1000 retry-num: 2 retry-after: 250 #in milliseconds verbose: true
- Пример рабочей конфигурации второй ноды:
# The keys below are mandatory VIP_IP="10.1.3.11" # Netmask for IP address VIP_MASK=24 # Just use the normal interface name of the primary network interface VIP_IFACE="eth0" # This must match scope from Patroni postgres.yml VIP_KEY="/data/cspg/leader" # This value must match the value used in Patroni postgres.yml VIP_HOST="pgdb2" # Specify the type of endpoint (etcd|consul) VIP_TYPE="etcd" # VIP_ENDPOINT="http://127.0.0.1:2379" # The keys below are optional VIP_HOSTINGTYPE="basic" VIP_ETCD_USER="admin_etcd" VIP_ETCD_PASSWORD="password_admin" ## interval: 1000 retry-num: 2 retry-after: 250 #in milliseconds verbose: true
- Комментарии к параметрам конфигурации Vip-manager:
VIP_IP - виртуальный ipaddress, который предоставляется для доступа к текущей ноде Leader Patroni. VIP_MASK - маска сети для виртуального ipaddress VIP_TYPE - тип кластера ключей (токенов) VIP_ENDPOINT - подключение к кластеру ключей (токенов) VIP_HOSTINGTYPE - тип авторизации к ETCD VIP_ETCD_USER - суперпользователь ETCD VIP_ETCD_PASSWORD - пароль суперпользователя ETCD ... * параметры ниже (interval, retry-num, retry-after) - скорость синхронизации и переключения на Leader * verbose - подробное сообщение о событиях