Информация |
---|
Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи. |
Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
При работе с защищенной СУБД postgresql с использованием МРД (см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?) рекомендуется использовать специальный агент ocf:astra:pgsql. Этот агент доступен в составе:
|
|
|
|
|
Параметры стенда
Параметры сети
- сеть
Для работы без использования МРД и для работы в более ранних обновлениях Astra Linux соедует использовать обычный для Linux агент ocf:heartbeat:pgsql.
Введение
Предполагается, что дальнейшие действия выполняются на ранее подготовленном кластере pacemaker. См. статью Развертывание двухузлового кластера pacemaker.В рамках подготовки кластера созданы два узла кластера с адресами
- 192.168.23.
- 0/24;
- адрес маршрутизатора (шлюза) сети 192.168.23.
- 1;
- предполагается, что в сети отсутствует служба DNS, поэтому адреса узлов задаются с помощью файла /etc/hosts.
Структура стенда
Для стенда используется два компьютера:
- В качестве IP-адреса кластера использован адрес 192.168.23.100.
Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется. См.:
Установка пакетов
Информация |
---|
Установка пакетов выполняется на каждом узле кластера. |
Установить метапакет postgresql:
Command |
---|
sudo apt install postgresql |
При установке метапакета postgresql:
- В Astra Linux Special Edition x.7 будет установлена защищенная СУБД PostgreSQL версии 11.
В Astra Linux Special Edition, выпущенных до обновления x.7, будет установлена защищенная СУБД PostgreSQL версии 9.6.
В Astra Linux Common Edition будет установлена СУБД PostgreSQL версии 9.6 без встроенной защиты.
При установке СУБД будет создан кластер СУБД (не путать с кластером pacemaker) с именем main.
Настройка СУБД postgresql
Для настройки работы СУБД postgesql проверить указанные ниже параметры и привести их к указанным значениям (добавить в случае отсутствия):
В конфигурационном файле СУБД /etc/postgresql/<номер_версии>/<имя_кластера_СУБД>/postgresql.conf:
Блок кода |
---|
listen_addresses = '*'
wal_level = replica
wal_keep_segments = 32 |
Для развертывания кластера используются два подсоединенных к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2:
Параметр Узел 1 Узел 2 Имя узла pcmk-1 pcmk-2 Статический IP-адрес узла 192.168.23.101 192.168.23.102
Настройка стенда
Настройка сетевых подключений
Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется Network Manager, то настройку статических адресов можно выполнить с помощью графического инструмента или из командной строки командами:
Узел 1 | Узел 2 | ||||
---|---|---|---|---|---|
Присвоить узлу статический IP-адрес 192.168.23.101:
| Присвоить узлу статический IP-адрес 192.168.23.102:
|
В качестве IP-адреса сервера DNS (параметр ipv4.dns) для примера указан адрес сервера Яндекс (77.88.8.8), который можно заменить на любой удобный адрес. Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.
Настройка разрешения имен узлов с помощью /etc/hosts
На всех узлах кластера внести изменения в файл /etc/hosts:
- Удалить строки, начинающуюся с 127.0.1.1.
Внести строки с IP-адресами и именами узлов:
Блок кода 192.168.23.101 pcmk-1 192.168.23.102 pcmk-2
- Исключить указание имен узлов в строках с адресами локальной петли (127.0.0.1).
Пример команд для внесения изменений:
Command |
---|
sudo sed -i '$a 192.168.23.101\tpcmk-1' /etc/hosts sudo sed -i '$a 192.168.23.102\tpcmk-2' /etc/hosts sudo sed -i 's/^127\.0\.0\.1\s.*/127.0.0.1\tlocalhost/' /etc/hosts sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts |
Установка пакетов кластерного ПО
Информация |
---|
Установка пакетов кластерного ПО выполняется на каждом узле кластера. |
Установить пакеты кластерного ПО:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3) и для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20221220SE16 (оперативное обновление 12):
Command sudo apt install pacemaker pcs astra-resource-agents Использование пакета astra-resource-agents позволяет использовать в качестве кластерной службы программное обеспечение, поддерживающее мандатное управление доступом (МРД).
Для более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:
Command sudo apt install pacemaker pcs
После установки пакетов назначить пользователю hacluster пароль:
Command |
---|
sudo passwd hacluster |
Инициализация кластера
Информация |
---|
Инициализация кластера выполняется однократно на любом из узлов кластера. |
Удалить все существующие файлы конфигурации кластера с помощью команды::
Command |
---|
sudo pcs cluster destroy |
Собрать кластер (для примера используется имя кластера astracluster)
В конфигурационный файл /etc/postgresql/<номер_версии>/<имя_кластера>/pg_hba.conf добавить строки:
Блок кода |
---|
host replication postgres 192.168.23.101/32 trust
host replication postgres 192.168.23.102/32 trust |
Для того, чтобы внесенные изменения вступили в силу, перезапустить службу postgresql:
Command |
---|
sudo systemctl restart postgresql |
Далее предполагается, что узел 192.168.23.101/32 назначается ведущим (master), а узел 192.168.23.102/32 - ведомым (slave).
Выполнить синхронизацию данных между узлами кластерной службы postgresql, для чего на подчиненном узле (на всех подчиненных узлах):
Действуя от имени пользователя postgres удалить содержимое кластера СУБД:
Command |
---|
sudo -u postgres sh -c "rm -rf /var/lib/postgresql/*/main/*" |
При работе в Astra Linux Special Edition x.7:
Command |
---|
sudo -u postgres pg_basebackup -h 192.168.23.101 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -P |
При работе в Astra Linux, выпущенных до очередного обновления x.7:
Command |
---|
sudo -u postgres pg_basebackup -h 192.168.23.101 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -P --xlog |
В дальнейшем службой postgresql будет управлять кластер pacemaker. Для исключения конфликтов между кластером и службой systemd на всех узлах (включая ведущий) отключить автоматический запуск службы postgresql при перезагрузке ОС и остановить службу:
Command |
---|
sudo systemctl disable postgresql sudo systemctl stop postgresql |
Создание кластерного ресурса
Добавить кластерную службу СУБД как ресурс с именем pgsql. Для этого на ведущем узле:
Выполнить команду создания ресурса (в качестве номера версии использовать значения 9.6 или 11 в соответствии с используемой версией PostgreSQL). Имя создаваемого ресурса — pgsql. Команды:
В случаях, если требуется (или, возможно, потребуется в будущем) работа с поддержкой МРД:
Command |
---|
sudo pcs resource create pgsql ocf:astra:pgsql \ |
Подробное описание параметров см. man pcs и man ocf_astra_psql. Основные параметры:
В случаях, если поддержка МРД не требуется (в том числе в Astra Linux Common Edition) вместо агента ocf:astra:pgsql можно использовать агент ocf:heartbeat:pgsql. При этом дополнительно нужно будет вручную определить параметры создаваемого ресурса:
Command |
---|
sudo pcs resource create pgsql ocf:heartbeat:pgsql \ |
:
Для Astra Linux Special Edition x.7:
Объявить ресурс pgsql "продвигаемым" (promotable) и создать вторичный ресурс. Такие ресурсы могут переключаться между двумя режимами работы - master и slave:
Command sudo pcs host auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
sudo pcs cluster setup astracluster pcmk-1 pcmk-2 --forceДля обновлений Astra Linux Special Edition до x.7 и Astra Linux Common Edition:
Command sudo pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
sudo pcs cluster setup --name astracluster pcmk-1 pcmk-2 --force- resource promotable pgsql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
В примере приведена форма команды без явного указания имени вторичного ресурса. При этом будет автоматически использовано имя <имя_ресурса>-clone (в данном примере - pgsql-clone).
Объявить зависимости от других кластерных ресурсов:
Для Astra Linux, выпущенных до очередного обновления x.7:Command sudo pcs constraint colocation add ClusterIP with master pgsql-clone INFINITY Объявить мастер-ресурс:
Command sudo pcs resource master mspgsql pgsql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true где:
mspgsql — имя мастер-ресурса, предоставляющего доступ к активному ведущему серверу;
- pgsql — ранее созданный ресурс СУБД.
Убедиться, что кластер полностью запустился:
Command while ! sudo pcs status
Пример вывода команды:
Блок кода Cluster name: astracluster Stack: corosync Current DC: pcmk-1 (version 2.0.1-9e909a5bdd) - partition with quorum Last updated: Sat Mar 11 18:40:21 2023 Last change: Sat Mar 11 18:39:28 2023 by root via crm_attribute on pcmk-1 2 nodes configured 3 resources configured Online: [ pcmk-1 pcmk-2 ] Full list of resources: ClusterIP (ocf::heartbeat:IPaddr2): Started pcmk-1 Clone Set: pgsql-clone [pgsql] (promotable) Masters: [ pcmk-1 ] Slaves: [ pcmk-2 ] Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
Объявить зависимости от других кластерных ресурсов:
Command |
---|
sudo pcs constraint colocation add ClusterIP with master mspgsql INFINITY |
Запустить кластер:
Command |
---|
sudo pcs cluster start --all |
Тестирование
Тестирование должно продемонстрировать отказоустойчивость созданного кластера. Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется.
Тестирование репликации
На ведущем узле создать тестовую базу данных test_db:
Command |
---|
sudo -u postgres psql -c "create database test_db;" |
Убедиться, что созданная база данных появилась на ведомом сервере:
Command |
---|
sudo -u postgres psql -l |
Тестирование отказоустойчивости
Выключить действующий ведущий сервер.
; do sleep 1 ; done
В целях тестирования отключить технологию STONITH.
Предупреждение На кластерах находящихся в эксплуатации STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных. Раскрыть title Подробнее про STONITH STONITH (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что STONITH не сконфигурирован
Команда для отключения:
Command sudo pcs property set stonith-enabled=false
Информация |
---|
Процедура добавления узла в кластер занимает некоторое время, обычно не более 1 минуты. |
Проверить состояние узлов кластера можно командой
Проверить статус кластера на ведомом узле:
Command |
---|
sudo pcs status |
В выводе команды должно быть указано, что узел выводится из эксплуатации (demoting). Пример вывода команды:
Если кластер успешно стартовал, то состояние узлов кластера в выводе команды pcs status будет таким:
nodes configured 3 resources configuredБлок кода |
---|
Online: [ pcmk-1 pcmk-2 ] |
После завершения переключения кластера мастером становится второй сервер:
Блок кода |
---|
Online: [ pcmk-1 pcmk-2 ]
Full list of resources:
ClusterIP (ocf::heartbeat:IPaddr2): Started pcmk-2
Clone Set: pgsql-clone [pgsql] (promotable)
Masters: [ pcmk-2 ]
Stopped: [ pcmk-1 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
|
Восстановление сбойного узла
Для восстановления сбойного узла выполнить на этом узле следующие действия:
Проверить правильность конфигурации кластера можно командой:
Command |
---|
sudo crm_verify -L |
Если конфигурация кластера содержит ошибки, утилита crm_verify о них сообщит.
Предупреждение | ||
---|---|---|
Если узел кластера выключался/перезагружался, то считается, что узел работает нештатно, и решение о возможности его повторного включения в кластер может принять только человек. Автоматическое включение узлов в кластер не применяется. Для возврата узла в кластер требуется повторно добавить его в кластер, выполнив на нем команду:
|
Настроить поведение ресурсов:
Задать значение глобального таймаута на операции со всеми ресурсами:
Предупреждение На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе. Command sudo pcs resource op defaults timeout=240s Если при выполнении этой команды возникает ошибка:
Блок кода Error: Could not map name=... to a UUID
то команду следует выполнить повторно.
Добавить IP-адрес кластера 192.168.23.100 как ресурс ClusterIP:
Command sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.23.100 cidr_netmask=32 op monitor interval=30s Информация Параметры команды, задающиеся колючем op (в примере выше - параметр op monitor interval=30s) должны указываться последними.
Информация | ||
---|---|---|
Если узел кластера выключался/перезагружался, требуется повторно добавить его в кластер, выполнив на нем команду:
|
Установка и подключение кластерных служб
Кластерная служба apache2 для кластера pacemaker
Кластерная служба postgresql для кластера pacemaker
Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:
Command |
---|
sudo rm /var/lib/pgsql/tmp/PGSQL.lock |
Запустить кластер:
Command |
---|
sudo pcs cluster start |
После перезапуска сбойного узла мастер-сервером останется работавший узел, а перезапущенный узел получит статус подчиненного: