ThingWorx высокой доступности > Высокая доступность в PostgreSQL > Установка и конфигурирование PostgreSQL HA
Установка и конфигурирование PostgreSQL HA
Ниже приведены инструкции, обеспечивающие поддержку реализации предыдущей схемы. Они предназначены для администраторов PostgreSQL и пользователей, реализующих развертывание PostgreSQL высокой доступности (HA).
Для справки: раздел Пример развертывания PostgreSQL высокой доступности с Pgpool-II содержит пример пошагового руководства по загрузкам, последовательностям командных строк и сценариям, используемым для реализации этого решения.
Ссылочные документы.
Перед установкой PostgreSQL необходимо прочитать и понять всю документацию по установке и конфигурации, включая документацию по необходимым предварительным требованиям к программному обеспечению. Важно понимать и применять правильные настройки, в том числе рекомендации по безопасности.
Используйте следующие ссылки, чтобы получить полезную информацию по установке и конфигурации PostgreSQL HA с использованием потоковой репликации и Pgpool-II для управления узлами (на английском языке):
Detailed PostgreSQL installation guides (Подробные руководства по установке PostgreSQL)
Replication options (Опции репликации)
High Availability documentation (Документация по высокой доступности)
Pgpool-II (Главная станица)
Установка PostgreSQL и создание роли нового пользователя в PostgreSQL
Инструкции по установке и конфигурированию PostgreSQL представлены в руководстве по установке ThingWorx. Конкретную версию ThingWorx для развертывания см. в руководстве по установке. Во всех трех узлах PostgreSQL должны выполняться одни и те же задания по установке и конфигурированию.
Конфигурирование и выполнение сценария базы данных PostgreSQL
Инструкции по компоновке базы данных в PostgreSQL содержатся в руководстве по установке ThingWorx. Конкретную версию ThingWorx для развертывания см. в руководстве по установке. Во всех трех узлах PostgreSQL должны выполняться одни и те же задания по установке и конфигурированию.
Конфигурирование и выполнение сценария схемы поставщика модели/данных
Инструкции по построению схемы ThingWorx в PostgreSQL содержатся в руководстве по установке ThingWorx. См. руководство по установке для конкретной версии ThingWorx, которая должна быть развернута. Во всех трех узлах PostgreSQL должны выполняться одни и те же задания по конфигурированию.
Создание пользователя репликации на всех узлах PostgreSQL
Создайте пользователя PostgreSQL для управления заданиями репликации на всех узлах. Необходимо использовать одни и те же имя пользователя и пароль.
Добавление параметров репликации на всех узлах PostgreSQL
В следующей таблице приведены параметры PostgreSQL, которые управляют его сервисами репликации.
* 
Значения, перечисленные в столбце "Конфигурация", отражают пример развертывания в справочной архитектуре, но могут быть изменены для конкретной среды. Значения, перечисленные в столбце "Конфигурация", отражают пример развертывания в справочной архитектуре, но могут быть изменены для конкретной среды. Для многих настроек в приведенной ниже таблице указаны ссылки, с помощью которых будет легче определить значения конфигурации для конкретной среды.
Настройка
Конфигурация
Описание
listen_addresses
‘*’
Прослушивание всех сетевых интерфейсов. В некоторых ситуациях, если существует несколько сетевых интерфейсов, лучше ограничить это число конкретными сетевыми интерфейсами.
Port
5432
Номер порта по умолчанию.
max_connections
200
Значение по умолчанию в PostgreSQL: 100. Настройка по умолчанию для ThingWorx: 100 (maxpoolsize). Увеличьте это число соответственно общему числу параллельных соединений, ожидаемых в этой базе данных. Это значение должно быть больше количества серверов в кластере, умноженному на максимальный размер пула, сконфигурированный в файле platform-settings.json для ThingWorx.
shared_buffers
1024MB
Дополнительная настройка производительности. Задает объем памяти сервера базы данных, используемой для буферов памяти общего доступа. Рекомендуется задать его равным одной четверти памяти, доступной на компьютере. См. раздел Resource Consumption > Memory (Потребление ресурсов > Память) (на английском языке).
work_mem
32MB
Дополнительная настройка производительности. Определяет объем памяти, который будет использоваться внутренними операциями сортировки и хэш-таблицами перед записью во временные файлы на диске. См. раздел Resource Consumption > Memory (Потребление ресурсов > Память) (на английском языке). Прокрутите вниз до work_mem.
maintenance_work_mem
512MB
Дополнительная настройка производительности. Определяет максимальный объем памяти, который будет использоваться операциями технического обслуживания. См. раздел Resource Consumption > Memory (Потребление ресурсов > Память) (на английском языке). Эта опция появляется сразу после work_mem.
wal_level
enum
Дополнительная настройка производительности. Определяет максимальный объем памяти, который будет использоваться операциями технического обслуживания. См. раздел Write Ahead Log > Settings (Опережающая запись журнала > Настройки) (на английском языке).
synchronous_commit
on
Перейдите к разделу Write Ahead Log > Settings (Опережающая запись журнала > Настройки) (на английском языке) и прокрутите вниз до synchronous_commit (enum).
archive_mode
on
archive_command
'cd'
Перейдите к разделу Write Ahead Log > Archiving (Опережающая запись журнала > Архивация) (на английском языке) и прокрутите вниз до archive_command (string).
max_wal_size
10
Перейдите к разделу Write Ahead Log (Опережающая запись журнала) (на английском языке) и щелкните ссылку ARCHIVING. Прокрутите вверх до max_wal_size (integer). Дополнительные сведения о конфигурации WAL см. в разделе WAL Configuration (Конфигурация WAL)документа PostgreSQL 10 (на английском языке).
synchronous_standby_names
node1, node2 или node2, node0 или node0, node1
Добавьте application_name для других узлов в виде списка, разделенного запятыми, как указано в файлах recovery.conf. См. synchronous_commit в разделе Settings документа Write Ahead Log (Опережающая запись журнала) (на английском языке).
hot_standby
true/false
Сведения об этом режиме см. в документе Hot Standby (Горячее резервирование) (на английском языке).
fsync
on
Перейдите к разделу Write Ahead Log > Settings (Опережающая запись журнала > Настройки) (на английском языке) и прокрутите вниз до fsync.
checkpoint settings
Дополнительные сведения о настройках контрольных точек см. в разделе Checkpoints (Контрольные точки) (на английском языке).
Установка сценариев start_replication и retargetMaster
В каждом узле установите сценарий для активации сервисов репликации и убедитесь, что узел PostgreSQL синхронизирован с системой.
Кроме того, в каждом узле установите сценарий, который может создавать и реализовывать файл recovery.conf. Файл recovery.conf должен содержать изменения, необходимые для корректировки и определения, какой узел будет главным, а какой резервным в зависимости от сбоя, который может возникнуть.
Корректировка параметров внешнего соединения во всех узлах PostgreSQL
Измените параметры в каждом файле pg_hba.conf, чтобы пользователь в базе данных мог хранить данные ThingWorx, которые будут доступны из IP-адреса. Этот IP-адрес будет соединен с базой данных.
* 
При соединении из Pgpool-II убедитесь, что доступ к аутентификации соответствует документации по Pgpool-II (md5 или trust), приведенной здесь.
Дополнительные сведения о файле pg_hba.conf см. в разделе The pg_hba.conf File in the PostgreSQL 10 documentation (Файл pg_hba.conf документа PostgreSQL 10) (на английском языке).
Перезапуск сервисов PostgreSQL для инициирования репликации
Перезапустите все узлы PostgreSQL в нужной последовательности, чтобы определить, какой узел является главным (запускается первым), какой - основным резервным узлом (запускается вторым), а какой - третьим (запускается последним).
Для главного узла запустите сервисы PostgreSQL.
Для основного резервного узла сначала выполните сценарий start_replication, чтобы синхронизировать его с главным узлом. Затем запустите сервисы PostgreSQL.
Для второго резервного узла сначала выполните сценарий start_replication, чтобы синхронизировать его с основным резервным узлом. Затем запустите сервисы PostgreSQL.
Установка узлов Pgpool-II
Перед установкой Pgpool необходимо прочитать и понять всю документацию по установке, включая документацию по необходимым предварительным требованиям к программному обеспечению. Важно понимать и применять правильные настройки, в том числе рекомендации по безопасности.
Информация о загрузке для Pgpool-II доступна здесь:
Инструкции по установке Pgpool-II см. в документации вашей операционной системы. Для работы сервисов Pgpool-II во всех узлах должна быть установлена одна и та же версия Pgpool-II.
Конфигурирование узлов Pgpool-II
В следующей таблице приведены параметры, которые нужно изменить для установки Pgpool-II. Все параметры Pgpool-II хранятся в файле pgpool.conf. Эти свойства и значения должны быть добавлены во всех узлах Pgpool-II.
Настройка
Значение
Описание
listen_addresses
‘*’
Выберите значения, которые позволяют поставщику модели приложения ThingWorx соединяться с Pgpool-II, независимо от того, находится он на том же или на другом сервере.
port
5432
Порт TCP для прослушивания соединений с клиентом
pcp_listen_address
*
Фильтр IP-адресов хост-компьютеров для соединений по протоколу управления портами (PCP, Port Control Protocol) (* разрешены все)
pcp_port
9898
Порт TCP для прослушивания соединений PCP
backend_hostname
backend_port
backend_weight
backend_data_directory
backend_flag
<ip of backend#>
<порт бэкенда>
1
/var/lib/postgresql/10.x/main
ALLOW_TO_FAILOVER
Задайте эти значения конфигурации бэкенда для каждого из трех узлов (главного узла и двух резервных). Например, узел backend_hostname0 - главный, узел backend_hostname1 - первый резервный и т. д. Дополнительные сведения см. в интерактивной документации по PostgreSQL.
enable_pool_hba
on
Включает pool_hba.conf
master_slave_mode
on
Сообщает Postgres, что используется репликация "мастер-резервный".
load_balance_mode
off
* 
PTC не рекомендует использовать балансировку нагрузки для ThingWorx.
master_slave_sub_mode
stream
Сообщает Pgpool-II, что нужно использовать стандартную потоковую репликацию PostgreSQL.
replication_mode
off
Не использовать репликацию Pgpool-II, вместо этого использовать стандартную потоковую репликацию PostgreSQL.
sr_check_period
10
Задержка потоковой репликации в секундах
sr_check_user
replicator
Пользователь потоковой репликации
sr_check_password
replicator
Пароль для потоковой репликации
sr_check_database
postgres
Потоковая репликация базы данных
health_check_user
postgres
Пользователь проверки работоспособности переключения при отказе
health_check_password
postgres
Пароль проверки работоспособности переключения при отказе
health_check_database
postgres
База данных проверки работоспособности переключения при отказе
failover_command
/etc/pgpool2/failover.sh %d %h %D %m %H %R %M %P
Дополнительные сведения об этой настройке см. в разделе описания failover_command ниже.
Также см. следующие примеры сценариев в Приложении C:
failover.sh
retargetMaster_001.sh
retargetMaster_002.sh
retargetMaster_003.sh
num_init_children
max_pool
max_child_connections
superuser_reserved_connections
Параметры настройки производительности. Эти настройки связаны с функциональностью пула соединений Pgpool-II. Убедитесь в наличии при запуске достаточного числа соединений, необходимых для обеспечения максимальной пропускной способности конкретного трафика, а также в том, что оно не превышает значение настройки максимума соединений для узлов БД PostgreSQL. Рекомендации, а также формулы для расчета значений см. в разделе "Пулы" руководства (см. ссылку выше).
* 
Убедитесь, что значение num_init_children больше значения maxpoolsize в файле modelproviderconfig.json и max_connections в файле postgresql.conf больше, чем значение настройки num_init_children.
Конфигурирование сценария переключения при отказе PostgreSQL
Установите сценарий переключения при отказе на каждом узле Pgpool-II, который будет вызывать сервис Pgpool-II при обнаружении сбоя. Этот сценарий должен содержать логику и задания, которые необходимо выполнить для любого сбоя узла PostgreSQL.
Обновление конфигурации PCP
Обновите файл pool_hba.conf, используемый для распознавания всех серверов ThingWorx.
Для запросов ThingWorx к PostgreSQL Pgpool-II будет соединяться с узлами PostgreSQL с использованием учетных данных ThingWorx для сохранения установленных прав доступа и ограничений. В файле pool_hba.conf используются тот же формат, методы аутентификации и опции аутентификации (md5, trust и т. д.), что и в pg_hba.conf.
Дополнительные сведения о конфигурировании pool_hba.conf см. в документе http://www.pgpool.net/docs/latest/en/html/client-authentication.html (на английском языке).
Обновление аутентификации клиента
Обновите файл pool_hba.conf, используемый для распознавания всех серверов ThingWorx.
Для запросов ThingWorx к PostgreSQL Pgpool-II будет соединяться с узлами PostgreSQL с использованием учетных данных ThingWorx для сохранения установленных прав доступа и ограничений. В файле pool_hba.conf используются тот же формат, методы аутентификации и опции аутентификации (md5, trust и т. д.), как в pg_hba.conf.
Дополнительные сведения о конфигурировании pool_hba.conf см. в документе http://www.pgpool.net/docs/latest/en/html/client-authentication.html (на английском языке).
Конфигурирование Pgpool-II для переключения при отказе
В конфигурациях высокой доступности Pgpool-II выполняет активную/пассивную операцию, обычно с одним активным узлом Pgpool-II и одним резервным узлом. Pgpool-II включает в себя процесс наблюдения для мониторинга работоспособности узлов и активирует резервный узел при сбое основного узла.
Дополнительные сведения о сервисе наблюдения и его конфигурировании см. в документации Pgpool (http://www.pgpool.net/docs/latest/en/html/example-watchdog.html).
В следующей таблице приведены настройки и значения, которые необходимо учесть при конфигурировании сервиса наблюдения в Pgpool-II. Эти настройки и значения нужно добавить в файл pgpool.conf для каждого узла Pgpool-II.
Настройка
Значение
Описание
use_watchdog
on
Включает сервис наблюдения в Pgpool-II
wd_hostname
'{IP address of this Pgpool-II node}'
Имя хост-компьютера или IP-адрес этого сервиса наблюдения
wd_port
9000
Номер порта этого сервиса наблюдения
delegate_IP
'{Virtual IP address to access PostgreSQL}'
Виртуальный IP-адрес, используемый клиентами для доступа к PostgreSQL (через Pgpool-II)
ifconfig_path
/etc/pgpool2
Абсолютный путь к каталогу, содержащему команды if_up_cmd и if_down_cmd или сценарии.
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
Команда, выдаваемая, когда Pgpool-II пытается вызвать виртуальный IP-интерфейс с адресом delegate_IP. Можно извлечь идентификатор eni узла Pgpool-II, войдя в консоль администрирования EC2 и перейдя к экземпляру Pgpool-II. В его описании в консоли найдите запись Network interfaces, щелкните значок eth0 и найдите ИД интерфейса. Используйте его для $<eni id of Pgpool node>.
if_down_cmd
'ifdown.sh $_IP_$ <eni id of Pgpool node>'
Команда, выдаваемая, когда Pgpool-II пытается закрыть виртуальный IP-интерфейс с адресом delegate_IP. См. if_up_cmd, чтобы получить идентификатор eni для узла Pgpool-II.
arping_path
/usr/bin
Путь к пакету установки iputils-arping
arping_cmd
arping -U $_IP_$ -w 1
Команда arping, используемая для проверки IP-адресов.
heartbeat_destination0
'{IP address of the other Pgpool-II node}'
IP-адрес, для которого выполняется проверка контрольного сигнала; значение параметра other_pgpool_hostname0
heartbeat_destination_port0
9694
Используйте значение по умолчанию.
heartbeat_device
"eth0"
Сетевая плата для IP-адреса при обмене контрольными сигналами
other_pgpool_hostname0
'{IP address of the other Pgpool-II node}'
IP-адрес другого экземпляра сервера Pgpool-II
other_pgpool_port0
5432
Порт, прослушиваемый другим узлом Pgpool-II
other_wd_port0
9000
Порт, прослушиваемый другим сервисом наблюдения Pgpool-II
Было ли это полезно?