Кластер базы данных PostgreSQL

Резервирование кластера БД

На рисунке ниже показана структура резервирования PostgreSQL.

Рисунок 1. Резервированная конфигурация серверной части PostgreSQL

Конфигурация состоит из следующих элементов:

  • Резервированная пара серверов проекта «КАСКАД Цифра»: на обоих серверах «КАСКАД Цифра» размещен экземпляр БД PostgreSQL.
  • Резервированная пара серверов баз данных: на каждом сервере размещен экземпляр приложения PostgreSQL и сценарий pgClusterMonitor на Python. pgClusterMonitor — это служба, которая управляет кластером базы данных PostgreSQL с потоковой репликацией WAL (Write-Ahead-Logging).

Сведения о сервере:

  • Один из серверов приложения PostgreSQL работает в основном режиме. Основной узел базы данных принимает запросы на чтение/запись данных и публикует репликацию для резервного сервера PostgreSQL. Основной и резервный узлы базы данных синхронизируют информацию.
  • Все запросы от серверных частей направляются на ведущий сервер PostgreSQL. Таким образом, каждый экземпляр серверной части PostgreSQL имеет конфигурацию с двумя строками подключения, которые ссылаются на оба сервера приложений PostgreSQL. Серверная часть PostgreSQL использует первую строку подключения, которая успешно устанавливает соединение с ведущим сервером приложений PostgreSQL.
  • Серверная часть PostgreSQL отслеживает ошибки подключения и пытается переключиться на другую строку подключения, чтобы установить соединение.

Настройка кластера

Серверная часть PostgreSQL может работать с кластером PostgreSQL. Кластер PostgreSQL состоит из двух узлов, которые обеспечивают резервирование базы данных. Для кластера PostrgreSQL не используйте те же узлы, на которых запущен «КАСКАД Цифра». Следует также использовать отдельные хосты для каждого узла базы данных кластера.

Чтобы настроить кластер, следуйте приведенной ниже инструкции. Для следующих шагов предполагается, что основная база данных имеет IP-адрес «192.168.0.101», а резервная база данных имеет IP-адрес «192.168.0.102».

На основном узле базы данных

  • Запустите SQL-сценарий (для получения дополнительной информации об этих настройках см. https://www.postgresql.org/docs/13/config-setting.html ):ALTER SYSTEM SET listen_addresses TO '*'; ALTER SYSTEM SET synchronous_commit TO 'remote_apply'; SELECT * FROM pg_create_physical_replication_slot('__slot'); ALTER SYSTEM SET synchronous_standby_names TO '*'; ALTER SYSTEM SET wal_level TO 'replica'; ALTER SYSTEM SET wal_log_hints TO 'on'; ALTER SYSTEM SET max_wal_senders TO '10'; ALTER SYSTEM SET wal_keep_size TO '16MB'; ALTER SYSTEM SET hot_standby TO 'on';
  • Откройте файл pg_hba.conf C:\Program Files\PostgreSQL\13\data\pg_hba.conf и добавьте адреса своих серверов в файл:Рисунок 2. Добавьте адреса серверов
  • Добавьте параметры аутентификации в pg_hba.conf (см. https://www.postgresql.org/docs/13/auth-pg-hba-conf.html ), чтобы позволить клиентским приложениям подключаться к базе данных и работать с репликацией.
  • Перезапустите службу PostgreSQL: Диспетчер задач Windows/службы/postgresql-x64-13.

На резервном узле базы данных

  • Остановите сервер PostgreSQL.
  • Очистите каталог PG_DATA.
  • Создайте директории db, events, alerts, backups для табличных пространств. Каталоги должны быть созданы с использованием того же пути, что и на основном сервере.
  • Выполните следующую команду:pg_basebackup -D "PG_DATA" -h ip_master -p port_master -X stream -c fast -U username -W -R

Различные части команды описаны ниже:

  • PG_DATA — каталог данных PostgreSQL.
  • ip_master — IP-адрес или имя хоста, на котором расположена основная база данных.
  • port_master — порт основной базы данных.
  • username — имя пользователя с ролью репликации. Этот пользователь должен иметь возможность подключаться к основной базе данных.

ПРИМЕЧАНИЕ

pg_basebackup должен выполняться тем же пользователем, который запускает службу PG (чтобы иметь все необходимые разрешения для данных).

  • Запустите службу PostgreSQL в Диспетчер задач Windows/службы/postgresql-x64-13.

ПРИМЕЧАНИЕ

Если вы видите сообщение об ошибке «Не удалось подключиться к серверу» («Could not connect to server») или «Нет маршрута к хосту» («No route to host») в окне средства просмотра журналов, проверьте настройки вашего брандмауэра и файл pg_hba.conf.

Кластер PostgreSQL с двумя сетевыми адаптерами

Если вы используете два сетевых адаптера в каждом из кластеров, выполните следующие действия:

  • Добавьте IP-адрес второго сетевого адаптера в pg_hba.conf. Оба сетевых адаптера должны быть указаны в файле config.ini — см. шаги ниже:Для Windows: C:/Program Files/PostgreSQL/13/data/pg_hda.conf Для Linux: /var/lib/pgsql/data/pg_hda.conf
  • На резервном сервере запустите утилиту «pg_basebackup», в которой перечислены доступные IP-адреса, разделенные запятыми. Файл «pg_basebackup» находится в директории установки PostgreSQL: PostgreSQL/<версия>/bin:pg_basebackup -D "PG_DATA" -h ip_master1,ipmaster2 -p port_master -X stream -c fast -U username
  • В файле конфигурации утилиты мониторинга ( kaskad/data/NGA/PostgreSQL/sql/Cluster Monitor Tool/config.ini ) перечислите необходимые IP-адреса в разделе [cluster], разделенные запятыми, например:[cluster] p1 = host=host1,host2 port=1111 dbname=kaskad user=postgres password=postgres sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any

ПРИМЕЧАНИЕ

Если первый хост подключения к базе данных становится недоступным, это приведет к ошибке таймаута во время операций с узлом кластера.

Основной раздел: База данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *