Оглавление |
---|
Информация |
---|
Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи. |
Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Предупреждение |
---|
При работе |
Предупреждение |
Для работы в кластере с защищенной СУБД postgresql postgresql с использованием МРД (см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?) необходимо рекомендуется использовать специальный агент ocf:astra:pgsql. Этот агент входит доступен в состав составе:
Для работы без использования МРД можно и для работы в более ранних обновлениях Astra Linux соедует использовать обычный для Linux агент ocf:heartbeat:pgsql. |
Введение
Предполагается, что дальнейшие действия выполняются на ранее подготовленном кластере pacemaker. См. статью Развертывание двухузлового кластера pacemaker.
В рамках подготовки кластера созданы два узла кластера с адресами 192.168.23.101/32 и 192.168.23.102/32, а сам кластер имеет адрес 192.168.23.100.
Далее в созданном кластере pacemaker создается отказоустойчивая кластерная служба СУБД PostgreSQL с репликацией данных между узлами. В процессе настройки один из узлов назначается ведущим (master), второй (остальные) — подчиненным (slave). При отказе ведущего узла подчиненный узел автоматически становится ведущим.
Настройка и тестирование аутентификации пользователей и работы мандатного управления доступом (МРД) в данной статье не рассматривается и не тестируется. См.:
Установка пакетов
Информация |
---|
Установка пакетов выполняется на каждом узле кластера. |
Установить пакетыметапакет postgresql:
Для Astra Linux Special Edition x.7:
Command |
---|
sudo apt install postgresql |
При установке метапакета postgresql:
- В Astra Linux Special Edition x.7 будет установлена защищенная СУБД PostgreSQL версии 11.
В
-11или, в зависимости от подключенных репозиториев и установленных оперативных обновлений и при отсутствии необходимости использовать МРД:
Command sudo apt install postgresql-14 Для обновлений Astra Linux Special Edition, выпущенных до обновления x.7 и , будет установлена защищенная СУБД PostgreSQL версии 9.6.
В Astra Linux Common Edition будет установлена СУБД PostgreSQL версии 9.6 без встроенной защиты.
- Во всех обновлениях Astra Linux:
- Будет создан кластер СУБД (не путать с кластером pacemaker) с именем main.
- Будет создан служебный пользователь postgres (далее - пользователь postgres).
Если планируется использовать специальный агент ocf:astra:pgsql, то установить пакет astra-resource-agents:
Command |
---|
sudo apt install |
astra-resource- |
Подготовка данных для тестирования
Информация |
---|
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):Подготовка данных для тестирования выполняется на каждом узле кластера. |
agents |
Настройка СУБД postgresql
Для настройки работы СУБД postgesql проверить указанные ниже параметры и привести их к указанным значениям (добавить в случае отсутствия):
В конфигурационном файле СУБД /etc/postgresql/<номер_версии>/<имя_кластера_СУБД>/postgresql.conf:
Блок кода listen_addresses = '*' wal_level = replica wal_keep_segments = 32
В конфигурационный файл /etc/postgresql/<номер_версии>/<имя_кластера>/pg_hba.conf добавить строки:
Блок кода host replication postgres 192.168.23.101/32 trust host replication postgres 192.168.23.102/32 trust
где 192.168.23.101/32 и 192.168.23.102/32 - IP-адреса узлов ранее подготовленного кластера pacemaker.
Для того, чтобы внесенные изменения вступили в силу, перезапустить службу postgresql:
Command sudo systemctl restart postgresql
Далее предполагается, что узел 192.168.23.101/32 назначается ведущим (master), а узел 192.168.23.102/32 - ведомым (slave).
Якорь | ||||
---|---|---|---|---|
|
Выполнить синхронизацию данных между узлами кластерной службы postgresql, для чего на подчиненном узле (на всех подчиненных узлах):
Действуя от имени пользователя postgres удалить содержимое кластера СУБД
Перейти в каталог /tmp:
Command cd /tmp Создать базу данных cluster:
Command sudo -u postgres createdb cluster Создать в базе данных таблицу info:
Command sudo -u postgres psql -d cluster -c "CREATE TABLE info (text varchar(80));" Добавить в таблицу запись, содержащую имя сервера:
Задать пароль пользователю СУБД PostgreSQL (для примера использован пароль 123)Command sudo -u postgres
psqlsh -
d cluster -c "
INSERT INTO info VALUES ('Test DB - $(hostname)');"rm -rf /var/lib/postgresql/*/main/*"
- Действуя от имени пользователя postgres создать резервную копию ведущего узла. При этом обращение к ведущему узлу выполняется по его адресу (в примере —192.168.23.101). Далее созданная резервная копия будет использована для создания локальной копии базы данных. Команда для создания резервной копии:
При работе в 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 при перезагрузке ОС и остановить службу
Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить агента из автоматической загрузки:
Command sudo systemctl disable postgresql Перезапустить кластер СУБД main:
Command sudo pg_ctlcluster <номер_версии> main restart Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL.
Подключение ресурса
sudo systemctl stop postgresql
Создание кластерного ресурса
Для создания кластерного ресурса добавить необходимо кластерную службу СУБД как ресурс с именем pgsql. Для этого на ведущем узле:
Выполнить команду создания ресурса (в качестве номера версии использовать значения 9.6 или 11 в соответствии с используемой версией PostgreSQL). Имя создаваемого ресурса — pgsql. Команды:
В случаях, если требуется (или, возможно, потребуется в будущем) работа с поддержкой МРД
Добавить службу PostgreSQL как ресурс с именем Database:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):
Command sudo pcs resource create Database pgsql ocf:astra:pgsql pgversion=$psql_version op monitor interval=1min\
pgversion="<номер_версии>" \
rep_mode="sync" \
master_ip="192.168.23.100" \
node_list="pcmk-1 pcmk-2"Подробное описание параметров см. man pcs и man ocf_astra_pgsql. Основные параметры:
- pgsql — имя (идентификатор) создаваемого виртуального ресурса;
- ocf:astra:pgsql — название предопределенного набора параметров ресурса (агент).
В случаях, если поддержка МРД не требуется (в том числе в Astra Linux Common Edition) вместо агента ocf:astra:pgsql можно использовать агент ocf:heartbeat:pgsql. При этом дополнительно нужно будет вручную определить параметры создаваемого ресурсаДля более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:
Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL;Command sudo pcs resource create Database pgsql ocf:heartbeat:pgsql \
pgctl="/usr/lib/postgresql/<номер_версии>/bin/pg_ctl" \
pgdata="/var/lib/postgresql/<номер_версии>/main" \
config="/etc/postgresql/<номер_версии>/main/postgresql.conf" \
socketdir="/var/run/postgresql/" \
rep_mode="sync" \
master_ip="192.168.23.100" \
node_list="pcmk-1 pcmk-2" \
op monitor interval=1minИнформация Параметры команды, задающиеся колючем op (в примере выше - параметр op monitor interval=1min должны указываться последними.
- Установить параметры службы:
- Для Astra Linux Special Edition x.7:
Объявить ресурс pgsql "продвигаемым" (promotable) и создать вторичный ресурс. Такие ресурсы могут переключаться между двумя режимами работы - master и slave
- "Ресурс Database должен работать на узле, где размещен ClusterIP"
:
Command sudo pcs resource
promotable pgsql promoted-max=1
promoted-node-max=1 clone-max=
2 clone-node-max=1 notify=true В примере приведена форма команды без явного указания имени вторичного ресурса. При этом будет автоматически использовано имя <имя_ресурса>-clone (в данном примере - pgsql-clone).
Объявить зависимости от других кластерных ресурсов:
Command sudo pcs constraint colocation add ClusterIP with master
pgsql-clone INFINITY
- Для Astra Linux, выпущенных до очередного обновления x.7:
Объявить мастер-ресурс:
Command sudo pcs
constraint order promote msPostgresql then start ClusterIP kind=Mandatory
sudo pcs constraint order start msPostgresql then start ClusterIP kind=Mandatory - Для Astra Linux Special Edition x.7:
Тестирование
Тестирование должно продемонстрировать отказоустойчивость созданного кластера. Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется.
Подготовка теста
На клиентской машине, предназначенной для тестирования:
Установить клиентский пакет СУБД PostgreSQL:
Command |
---|
sudo apt install postgresql-client |
resource master mspgsql pgsql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true где:
mspgsql — имя мастер-ресурса, предоставляющего доступ к активному ведущему серверу;
- pgsql — ранее созданный ресурс СУБД.
Объявить зависимости от других кластерных ресурсов:
Command sudo pcs constraint colocation add ClusterIP with master mspgsql INFINITY
Запустить кластер:
Command sudo pcs cluster start --all
Проверить статус службы (может понадобиться некоторое время для полного запуска службы):
Command 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 status |
сообщает об ошибке:
Блок кода |
---|
exitreason='Replication(rep_mode=async or sync) requires Master/Slave configuration.' |
то для устранения ошибки остановить и запустить кластер:
Command |
---|
sudo pcs cluster stop --all |
Тестирование
Тестирование должно продемонстрировать отказоустойчивость созданного кластера. Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется.
Тестирование репликации
На ведущем узле создать тестовую базу данных test_db:
Command sudo -u postgres psql -c "create database test_db;" Убедиться, что созданная база данных появилась на ведомом сервере:
Command sudo -u postgres psql -l
Тестирование отказоустойчивости
Выключить действующий ведущий сервер.
Проверить статус кластера на ведомом узле:
Command sudo pcs status В выводе команды должно быть указано, что узел выводится из эксплуатации (demoting). Пример вывода команды:
Блок кода Cluster name: astracluster Stack: corosync Current DC: pcmk-1 (version 2.0.1-9e909a5bdd) - partition with quorum Last updated: Sun Mar 12 15:17:55 2023 Last change: Sun Mar 12 15:12:38 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-2 Clone Set: pgsql-clone [pgsql] (promotable) pgsql (ocf::astra:pgsql): Demoting pcmk-1 Slaves: [ pcmk-2 ] Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
После завершения переключения кластера мастером становится второй сервер
Создать сценарий test-request.sh следующего содержания:
Блок кода | ||
---|---|---|
| ||
#!/bin/sh
while true ; do
psql postgresql://postgres:123@192.168.23.100/cluster -tc "SELECT text FROM info;" | xargs echo
sleep 1s
done |
Установить созданному файлу сценария права на исполнение
Command |
---|
chmod +x test-request.sh |
Запустить сценарий:
Command |
---|
./test-request.sh |
После запуска сценарий будет отправлять запрос кластеру 1 раз в секунду и выводить полученное содержимое на экран.
Если в данный момент ресурс ClusterIP размещен на узле 1, то вывод сценарий будет таким:
Блок кода |
---|
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-1 |
Отключение узла кластера от сети
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
Command sudo pcs status resources На узле с кластерными ресурсами отключить сетевое соединение:
Command sudo nmcli c d path 1 Кластерные ресурсы мигрируют на другой узел кластера и вывод сценария test-request.sh изменится. Например, если кластерные ресурсы располагались на узле 1, то после отключения узла 1 от сети, ресурсы переместятся на узел 2.
Блок кода Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-1 Test DB - pcmk-2 Test DB - pcmk-2
Включить сетевое соединение на отключенном от сети узле:
Command sudo nmcli c u path 1 Дождаться возвращение узла в кластер. После возвращения узла в кластер выполненная на любом из узлов команда
Command sudo pcs status должна вывести:
Блок кода 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
Восстановление сбойного узла
Для восстановления сбойного узла выполнить на этом узле следующие действия:
- Выполнить синхронизацию данных с действующим ведущим сервером. См. Синхронизация узлов кластерной службы postgresql.
Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:
Command sudo rm /var/lib/pgsql/tmp/PGSQL.lock Запустить кластер:
Command sudo pcs cluster start
После перезапуска сбойного узла мастер-сервером останется работавший узел, а перезапущенный узел получит статус подчиненного:
Блок кода |
---|
Cluster name: astracluster
Stack: corosync
Current DC: pcmk-2 (version 2.0.1-9e909a5bdd) - partition with quorum
Last updated: Tue Apr 11 14:13:34 2023
Last change: Tue Apr 11 14:05:24 2023 by root via crm_attribute on pcmk-2
2 nodes configured
3 resources configured
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 ]
Slaves: [ pcmk-1 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled |
Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:
Command |
---|
sudo pcs status resources |
Выключить узел с кластерными ресурсами, перезагрузив его:
Command |
---|
sudo reboot |
Кластерные ресурсы мигрируют на другой узел кластера и вывод сценария test-request.sh изменится. Если кластерные ресурсы располагались на узле 2, то после выключения узла 2 ресурсы переместятся на узел 1.
Блок кода |
---|
Test DB - pcmk-2
Test DB - pcmk-2
Test DB - pcmk-2
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-1 |
Когда выключенный узел загрузится вернуть его в кластер, выполнив на нем команду: