Информация |
---|
Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи. |
Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
|
|
|
|
|
Параметры стенда
Параметры сети
- Сеть
Для работы без использования МРД и для работы в более ранних обновлениях Astra Linux соедует использовать обычный для Linux агент ocf:heartbeat:pgsql.
Введение
Предполагается, что дальнейшие действия выполняются на ранее подготовленном кластере pacemaker. См. статью Развертывание двухузлового кластера pacemaker.В рамках подготовки кластера созданы два узла кластера с адресами
- 192.168.23.
- 0/24;
- Адрес маршрутизатора (шлюза) сети 192.168.23.
Далее в созданном кластере pacemaker создается отказоустойчивая кластерная служба СУБД PostgreSQL с репликацией данных между узлами. В процессе настройки один из узлов назначается ведущим (master), второй (остальные) — подчиненным (slave). При отказе ведущего узла подчиненный узел автоматически становится ведущим.
Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется. См.:
Установка пакетов
Информация |
---|
Установка пакетов выполняется на каждом узле кластера. |
Установить метапакет 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 |
- 1;
- Предполагается, что в сети отсутствует служба DNS, поэтому адреса узлов задаются с помощью файла /etc/hosts.
Параметры хостов
Для развертывания кластера используются два подсоединенных к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2. Для тестирования отказоустойчивости используется рабочая станция, подключенная к той же сети.
Параметр | Узел 1 | Узел 2 |
---|---|---|
Имя узла | pcmk-1 | pcmk-2 |
Статический IP-адрес узла | 192.168.23.101 | 192.168.23.102 |
Дополнительно в качестве IP-адреса кластера будет использован адрес 192.168.23.100. IP-адрес рабочей станции, с помощью которой будет выполняться тестирование, неважен.
Настройка стенда
Настройка сетевых подключений
Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется NetworkManager настройку можно выполнить с помощью графического инструмента или из командной строки командами:
Узел 1 | Узел 2 | ||||
---|---|---|---|---|---|
Присвоить узлу статический IP-адрес 192.168.23.101:
| Присвоить узлу статический IP-адрес 192.168.23.102:
|
Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.
Настройка /etc/hosts
Записать имена узлов в файл /etc/hosts и удалить строку 127.0.1.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 '/^127\.0\.1\.1/d' /etc/hosts |
Установка пакетов кластерного ПО
Информация |
---|
Установка пакетов кластерного ПО выполняется на каждом узле кластера. |
Установить пакеты кластерного ПО:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):
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 (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что STONITH не сконфигурирован
Предупреждение На кластерах находящихся в эксплуатации STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных. Command sudo pcs property set stonith-enabled=false
Информация |
---|
Процедура добавления узла в кластер занимает некоторое время, обычно не более 1 минуты. |
Проверить состояние узлов кластера можно командой
Проверить статус кластера на ведомом узле:
Command |
---|
sudo pcs status |
В выводе команды должно быть указано, что узел выводится из эксплуатации (demoting). Пример вывода команды:
Если кластер успешно стартовал, то состояние узлов кластера в выводе команды pcs status будет таким:
Блок кода |
---|
Online: [ pcmk-1 pcmk-2 ] |
После завершения переключения кластера мастером становится второй сервер:
Проверить правильность конфигурации кластера можно командой:
Command |
---|
sudo crm_verify -L |
Если конфигурация кластера содержит ошибки, утилита crm_verify о них сообщит.
Предупреждение | ||
---|---|---|
Если узел кластера выключался/перезагружался, то считается, что узел работает нештатно, и решение о возможности его повторного включения в кластер может принять только человек. Автоматическое включение узлов в кластер не применяется. Для возврата узла в кластер требуется повторно добавить его в кластер, выполнив на нем команду:
|
Настроить поведение ресурсов:
Задать значение глобального таймаута на операции со всеми ресурсами:
Предупреждение На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе. Command sudo pcs resource op defaults timeout=240s Добавить 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
Информация |
---|
Если узел кластера выключался/перезагружался, требуется повторно добавить его в кластер, выполнив на нем команду |
Блок кода |
---|
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
|
Восстановление сбойного узла
Для восстановления сбойного узла выполнить на этом узле следующие действия:
Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:
Command |
---|
sudo rm /var/lib/pgsql/tmp/PGSQL.lock |
:
|
После перезапуска сбойного узла мастер-сервером останется работавший узел, а перезапущенный узел получит статус подчиненного: