Patroni + vip-manager: различия между версиями
Vix (обсуждение | вклад) |
Vix (обсуждение | вклад) |
||
Строка 22: | Строка 22: | ||
# Netmask for IP address | # Netmask for IP address | ||
VIP_MASK=24 | VIP_MASK='''24''' | ||
# Just use the normal interface name of the primary network interface | # Just use the normal interface name of the primary network interface | ||
VIP_IFACE="eth0" | VIP_IFACE="'''eth0'''" | ||
# This must match scope from Patroni postgres.yml | # This must match scope from Patroni postgres.yml | ||
VIP_KEY="/data/cspg/leader" | VIP_KEY="'''/data/cspg/leader'''" | ||
# This value must match the value used in Patroni postgres.yml | # This value must match the value used in Patroni postgres.yml | ||
Строка 34: | Строка 34: | ||
# Specify the type of endpoint (etcd|consul) | # Specify the type of endpoint (etcd|consul) | ||
VIP_TYPE="etcd" | VIP_TYPE="'''etcd'''" | ||
# | # | ||
VIP_ENDPOINT="http://127.0.0.1:2379" | VIP_ENDPOINT="http://127.0.0.1:2379" | ||
Строка 54: | Строка 54: | ||
# Netmask for IP address | # Netmask for IP address | ||
VIP_MASK=24 | VIP_MASK='''24''' | ||
# Just use the normal interface name of the primary network interface | # Just use the normal interface name of the primary network interface | ||
VIP_IFACE="eth0" | VIP_IFACE="'''eth0'''" | ||
# This must match scope from Patroni postgres.yml | # This must match scope from Patroni postgres.yml | ||
VIP_KEY="/data/cspg/leader" | VIP_KEY="'''/data/cspg/leader'''" | ||
# This value must match the value used in Patroni postgres.yml | # This value must match the value used in Patroni postgres.yml | ||
Строка 66: | Строка 66: | ||
# Specify the type of endpoint (etcd|consul) | # Specify the type of endpoint (etcd|consul) | ||
VIP_TYPE="etcd" | VIP_TYPE="'''etcd'''" | ||
# | # | ||
VIP_ENDPOINT="http://127.0.0.1:2379" | VIP_ENDPOINT="http://127.0.0.1:2379" |
Версия от 20:02, 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