Это руководство описывает, как установить и использовать кластер репликации
HQbird: узлы hqclusternode и менеджер кластера hqbirdrcm (RCM).
Руководство для администратора Firebird. Мы считаем, что вы знаете Firebird,
gfix и nbackup. Внутреннее устройство узла знать не нужно.
Из чего состоит кластер
Компонент
Сколько
Где работает
Что делает
Firebird (HQbird)
один или несколько экземпляров
на каждом сервере баз
хранит базы, пишет сегменты репликации
fbagent
один на экземпляр Firebird
рядом с Firebird
останавливает и запускает Firebird по запросу узла
hqclusternode (узел)
один на экземпляр и роль
рядом с Firebird
настраивает репликацию, передаёт сегменты, делает инициализацию реплик
hqbirdrcm (RCM)
один на кластер
на любом хосте, который видит все узлы
веб-интерфейс, команды, оповещения, статистика
У узла есть роль: master (мастер) или replica (реплика). На одном
экземпляре Firebird могут работать два узла: узел мастера и узел реплики.
Тогда одни базы этого Firebird — мастера, другие — реплики.
Как это работает
На мастере Firebird пишет изменения базы в сегменты (файлы журнала
репликации).
Узел мастера отправляет сегменты узлу реплики по защищённому каналу (mTLS).
Узел реплики кладёт сегменты в папку входящих сегментов. Firebird реплики
применяет их к своей копии базы.
Первую копию базы на реплику узел мастера передаёт сам. Это называется
инициализация (reinit). Она идёт через nbackup, мастер в это время
работает.
Узлы отправляют статистику в RCM. RCM показывает состояние кластера и
отправляет узлам команды оператора.
HQbird 3.0 и 2.5 — репликация через плагин replconf. Публикаций нет,
набор таблиц задают фильтры. Отличия описаны во врезках «HQbird 2.5/3.0».
Главная версия Firebird на мастере и на реплике должна совпадать. Иначе узел
реплики откажет в инициализации.
Порты
Порт
Кто слушает
Кто подключается
Для чего
7051
узел
другие узлы и RCM
API узла, передача сегментов и копий баз
7443
RCM
все узлы
приём статистики от узлов
7444
RCM, только 127.0.0.1
оператор
веб-интерфейс и API оператора (HTTP)
13050
fbagent, только 127.0.0.1
узел на том же хосте
управление Firebird
3050
Firebird
приложения
обычная работа с базой
Если на одном хосте два узла (мастер и реплика), у второго узла другой порт,
например 7052.
Порты 7444 и 13050 нельзя открывать в сеть. К веб-интерфейсу RCM
подключайтесь через SSH-туннель (глава 1).
Главное правило: без fbagent нет изменений
Узел меняет конфигурацию репликации только через fbagent: ему нужно
перезапускать Firebird. Если fbagent недоступен, узел отказывает в любом
действии, которое меняет конфигурацию. Он не работает «частично».
Термины
Термин
Значение
Сегмент
файл журнала репликации с изменениями базы
Публикация
список таблиц мастера, изменения которых попадают в сегменты (Firebird 4/5)
Инициализация (reinit)
передача копии базы с мастера на реплику через nbackup
GUID базы
идентификатор базы Firebird; по нему RCM связывает мастер и реплику
Peer
узел-партнёр: для мастера — его реплики
Companion
второй узел на том же экземпляре Firebird (мастер и реплика на одном хосте)
запускаете скрипт установки fbagent, одобряете запрос, описываете кластер
Через RCM, без goafts (1.3)
goafts нет, но нужны сертификаты, конфигурация и обновления без ручной работы; до 3 серверов баз
ставите HQbird на каждый хост, входите в RCM, в Настройки → Связать хосты указываете адреса хостов
Вручную (1.4)
нет доступа к goafts, закрытая сеть, особые требования
ставите файлы, делаете сертификаты, пишете node.json и rcm.json, регистрируете службы
Через goafts и через RCM узлы и RCM вы не устанавливаете сами. Их ставит
fbagent, когда вы добавляете его в кластер (глава 2). Сертификаты и
конфигурация тоже создаются сами.
Linux и Windows описаны в одной главе. Отличия Windows — во врезках
«На Windows».
1.1. Требования
На каждом сервере баз:
Firebird / HQbird 5.0, 4.0, 3.0 или 2.5 (2.5 — только Linux).
fbagent рядом с каждым экземпляром Firebird. Без fbagent узел не работает.
Синхронизация времени (NTP, chrony, w32time) на всех серверах и на хосте
RCM. От часов зависят окна перезапуска и передачи, оценка отставания и
проверка «узел не отвечает».
Свободное место для архива сегментов и для инициализации реплик (глава 4).
Сеть по таблице портов (глава 0).
Linux: права root, x86_64, systemd, curl. Поддерживаются Ubuntu 20–26,
Debian 11–13, Astra, CentOS 7–10, AlmaLinux, Rocky, Oracle Linux 8–10, РЕД ОС,
openSUSE 15.6, Fedora 44+.
Windows: права администратора, x64, Windows 10 / Server 2016 или новее,
64-битный Windows PowerShell 5.1. На Windows 10 и Server 2016–2022 нужен 7-Zip.
Где будет RCM. RCM нужен один на кластер. Его можно поставить на любой
сервер, который видит все узлы, в том числе на один из серверов баз.
1.2. Установка через goafts
Шаг 1. Запустите скрипт установки fbagent
Скрипт ставит Firebird (сборку HQbird), fbagent и регистрирует fbagent на
сервере goafts. Скрипт выбирайте по версии Firebird: fb25, fb30, fb40,
fb50.
Linux (от root):
Command
sudo sh fbagent-fb50_known.sh --goafts <сервер-goafts> --enroll --cluster
Для Windows нет скрипта fb25 и нет параметра -Cluster: fbagent работает от
LocalSystem и сам создаёт папки кластера.
Главные параметры:
Linux
Windows
Значение
--goafts <имя>
-Goafts
сервер goafts, откуда скачивать; имя даёт поставщик
--enroll
-Enroll
зарегистрировать fbagent на goafts (запрос сертификата)
--cluster
—
создать папки /opt/hqclusternode и /opt/hqbirdrcm (нужно только для fbagent 2.55.2 и старше, новым не мешает)
--channel
-Channel
канал обновлений fbagent, по умолчанию stable
--token
-Token
лицензионный токен: goafts одобрит запрос сам
--port
-Port
порт Firebird
--yes
-Yes
не задавать вопросов (нужно, если нет терминала)
Полный список параметров — в README скрипта установки fbagent.
Шаг 2. Одобрите запрос fbagent
С параметром --enroll fbagent отправляет на goafts запрос сертификата (CSR) и
ждёт одобрения до 30 минут. Одобрить можно так:
автоматически — если установка шла с лицензионным токеном (--token) и
в лицензии есть свободное место;
в панели администратора goafts — раздел запросов CSR, запрос этого
хоста, кнопка одобрения и подписи;
через API goafts — POST /v1/admin/csr-requests/{id}/approve.
Если регистрация не прошла (например, время ожидания кончилось), fbagent всё
равно работает, а скрипт завершится с кодом 2. Запустите скрипт ещё раз с
теми же параметрами: повторится только регистрация.
Через несколько минут после регистрации fbagent сам ставит HQ Monitor.
Шаг 3. Опишите кластер
Узлы и RCM появятся, когда вы добавите fbagent в кластер goafts. Как описать
кластер — в главе 2.
После сохранения кластера:
В течение 10 минут fbagent получает кластер из goafts (потом проверяет
изменения раз в 60 секунд).
fbagent хоста RCM создаёт центр сертификации (CA) кластера и подписывает
сертификаты всех узлов.
Каждый fbagent пишет node.json или rcm.json для своих участников
кластера.
При следующей проверке продуктов (раз в 3 минуты) fbagent ставит и
запускает службы.
Что и куда ставится:
Что
Linux
Windows
Узел мастера
/opt/hqclusternode/master/, служба hqclusternode-master-p<порт>
<HQbird>\hqclusternode\master\, служба HQClusterNode-master-p<порт>
Узел реплики
/opt/hqclusternode/replica/, служба hqclusternode-replica-p<порт>
<HQbird>\hqclusternode\replica\, служба HQClusterNode-replica-p<порт>
RCM
/opt/hqbirdrcm/, служба hqbirdrcm
<HQbird>\hqbirdrcm\, служба hqbirdrcm
<порт> — порт Firebird, например 3050. На одном fbagent может быть не больше
одного узла мастера, одного узла реплики и одного RCM.
На Windows. fbagent до версии 2.83.0 ставил узлы в C:\hqclusternode, а
RCM в C:\hqbirdrcm. Если эти папки есть, fbagent продолжает их
использовать.
Обновления
fbagent проверяет новые версии узла и RCM раз в 3 минуты, канал по
умолчанию — stable. Сначала обновляется узел реплики, потом узел мастера.
Если после обновления служба не запустилась или сообщила не ту версию,
fbagent возвращает прошлую версию и блокирует новую. Список блокировок:
<папка продукта>/update/<продукт>/blocked-versions.json. Чтобы попробовать
версию снова, удалите её строку из этого файла.
Состояние продукта: fbagent --product-status hqclusternode (или
hqbirdrcm).
1.3. Установка через RCM (без goafts)
Кластер ведёт RCM. fbagent каждого хоста получает описание кластера от RCM,
fbagent хоста RCM подписывает сертификаты, а узел и RCM обновляются из
выпусков, которые хранит RCM.
Ограничения:
В RCM один кластер.
Не больше 3 мест. Место — хост, на котором есть узел мастера или реплики.
Мастер и реплика на одном хосте — одно место. Хост, где есть только RCM,
места не берёт. Четвёртый хост — ошибка seats_exceeded.
fbagent и Firebird RCM не обновляет. fbagent обновляет их сам и при этом не
трогает replication.conf, node.json, rcm.json и сертификаты.
Есть два способа:
Связать хосты в RCM — обычный способ. Три действия: установщик на
каждом хосте, вход в RCM, форма Связать хосты.
Вручную из командной строки — токены подключения и
fbagent --cluster-join. Нужен, когда порт 7450 закрыт между хостами или
окно связывания уже закрылось.
Лицензия. Пробная лицензия включает функцию cluster. После пробного
периода fbagent не ставит узел и RCM, если в лицензии нет cluster.
Обновления уже установленных узлов и RCM он не запрещает никогда. Без
goafts плавающая лицензия перестаёт действовать через online_check_days плюс
льготные дни. Поэтому на каждый fbagent установите привязанную лицензию:
Без лицензии мастер останавливает отправку сегментов (глава 2.8).
Порты:
Порт
Где
Кто подключается
7443
хост RCM
fbagent и узлы всех хостов кластера
7444
хост RCM
браузер оператора (консоль RCM, HTTPS)
7450
каждый хост, пока открыто окно связывания
RCM хоста RCM
7051
хосты узлов
другие узлы и RCM (1.4, шаг 7)
Связать хосты в RCM
Шаг 1. Установите HQbird на каждый хост
Поставьте HQbird полным установщиком на каждый сервер баз. Регистрацию на
goafts (--enroll) не делайте. По умолчанию установщик на каждом хосте:
кладёт программы узла и RCM в папку fbagent (update/<продукт>/staged/);
создаёт кластер этого хоста (fbagent --cluster-init), имя кластера — имя
хоста;
ставит и запускает RCM, консоль RCM работает по HTTPS на порту 7444;
создаёт первого администратора RCM со случайным паролем;
открывает окно связывания fbagent на 24 часа: порт 7450.
В конце установщик печатает строки RCM: (адрес консоли, имя кластера,
логин и где лежит пароль) и Pairing: (до какого времени открыт порт 7450 и
отпечаток его сертификата). Запишите отпечаток каждого хоста.
Параметры установщика на Linux (hqbird2027-run.sh):
Параметр
Что делает
--rcm off
не создавать RCM и кластер на этом хосте
--rcm-password-file F
пароль администратора RCM из первой строки файла F, а не случайный
--cluster-id ID
имя кластера ID, а не имя хоста
--cluster-node off
не класть программу узла
--rcm-allow A,B
приглашать этот хост могут только эти RCM: адрес, сеть CIDR или имя
Окно связывания можно открыть снова или закрыть от пользователя fbagent:
Command
cd <папка fbagent>
sudo -u firebird ./fbagent --cluster-pairing on # ещё 24 часаsudo -u firebird ./fbagent --cluster-pairing off
sudo -u firebird ./fbagent --cluster-pairing status
Шаг 2. Войдите в RCM
Выберите хост, на котором будет работать RCM кластера. Это может быть любой
хост из шага 1. Откройте https://<хост>:7444 и войдите с логином и паролем
из шага 1. RCM сразу просит новый пароль (1.5).
Шаг 3. Свяжите хосты
В RCM откройте Настройки → Связать хосты.
В поле Хосты впишите адреса или имена хостов, по одному в строке.
Первая строка — хост RCM, он уже в кластере.
Нажмите Проверить хосты. RCM подключается к каждому хосту на порт
7450 и показывает платформу, версию Firebird, отпечаток и состояние.
Сравните отпечатки с выводом установщика.
Выберите Мастер (по умолчанию первый хост) и нажмите Связать.
Связать хосты: результат проверки
RCM спросит подтверждение и покажет ход в разделе Ход. Когда все узлы
запущены, он пишет «Готово» и номер ревизии кластера:
Связать хосты: все узлы работают
Из командной строки то же самое:
Command
cd /opt/hqbirdrcm
exportRCM_USER=rcmadmin RCM_PASSWORD='<пароль>'./hqbirdrcm cluster link -hosts db1,db2,db3 -master db1
fbagent хоста вступает в кластер. Свой RCM он останавливает и отключает, а
свой пустой кластер переносит в cluster/left/ в папке fbagent.
RCM сохраняет кластер: узел <хост>-master на мастере, <хост>-replica на
других хостах, порт 7051, связи мастер → реплики.
fbagent каждого хоста ставит и запускает узел. RCM ждёт, пока все узлы
работают, и показывает Работает у каждого хоста.
Состояния хоста после Проверить хосты:
Состояние
Что делать
Готов к связыванию
ничего. Если ниже написано «Свой RCM этого хоста остановится после связывания» — это нормально
В кластере
хост уже в этом кластере
Ошибка unreachable
порт 7450 закрыт. Сразу после установки подождите минуту и нажмите Проверить хосты снова. Иначе откройте окно (--cluster-pairing on) и проверьте брандмауэр
Ошибка in_other_cluster
хост в другом кластере
Ошибка claimed
другой RCM связывает этот хост сейчас
Ошибка seats_exceeded
больше 3 мест
Выпуски. Узел fbagent ставит только из RCM. RCM берёт подписанные
выпуски из своей папки import/ (рядом с rcm.json) при старте и каждые
5 минут. Установщик кладёт туда выпуски хоста RCM, а fbagent других хостов
загружают выпуск своей платформы сами. Список выпусков — внизу страницы
Связать хосты. Выпуск можно импортировать и вручную (шаг 5 ниже).
Вручную из командной строки
Порядок: шаги 1–3 на хосте RCM, шаг 4 на каждом другом хосте, шаги 5–6 в RCM.
Шаг 1. Установите HQbird с fbagent
Поставьте HQbird на каждый сервер баз и на хост RCM полным установщиком,
на Linux с --rcm off на всех хостах, кроме хоста RCM. Регистрацию на goafts
(--enroll) не делайте.
На хосте RCM установщик оставляет программу RCM в папке fbagent
(update/hqbirdrcm/staged/). Без неё шаг 3 завершится ошибкой
no hqbirdrcm to install.
Шаг 2. Установите привязанную лицензию
Как в начале раздела, «Лицензия».
Шаг 3. Создайте кластер на хосте RCM
Если установщик уже создал кластер (строка RCM: в его выводе), этот шаг
пропустите.
Выполните команду от пользователя fbagent (на Linux — firebird), не от
root: иначе файлы CA и rcm.json будут принадлежать root.
На Windows (PowerShell от администратора):
.\fbagent.exe --cluster-init shop-prod --address 10.0.0.7
shop-prod — имя кластера: строчные латинские буквы, цифры и -.
--address — адрес хоста RCM, по которому к нему подключаются другие
хосты. Можно повторить несколько раз. Без параметра берутся адреса и имя
хоста.
Команда:
создаёт CA кластера и CA агентов (в папке fbagent, clusterca/<имя>/);
пишет сертификат RCM, rcm.json и cluster-init.json в папку RCM;
ставит RCM и регистрирует службу hqbirdrcm. На Linux служба работает от
отдельного пользователя hqbirdrcm;
переключает fbagent на RCM (cluster.source = rcm) и перезапускает его;
печатает адрес RCM и отпечаток CA:
Code
Cluster: shop-prod
RCM URL: https://10.0.0.7:7443
CA hash: sha256:9f86d0...
Запишите RCM URL и CA hash: они нужны на других хостах. Повторный запуск
для того же кластера безопасен: CA и ключи остаются прежними.
Сразу войдите в RCM и смените пароль rcmadmin (1.5).
На Linux. Пользователь hqbirdrcm входит в группу fbagent. RCM читает
rcm.json через эту группу, но не может его записать. Поэтому Настройки → RCM не сохраняет изменения (ошибка
rcm_config_read_only). Правьте rcm.json на хосте от пользователя fbagent
и перезапускайте RCM.
Шаг 4. Подключите fbagent других хостов
На хосте RCM создайте токен подключения для каждого fbagent: в RCM
Настройки → Кластер, кнопка Создать токен подключения. Или из
командной строки:
Command
cd /opt/hqbirdrcm
exportRCM_USER=rcmadmin RCM_PASSWORD='<пароль>'./hqbirdrcm cluster join-token -note db2
Токен действует 24 часа, только для одного fbagent и только один раз. RCM
показывает его один раз, вместе с готовой командой.
На хосте узла выполните эту команду от пользователя fbagent:
Вместо --token-file можно --token <токен>. На Windows — то же с
.\fbagent.exe в PowerShell от администратора.
fbagent проверяет CA RCM по отпечатку. Если отпечаток не совпал, он
останавливается и ничего не пишет. Потом fbagent получает свой сертификат
(90 дней, продлевается сам) и перезапускается. Подключённый fbagent виден в
RCM в таблице Агенты. Пока у него нет участников, на хосте ничего не
ставится.
Шаг 5. Импортируйте выпуски в RCM
Узел и RCM fbagent берёт только из RCM. Если нужного выпуска нет в списке
Выпуски в зеркале (Настройки → Связать хосты), импортируйте каждый продукт
(hqclusternode, hqbirdrcm) для каждой платформы ваших хостов
(linux-amd64, windows-amd64). Файл выпуска и подпись .sig даёт
поставщик.
Подпись RCM ищет в <файл>.sig, или укажите её параметром -sig. Без
верной подписи поставщика RCM файл не примет.
Новый выпуск заменяет прошлый. Перезапуск RCM не нужен.
fbagent проверяет новые версии раз в 3 минуты. Порядок обновления и
блокировки — как через goafts (1.2, «Обновления»).
Шаг 6. Опишите кластер
Участников и связи задайте в RCM, Настройки → Кластер (глава 2.3). После
сохранения fbagent ставит узлы так же, как через goafts (1.2, шаг 3): пишет
сертификаты, node.json и rcm.json, ставит и запускает службы.
Порты — в начале раздела.
1.4. Установка вручную
Шаг 1. Установите HQbird с fbagent
Установите HQbird на каждый сервер баз (тем же скриптом, но без --enroll, или
полным установщиком HQbird). Проверьте, что fbagent работает.
Запишите из agent_config.json fbagent три значения. Они нужны для
node.json:
Команда создаёт ca.crt и ca.key, node-a.crt/.key, node-b.crt/.key и
rcm.crt/.key. В -hosts перечислите все имена и адреса, по которым к
участникам будут подключаться.
gencerts и созданные файлы
ca.key — ключ CA. На хосты его не копируйте, храните отдельно.
Новый узел позже добавляет -add: он подписывает пару тем же CA, остальные
файлы не меняются:
Сертификаты действуют 90 дней. gencerts -out certs -list показывает даты
окончания, gencerts -out certs -renew продлевает их с тем же ключом. Новый
.crt скопируйте на его хост: узел подхватит его без перезапуска.
Скопируйте на каждый хост ca.crt и только его сертификат и ключ.
Шаг 4. Напишите node.json
Один файл на каждый узел. Пример для мастера (node-a):
json
{"node_id":"node-a","role":"master","listen_addr":":7051","rcm":{"url":"https://<ip-rcm>:7443","ca_cert":"certs/ca.crt","client_cert":"certs/node-a.crt","client_key":"certs/node-a.key"},"firebird":{"root":"/opt/firebird","user":"SYSDBA","password":"<пароль SYSDBA>","port":3050,"replication_conf":"/opt/firebird/replication.conf","replication_log":"/opt/firebird/replication.log","firebird_log":"/opt/firebird/firebird.log","fbagent_url":"http://127.0.0.1:13050","fbagent_token":"<local_api.token>","instance_id":"<local_api.instance_id>","service_name":"<имя службы Firebird>"},"windows":{"restart_window":"22:00-05:00","transfer_window":"23:00-05:00"},"peers":[{"node_id":"node-b","url":"https://<ip-node-b>:7051","compress":"zstd"}]}
Узел реплики (node-b) — такой же файл, но "role": "replica", свои
сертификаты, а в peers — мастер node-a.
Главные поля:
Поле
Значение
node_id
имя узла; одно и то же в сертификате, rcm.json и peers других узлов
role
master или replica
listen_addr
адрес API узла; второй узел на том же хосте — другой порт (:7052)
rcm.url
адрес приёма статистики RCM; none — без RCM
firebird.*
Firebird и fbagent этого экземпляра; значения fbagent должны точно совпадать
firebird.auto_restart
можно ли узлу реплики перезапускать Firebird сам: auto (по умолчанию), never, always
windows.restart_window
окно перезапуска Firebird; у мастера по умолчанию 22:00-05:00, у реплики — всегда
windows.transfer_window
окно, в котором инициализация идёт с полной скоростью
peers
для мастера — его реплики, для реплики — её мастер
databases
папка баз; лучше не писать вручную, а задать через RCM (глава 3)
Остальные поля имеют значения по умолчанию. Узел не запустится, если поля
fbagent не заданы.
Закройте файл: в нём пароль и токен.
Command
chmod 600 /opt/hqclusternode/node.json
На Windows. Пути пишите в формате JSON: "C:\\HQbird\\replication.conf".
service_name — имя службы Windows для Firebird.
url — адрес узла, как его видит хост RCM. Только https.
host — метка экземпляра Firebird. Узел мастера и узел реплики с одной меткой
работают на одном Firebird (companion, нужен для повышения реплики до мастера,
глава 8). На одну метку — не больше одного мастера и одной реплики.
Относительные пути считаются от папки rcm.json.
Шаг 6. Зарегистрируйте службы
Порядок запуска: сначала RCM, потом реплики, потом мастера.
cd /opt/hqclusternode
sudo ./hqclusternode svc install -config /opt/hqclusternode/node.json -certs /opt/hqclusternode/certs
sudo ./hqclusternode svc start -config /opt/hqclusternode/node.json
systemctl status hqclusternode-master-p3050
svc install создаёт службу hqclusternode-<роль>-p<порт> от пользователя
firebird. Если папка Firebird принадлежит root, команда даёт группе
firebird право записи в неё (с sticky bit) и печатает каждое изменение: узлу
нужно заменять replication.conf.
Для svc start, svc stop и svc uninstall указывайте тот же node.json:
имя службы считается из роли и порта Firebird.
На Windows (PowerShell от администратора):
Command
cd C:\hqclusternode
.\hqclusternode.exe svc install -config C:\hqclusternode\node.json -certs C:\hqclusternode\certs
Служба HQClusterNode-<роль>-p<порт> работает от LocalSystem, стартует
автоматически и перезапускается после сбоя. Служба узла не зависит от
службы Firebird. Если узел ставили версией 2027.1.2–2027.1.9, уберите
зависимость один раз:
.\hqclusternode.exe svc fix-deps -config C:\hqclusternode\node.json.
svc install и svc start на Windows
Шаг 7. Откройте порты
На хосте узла разрешите входящие на 7051 (порт listen_addr) от других узлов
и от RCM. На хосте RCM разрешите входящие на 7443 от всех узлов. Порты
7444 и 13050 наружу не открывайте.
Пример ufw на хосте узла:
Command
sudo ufw allow from <ip-rcm> to any port 7051 proto tcp
sudo ufw allow from <ip-узла-партнёра> to any port 7051 proto tcp
Адрес и пароль зависят от того, как поставлен RCM.
Как поставлен RCM
Адрес
Логин и пароль
Установщиком HQbird или fbagent --cluster-init (1.3)
https://<хост RCM>:7444 с любого компьютера
rcmadmin и пароль, который напечатал установщик (или ваш из --rcm-password-file)
Через goafts (1.2) или вручную (1.4)
http://127.0.0.1:7444, только на хосте RCM
rcmadmin, пароль strong password (с пробелом)
HTTPS (1.3). Сертификат RCM подписан CA кластера, браузер его не знает и
предупреждает. На странице входа RCM показывает отпечаток CA. Сравните его с
CA hash, который напечатал установщик, и импортируйте CA в браузер или в
систему как доверенный корневой: ссылка Скачать сертификат CA на странице
входа (https://<хост RCM>:7444/ca.crt, файл hqcluster-ca.crt). Чтобы RCM слушал только localhost, задайте
в rcm.json"operator_addr": "127.0.0.1:7444" и перезапустите RCM.
HTTP (1.2, 1.4). С другого компьютера подключайтесь через SSH-туннель:
Command
ssh -L 7444:127.0.0.1:7444 <хост-rcm>
Затем откройте в браузере http://127.0.0.1:7444.
Страница входа RCM
Сгенерированный пароль RCM просит сменить при первом входе: пока вы его не
смените, другие страницы не открываются. Пароль strong passwordсмените
сразу (ссылка Пароль в заголовке).
Смена пароля при первом входе
Язык. Выберите Русский в списке языков в заголовке страницы (есть и на
странице входа). Без выбора язык берётся из браузера.
Смена пароля и новые пользователи
Свой пароль меняет каждый пользователь: ссылка Пароль в заголовке
страницы. Нужен текущий пароль и новый, не короче 12 символов. После смены
другие сеансы этого пользователя закрываются.
Если установщик сгенерировал пароль, удалите после первого входа файлы с ним:
initial-admin.json в папке RCM и clusterca/<имя>/rcm-initial-password в
папке fbagent.
Новые пользователи. В интерфейсе нет страницы пользователей. Пользователи
хранятся в файле rcm-data/users.json. Пароль хранится как хеш HA1:
MD5("<имя>:hqbirdrcm:<пароль>").
Сразу перезапустите RCM: он читает файл только при запуске. При смене
пароля в интерфейсе RCM записывает файл заново из памяти, и правки, которые
он ещё не прочитал, пропадут.
В RCM на странице Обзор (Overview) видны все узлы, без пометки «не
отвечает».
Из командной строки на хосте RCM:
Command
exportRCM_USER=rcmadmin RCM_PASSWORD='<пароль>'./hqbirdrcm nodes
./hqbirdrcm status
Кластер через RCM: Настройки → Кластер, раздел Состояние — каждый
участник применил последнюю ревизию и не сообщает об ошибке. Из командной
строки: ./hqbirdrcm cluster status.
1.7. Журналы
Что
Где
Журнал узла
<папка node.json>/logs/node-YYYYMMDD.jsonl
Вывод службы узла (Linux)
journalctl -u hqclusternode-<роль>-p<порт>
Вывод службы RCM (Linux)
journalctl -u hqbirdrcm
Журнал репликации Firebird
firebird.replication_log из node.json
Журналы с любого узла без SSH
RCM, страница Журналы (Logs)
1.8. Частые ошибки
Что видно
Причина
Что делать
Узел не запускается: ошибка про fbagent_url, fbagent_token или instance_id
fbagent не работает или значения не совпадают с agent_config.json
проверьте fbagent командой curl из 1.4, шаг 1
Скрипт установки завершился с кодом 2
запрос fbagent не одобрен вовремя
одобрите запрос и запустите скрипт ещё раз
Узлы через goafts не появляются
fbagent не в кластере, или кластер ещё не получен
проверьте кластер (глава 2), подождите до 10 минут
Узел в RCM «не отвечает»
порт 7051 закрыт, неверный url в rcm.json, адрес не в сертификате
проверьте порты и -hosts сертификатов
Нет входа в RCM: «Too many failed sign-in attempts»
10 неудачных входов за 5 минут
подождите несколько минут
Новая версия не ставится
версия в blocked-versions.json
удалите строку версии из файла
--cluster-init: no hqbirdrcm to install
установщик не оставил программу RCM
поставьте HQbird полным установщиком (1.3, «Вручную», шаг 1)
токен уже использован, старше 24 часов или отозван
создайте новый токен (1.3, «Вручную», шаг 4)
--cluster-join: hostname_conflict
в кластере есть fbagent с тем же именем хоста и другими адресами
дайте хостам разные имена
--cluster-join: this agent is in cluster … from goafts
fbagent уже в кластере goafts
уберите его из кластера goafts
Через RCM узел не ставится
в RCM нет выпуска для этой платформы
hqbirdrcm release list, импортируйте выпуск (1.3, «Вручную», шаг 5)
2. Конфигурация кластера
В этой главе вы задаёте, какие узлы есть в кластере и какой мастер отправляет
сегменты какой реплике. Потом настраиваете узлы и пользователей RCM.
Связи задаются одним из трёх способов:
Узлы установлены
Где задаются связи
Раздел
через goafts
в goafts: страница Clusters HQ Monitor или API goafts
2.2
через RCM, без goafts
в RCM: Настройки → Кластер, hqbirdrcm cluster или страница Clusters HQ Monitor
2.3
вручную
в RCM: Настройки → RCM и Настройки → Узлы
2.3
На узлах, установленных через goafts или через RCM, меняйте связи только в
описании кластера. fbagent перезаписывает node.json и rcm.json по
описанию кластера, и правка в Настройки → RCM или Настройки → Узлы
пропадёт.
2.1. Роли и схемы
У каждого узла одна роль: мастер или реплика. На одном экземпляре
Firebird могут работать два узла — мастер и реплика.
Поддерживаемые схемы:
Code
1 → 1 node-a (мастер) ──▶ node-b (реплика)
1 → N node-a ──▶ node-b
└─▶ node-c
N → 1 node-a ──┐
├─▶ node-b (одна реплика для нескольких мастеров)
node-x ──┘
Оба узла host-1: node-1m (мастер) + node-1r (реплика) ← один Firebird
на хосте host-2: node-2m (мастер) + node-2r (реплика) ← один Firebird
node-1m ──▶ node-2r, node-2m ──▶ node-1r
Связь всегда идёт от мастера к реплике. RCM связывает базу мастера с её
репликой по GUID базы, а не по имени узла.
Companion. Узел мастера и узел реплики на одном экземпляре Firebird —
компаньоны. Только для такой пары работает повышение реплики до мастера
(глава 8). В rcm.json пара отмечается одинаковым значением host.
API администратора goafts:POST /v1/admin/clusters и
PUT /v1/admin/clusters/{id}. В панели администратора goafts страницы
кластеров нет.
``
Шаги на странице Clusters
Введите New cluster id (строчные латинские буквы, цифры и -) и нажмите
Create.
Добавьте участников (Members). Для каждого укажите:
fbagent хоста;
роль: master, replica или rcm;
адреса хоста;
порт: для узла — 7051 (второй узел на том же хосте — например 7052),
для RCM — порт приёма статистики 7443.
Добавьте связи (Replication links) от мастера к реплике.
Нажмите Validate, затем Save.
Если другой администратор изменил кластер в то же время, страница попросит
перечитать кластер и повторить изменение.
Правила
fbagent может быть только в одном кластере.
На одном fbagent — не больше одного мастера, одной реплики и одного RCM.
В кластере ровно один RCM. fbagent хоста RCM ведёт центр сертификации
(CA) кластера.
Имя участника (member_id) — латиница, цифры, -. Имя, fbagent и роль
участника не меняются. Чтобы перенести участника на другой хост, создайте
нового участника с новым именем. Старое имя больше не используйте.
У каждой реплики должна быть связь с мастером.
Адрес узла goafts строит сам: https://<первый адрес>:<порт>.
HQbird 2.5/3.0: задайте для кластера дату replconf_valid_till
(ГГГГ-ММ-ДД) — до этой даты действует конфигурация плагина replconf.
Создание: POST /v1/admin/clusters (без участников), затем замена
документа целиком: PUT /v1/admin/clusters/{id}.
PUT требует заголовок If-Match: <revision> (ревизию дают GET и ETag).
Без заголовка — 428, со старой ревизией — 409, с ошибкой в документе —
422 со списком ошибок.
POST /v1/admin/clusters/{id}/validate проверяет документ без сохранения.
GET /v1/admin/clusters/{id}/status показывает состояние участников и сроки
сертификатов.
Что происходит после сохранения
fbagent каждого участника получает кластер. Не в кластере — проверка раз в
10 минут, в кластере — раз в 60 секунд.
Каждый fbagent создаёт ключ и отправляет запрос сертификата. fbagent хоста
RCM подписывает его. Свой сертификат RCM подписывает без запроса.
fbagent пишет в node.json: имя, роль, адрес, peers (из связей), адрес
RCM, пути сертификатов, данные Firebird и fbagent. В rcm.json: список
узлов (nodes) и пути сертификатов. Остальные поля файлов fbagent не
трогает.
fbagent ставит и запускает службы (глава 1).
Изменение кластера:
Что изменилось
Что делает fbagent
только peers работающего узла
передаёт узлу без перезапуска
другие поля узла
останавливает узел, пишет файл, запускает узел — в окне windows.transfer_window узла (не задано — сразу)
rcm.json
перезапускает RCM сразу
сертификаты или CA
перезапускает службу
участник удалён
останавливает и снимает службу; cluster-managed.json → cluster-removed.json, программа → *.removed; конфигурация, сертификаты и данные остаются
После удаления узла в общем replication.conf остаётся его область
# BEGIN managed-by:<имя> … # END …. Удалите её вручную и перезапустите
Firebird через RCM.
Одобрение сертификатов кластера
По умолчанию fbagent хоста RCM подписывает запросы сам (auto). Можно
включить ручное одобрение. Команды на хосте RCM:
Command
fbagent --cluster-ca-approval manual # или autofbagent --cluster-status # участие этого fbagent в кластере (JSON)fbagent --cluster-ca-approve <request_id>
В режиме manual новый участник или новый ключ ждут одобрения. Продление
сертификата с известным ключом подписывается само.
2.3. Связи через RCM
Кластер RCM (без goafts)
Если кластер создан установщиком HQbird или командой fbagent --cluster-init
(глава 1.3), описание кластера хранит RCM. Хосты проще всего добавить на
странице Настройки → Связать хосты (глава 1.3, «Связать хосты в RCM»):
RCM сам делает участников и связи. Правила те же, что в goafts (2.2, «Правила»), и ещё:
в RCM один кластер; участник rcm есть всегда и не удаляется;
не больше 3 мест (хостов с узлами мастера или реплики), иначе ошибка
seats_exceeded;
участника можно добавить только на fbagent, который подключился к RCM
(глава 1.3: «Связать хосты» или «Вручную», шаг 4).
Шаги на странице Настройки → Кластер:
В таблице Агенты нажмите Добавить участника в строке fbagent.
Укажите роль (master или replica), member_id, адреса и порт. Страница
предлагает имя <хост>-<роль> и свободный порт начиная с 7051. Адреса
fbagent — кнопки: нажмите, чтобы добавить адрес.
В разделе Связи нажмите Добавить связь от мастера к реплике.
Нажмите Проверить: RCM покажет ошибки и предупреждения.
Нажмите Сохранить. Страница покажет список изменений и спросит
подтверждение. Если участники удаляются, окно красное.
До сохранения изменения есть только на странице (метка «Не сохранено»). Если
кто-то сохранил кластер в то же время, страница предложит перечитать его.
Если изменились только поля RCM (ревизия, CA, поручения), страница сохранит
ваше изменение сама.
Другие разделы страницы:
Раздел
Что там
заголовок
имя кластера, ревизия, CA кластера и CA агентов; кнопка Вывести для старого CA
Токены подключения
создать токен для нового fbagent, отозвать неиспользованный
JSON документа
весь документ в текстовом поле; Проверить и Сохранить берут его
Ключи и CA
поручения: новый ключ участника (rekey), новый CA кластера (rotate_ca), новый CA агентов (rotate_agent_ca); при несохранённых изменениях недоступны
Состояние
ревизия, которую применил каждый участник, срок сертификата, служба, последняя ошибка
Из командной строки на хосте RCM:
Command
exportRCM_USER=rcmadmin RCM_PASSWORD='<пароль>'./hqbirdrcm cluster show > c.json # документ с ревизией# измените c.json./hqbirdrcm cluster validate -f c.json # проверить, ничего не сохраняя./hqbirdrcm cluster apply -f c.json # сохранить (If-Match = ревизия из файла)./hqbirdrcm cluster agents # подключённые fbagent и их участники./hqbirdrcm cluster status # что сообщили fbagent
Формат документа — как в 2.2, «Пример через API». apply со старой ревизией
получает 409: выполните show ещё раз. RCM хранит 20 последних ревизий в
rcm-data/cluster/history/.
HQ Monitor. Страница Clusters работает и с RCM. В конфигурации
HQ Monitor на хосте RCM задайте rcm_admin_url (http://127.0.0.1:7444),
rcm_admin_user (пользователь RCM) и rcm_admin_password_file (файл с его
паролем). В журнале аудита RCM видны оба пользователя: RCM и HQ Monitor.
После сохранения всё идёт как через goafts (2.2, «Что происходит после
сохранения»). nodes в rcm.json RCM перечитывает сам, без перезапуска.
Убрать fbagent из кластера: удалите его участников и сохраните, затем
нажмите Отозвать в таблице Агенты (или
./hqbirdrcm cluster revoke -agent <id>). Чтобы вернуть его, нужен новый
токен.
Ручная установка: добавить узел в RCM
Настройки → RCM, таблица Подключённые узлы.
Нажмите Добавить узел. Заполните node_id, url
(https://<адрес>:7051), роль, host (метка экземпляра Firebird),
server (только для группировки на экране).
Нажмите Проверить в строке узла: RCM проверит связь и права.
Нажмите Сохранить. RCM запишет rcm.json и сохранит старый файл как
rcm.json.<время UTC>.bak (последние 20).
Перезапустите RCM. До перезапуска работает старая конфигурация;
страница показывает, какие поля ждут перезапуска.
Настройки → RCM
Command
sudo systemctl restart hqbirdrcm
Можно и без интерфейса: отредактируйте rcm.json и перезапустите RCM.
Ручная установка: связать мастер и реплику
Связь нужно записать на обеих сторонах:
Настройки → Узлы, выберите узел мастера.
В разделе Пиры нажмите Добавить пир: node_id реплики, её url,
сжатие (zstd).
Нажмите Сохранить. RCM покажет список изменений и спросит
подтверждение. Изменение peers действует сразу.
Повторите для узла реплики: её пир — мастер.
Раздел «Пиры» узла мастера
Если пир не записан на одной из сторон, RCM не предложит этот узел реплики при
инициализации базы.
2.4. Настройки узла
Настройки → Узлы (Settings → Nodes) показывает настройки node.json,
которые узел разрешает менять из RCM. Сохраняются только изменённые поля,
после окна со списком изменений.
Настройки → Узлы: выбор узлаНастройки баз узла с пометками «после сканирования»
У каждой строки есть пометка, когда изменение начнёт действовать:
остальные лимиты, windows.transfer_window; страница показывает их в отдельной строке, пока узел не перезапущен
После сканирования
databases.*, exclude_filter; если replication.conf изменился, нужен перезапуск Firebird (глава 3.5)
Только для чтения (меняются в node.json на хосте узла): firebird (в том
числе пароль и auto_restart), rcm, tls, segments, адреса.
Главные настройки:
Настройка
По умолчанию
Значение
windows.restart_window
мастер 22:00-05:00, реплика — всегда
когда узел может перезапускать Firebird; мастер Firebird сам не перезапускает никогда
windows.transfer_window
23:00-05:00
окно, в котором инициализация идёт со скоростью reinit_window_mbps
limits.channel_a_mbps
50
скорость передачи сегментов, МБ/с (channel_a_burst_mbps — кратковременный пик, 200)
limits.reinit_window_mbps
100
скорость инициализации в окне передачи, МБ/с
limits.reinit_day_disk_fraction
0.5
доля измеренной скорости диска для инициализации вне окна
limits.retention_days
2
сколько дней хранить отправленные сегменты в архиве мастера
limits.free_space_floor_gb
1
минимум свободного места, ГБ; ниже реплика не принимает сегменты
limits.max_concurrent_reinits
1
сколько инициализаций узел ведёт одновременно
Подробно о скорости и хранении архива — в главах 5 и 7.
firebird.auto_restart (только в node.json) решает, может ли узел
реплики перезапускать Firebird сам:
Значение
Поведение
auto (по умолчанию)
может, если этот Firebird не обслуживает базы мастера
never
никогда
always
всегда, даже если на этом Firebird есть базы мастера
Через goafts. Окно windows.transfer_window узла fbagent использует и
как окно для перезапуска самой службы узла при изменении кластера. Если
окно в node.json не задано, fbagent перезапускает службу сразу.
2.5. Несколько HQbird на одном хосте
fbagent перезапускает службы из firebird.update.services своей
конфигурации. Пустой список — все службы HQbird на хосте. Оставьте в списке
только службу своего экземпляра. Узел не видит эту настройку и пишет в журнал
предупреждение fbagent_shared, если fbagent знает больше одного экземпляра.
2.6. Пароль SYSDBA
Узел подключается к Firebird с пользователем и паролем из firebird.user и
firebird.password в node.json. fbagent хранит свою копию пароля. Если вы
сменили пароль SYSDBA:
Исправьте firebird.password в node.jsonкаждого узла этого
экземпляра (мастер и реплика).
Исправьте пароль в конфигурации fbagent и перечитайте её (см. документацию
fbagent).
Перезапустите службы узлов.
Иначе страницы публикации и сверки в RCM покажут ошибку входа
(SQLSTATE 28000).
2.7. Пользователи и аудит RCM
Пользователи — в файле rcm-data/users.json (глава 1.5). Ролей нет.
Сессия живёт 12 часов после последнего действия.
После 10 неудачных входов за 5 минут вход для этого пользователя и адреса
временно блокируется. Успешный вход сбрасывает счётчик.
Журнал аудита — файл rcm-data/audit.jsonl: одна строка JSON на каждое
изменение, вход и выход. В интерфейсе журнала нет.
Страница Команды (Commands) показывает автора каждой команды.
2.8. Лицензия
Узел мастера раз в минуту читает лицензию fbagent своего хоста. Если лицензии
нет (пробный период кончился, лицензия истекла или неверна), узел
останавливает отправку сегментов всех баз мастера. Firebird и базы
работают, реплики перестают получать изменения.
Что видно в RCM:
мастер красный (NEEDS_ATTENTION), значок «no license: shipping stopped»;
кнопки Возобновить (Resume) нет: паузу снимает только лицензия;
у реплики: «not receiving since …: the master has no license»;
в таблице Узлы значок «no license»; в Настройки → Узлы — блок
лицензии fbagent;
оповещения license_paused и license_pause_archive_released;
инициализация запрещена (license_paused).
Блок лицензии fbagent в Настройки → Узлы
Установите лицензию в fbagent. Узел сам снимет паузу в течение минуты.
Архив для реплик мастер хранит limits.retention_days (по умолчанию 2 дня)
от начала паузы. Если лицензию установить позже, реплики придётся
инициализировать заново.
Кластер через RCM, без goafts. Плавающая лицензия без goafts перестаёт
действовать через online_check_days плюс льготные дни. На каждый fbagent
кластера нужна привязанная лицензия (fbagent --license-request, затем
fbagent --license-install, глава 1.3, «Лицензия»). После пробного периода
fbagent не ставит новый узел и RCM без функции cluster в лицензии;
обновления он не запрещает никогда. Для HQbird 2.5/3.0 дата
replconf_valid_till в RCM не может быть позже конца лицензии плюс льготные
дни у fbagent узлов (ошибка replconf_after_license).
2.9. Как проверить
Обзор: все узлы на месте, сгруппированы по серверам.
Обзор кластера
Настройки → Узлы: у мастера в Пиры есть реплика, у реплики — мастер.
Настройки → RCM: кнопка Проверить в строке каждого узла проходит.
Отчёт кластера одним файлом:
Command
./hqbirdrcm report -o report.json
2.10. Частые ошибки
Что видно
Причина
Что делать
Правка пиров в RCM пропала после перезапуска узла
узел установлен через goafts или через RCM
меняйте связи в описании кластера (2.2, 2.3)
seats_exceeded при сохранении кластера в RCM
узлы на четвёртом хосте
не больше 3 хостов с узлами
Настройки → RCM: rcm_config_read_only
кластер через RCM на Linux: rcm.json принадлежит fbagent
правьте rcm.json от пользователя fbagent и перезапустите RCM
Отозвать агента не работает (agent_has_members)
у fbagent есть участники
сначала удалите участников и сохраните
Узел реплики не предлагается при инициализации
пир не записан на одной из сторон
добавьте пир на обеих сторонах (2.3)
Изменение в Настройки → RCM не работает
RCM не перезапущен
перезапустите RCM
422 при сохранении кластера в goafts
ошибка в документе
исправьте по списку errors, проверьте через validate
409 при сохранении кластера
кластер изменил кто-то другой
перечитайте кластер и повторите
Новый участник goafts не получает сертификат
ручное одобрение на хосте RCM
fbagent --cluster-ca-approve <id>
Ошибка SQLSTATE 28000 на страницах публикации
сменили пароль SYSDBA
2.6
3. Добавление базы в мастер
В этой главе база мастера попадает под управление узла. Узел записывает её в
replication.conf и создаёт папки для сегментов. После перезапуска Firebird
база готова к репликации.
Создание реплики — следующие шаги (публикация, инициализация). Они описаны в
главах 4–6.
Названия кнопок даны по русскому интерфейсу RCM, в скобках — по английскому.
3.1. Как узел находит базы
Узел мастера ищет базы в одной папке — корне баз (databases.root). Что
попадёт под управление, решают правила:
Правило
Поле
По умолчанию
Папка с базами
root
не задана
Искать во вложенных папках
recursive
да
Маска включения
template
*.fdb
Маска исключения
exclude_mask
нет
Размер файла, МБ
min_size_mb, max_size_mb
без ограничений (0)
Таблицы для сверки данных
sync_tables
RDB$FIELDS
Список включения
include_paths
пусто (режим шаблона)
Список исключения
exclude_paths
пусто
Путь root — это путь на хосте узла, а не на хосте RCM. Узел применяет
сначала маску включения, затем маску исключения, затем размер.
Все правила хранятся в node.json узла. Узел применяет их при каждом
сканировании.
Режим шаблона и режим списка:
Режим шаблона (список включения пуст): узел берёт все файлы по маске,
кроме исключённых. Новый файл в папке узел возьмёт сам при следующем
сканировании.
Режим списка (список включения не пуст): узел берёт только файлы из
списка. Новый файл сам не попадёт под управление — его нужно добавить.
Выберите режим списка, если в папке лежат копии баз, тестовые базы или другие
файлы, которые реплицировать не нужно.
3.2. Перед началом: проверьте права
Пользователь, от которого работают Firebird и узел (firebird в Linux,
LocalSystem в Windows), должен иметь права на чтение и запись:
папки корня баз и файлов баз;
replication.conf и его папки (узел заменяет файл через временный файл);
папок сегментов <база>.ReplLog и <база>.LogArch (узел создаёт их сам).
RCM проверяет права перед регистрацией (preflight). Если проверка не прошла,
команда завершается с ошибкой preflight failed on <узел> и списком путей.
Откройте страницу регистрации узла мастера. Ссылка есть в двух местах:
Базы данных (Databases) → таблица Узлы → колонка действий →
Зарегистрировать (Enroll);
Обзор (Overview) → карточка узла мастера → Зарегистрировать базы
данных (Enroll databases).
У узла реплики этой страницы нет.
Форма показывает текущие правила узла (узел прислал их сам). Если узел
не отвечает, кнопки предпросмотра и регистрации выключены: без текущих
правил они сбросили бы списки включения и исключения.
Заполните или исправьте поля: Путь к папке на этом сервере,
рекурсивно, маски, Фильтр по размеру, Таблицы отслеживания
синхронизации.
Нажмите Предпросмотр (Preview). Узел покажет все файлы по маске
включения. Он ничего не меняет.
Проверьте список. У каждого файла есть флажок:
отмечен — файл будет под управлением;
отмечен, заблокирован, с пометкой уже под управлением — база уже
зарегистрирована;
заблокирован с причиной — файл исключён маской, размером или списком
исключения. Чтобы взять его, измените правило.
Отметьте нужные базы и нажмите Зарегистрировать выбранные (Enroll
selected). RCM спросит подтверждение и покажет число файлов.
Подтверждение регистрации
Что делает эта кнопка:
в режиме шаблона — файлы без флажка попадают в список исключения, файлы с
флажком убираются из него;
в режиме списка — файлы с флажком добавляются в список включения.
Кнопка добавляет базы к тем, что уже под управлением. Заблокированные
строки она не меняет.
7. Кнопка Зарегистрировать (Enroll) применяет форму без изменения
списков.
8. Дождитесь сообщения о завершении и числа добавленных баз. Если ответа долго
нет, смотрите результат на странице Команды (Commands).
Результат регистрации
Если после регистрации не нашлось ни одной базы, а у узла уже были базы, узел
отказывает (409) и возвращает старые правила. Так ошибка в пути не выключает
репликацию всех баз.
Внимание: команда отправляет только поля из своих параметров. Остальные
правила (маски, размеры, списки включения и исключения, sync_tables) узел
сбросит. Перед командой прочитайте текущие правила
(hqbirdrcm getconfig -node node-a) и передайте их в команде. Безопаснее
пользоваться страницей регистрации.
3.4. Что происходит после регистрации
Узел записывает правила в node.json.
Узел сканирует папку (scansync).
Для каждой найденной базы узел пишет блок в свою область
replication.conf (между строками # BEGIN managed-by:node-a role:master и
# END …) и создаёт папки <база>.ReplLog и <база>.LogArch. Текст вне
своей области узел не меняет.
Перед изменением узел сохраняет копию файла:
replication_YYYYMMDD_hhmmss_NNN.conf.
Если replication.conf изменился, базы получают состояние
PENDING_RESTART: Firebird прочитает новый файл только после
перезапуска. В таблице Узлы это видно в колонке Ожидает
перезапуска.
Колонка «Ожидает перезапуска» в таблице «Узлы»
Состояния новой базы:
Состояние
Группа в RCM
Значение
UNCONFIGURED
Pending
база найдена, конфигурация ещё не записана
PENDING_RESTART
Pending
конфигурация записана, нужен перезапуск Firebird
CONFIGURED
Pending
Firebird перезапущен, база готова к публикации и инициализации
3.5. Перезапуск Firebird мастера
Узел мастера никогда не перезапускает Firebird сам. RCM тоже. Перезапуск
мастера — решение оператора: при перезапуске разрываются все соединения со
всеми базами этого Firebird.
Выберите время с малой нагрузкой и нажмите одну из кнопок:
Перезапустить Firebird мастера — на странице Базы данных, в строке
мастера базы, которая ждёт перезапуска;
та же кнопка в окне Инициализировать (Initialize), глава 5;
Перезапустить Firebird — на странице базы.
RCM спросит подтверждение. В нём имя узла и предупреждение: Firebird
перезапустится сразу, без окна перезапуска, и все соединения будут разорваны.
Подтверждение перезапуска Firebird мастера
То же из командной строки
Command
hqbirdrcm restartfirebird -node node-a
Команда тоже перезапускает сразу, без окна перезапуска.
Как узел перезапускает Firebird:
Проверяет, что fbagent отвечает и управляет тем же экземпляром
(идентификатор, порт, имя службы из node.json). Если хоть одно значение не
совпадает, узел отказывает.
Просит fbagent перезапустить Firebird.
Ждёт, когда Firebird ответит на своём порту.
Переводит базы из PENDING_RESTART в CONFIGURED.
Несколько HQbird на одном хосте. fbagent перезапускает службы из
firebird.update.services своей конфигурации. Пустой список — это все
службы HQbird на хосте. Если на хосте два экземпляра HQbird, оставьте в
списке только службу своего экземпляра. Иначе перезапуск одного узла
остановит и другой экземпляр.
На Windows. Если replication.log вырос до log_portion_mb или больше,
перезапуск идёт так: остановка Firebird → архивирование журнала → запуск.
3.6. База, которую уже реплицируют вручную
Если для базы репликация уже настроена вручную (свой блок в
replication.conf, публикация включена, сегменты идут), её можно взять под
управление без новой инициализации реплики. Для этого есть режим
detect_existing (только для мастера).
В ответе taken_over — базы, которые будут перенесены. Добавьте -verbose,
чтобы увидеть пропущенные базы с причиной.
Если список правильный, выполните команду без -dry-run.
Узел переносит блок, только если:
папки сегментов называются точно <база>.ReplLog и <база>.LogArch;
в архиве уже есть сегменты;
публикация в базе включена.
Блок с другими путями узел не переносит и показывает как «found but
unsupported».
После переноса базы получают PENDING_RESTART, хотя настройки репликации не
меняются: меняется только место блока в файле. Перезапустите Firebird в окно
обслуживания.
3.7. Как проверить
Базы данных: база видна в строке узла мастера, состояние CONFIGURED
(после перезапуска).
Рядом с базой может быть значок publication OFF: публикация ещё не
включена. Это нормально, публикация — следующий шаг (глава 6).
Новая база в строке мастера
На хосте узла: блок базы есть в replication.conf внутри области
managed-by:node-a, рядом с базой есть папки .ReplLog и .LogArch.
3.8. Убрать базу из управления
Обычный способ — кнопка. На странице Базы данных отметьте базы,
выберите массовое действие Убрать из управления (Remove from management) и
нажмите Применить к выбранным. RCM:
добавляет файлы в список исключения узла;
сканирует папку один раз: блоки баз уходят из replication.conf;
удаляет записи баз в узле.
Файлы баз и папки сегментов остаются на диске. Firebird не перезапускается.
Firebird продолжает писать сегменты базы до своего следующего перезапуска;
RCM скажет, если перезапуск нужен.
RCM откажет (has_replicas) для базы мастера, у которой есть живая реплика:
иначе реплика тихо остановится. Сначала сделайте реплику обычной базой или
уберите её (глава 8).
Не удаляйте блок базы из replication.conf вручную: при следующем
сканировании узел запишет его снова.
Если файл базы пропал или его исключило правило. Тогда база получает
состояние ORPHANED (группа Orphaned). Узел сохраняет её запись и архив
сегментов: пропавшая база — чаще ошибка, чем решение. Если файл вернётся, база
снова работает, оповещение снимается. Чтобы удалить такую базу окончательно,
выполните два шага в этом порядке:
После forgetdatabase команда cleanuparchive уже не найдёт базу. Обе
команды работают только для базы в состоянии ORPHANED и не трогают файл
базы.
Внимание. После перевода реплики в мастер (глава 8) не запускайте
cleanuparchive -orphaned для старой записи: новый мастер использует ту же
папку .LogArch, и команда удалит его рабочий архив.
3.9. Смена корня баз
Регистрация с другим путём разрешена. Узел:
добавляет базы из новой папки;
переводит базы старой папки, которых нет в новой, в ORPHANED (оповещение
orphaned_database) и сохраняет их архивы.
Если вы ошиблись папкой, зарегистрируйте правильную папку ещё раз. База с тем
же полным путём продолжит работу под тем же db_id. База по другому пути —
новая база (новый db_id); её реплику нужно инициализировать заново.
3.10. Частые ошибки
Что видно
Причина
Что делать
preflight failed on node-a
нет прав на папки
исправьте права, повторите (3.2)
409 scan_would_empty_region
в новой папке нет баз, а у узла они были
проверьте путь и маску
Предпросмотр пустой
маска не подходит или папка не та
проверьте путь, маску, «рекурсивно»
Кнопки выключены, «Не удалось прочитать конфигурацию узла»
узел не отвечает
проверьте службу узла и сеть (глава 1)
База долго в PENDING_RESTART
мастер не перезапускает Firebird сам
перезапустите Firebird (3.5)
Перезапуск отклонён из-за fbagent
fbagent не запущен или его данные не совпадают с node.json
глава 1, проверка fbagent
Новый файл не появился
узел в режиме списка
добавьте файл через «Зарегистрировать выбранные»
4. Как сделать базу репликой: этапы и место на диске
В этой главе — весь путь базы от мастера до работающей реплики и расчёт места
на диске. Сама инициализация подробно описана в главе 5.
4.1. Главное правило
База на реплике появляется только через инициализацию с мастера (reinit):
узел мастера сам передаёт копию через nbackup.
Не делайте копию вручную:
gbak создаёт новый GUID базы и сбрасывает номер сегмента. Связь мастер —
реплика ломается.
Копия файла работающей базы не согласована, а RCM увидит две базы с одним
GUID (duplicate_guid) и запретит инициализацию.
Уже работающую реплику, настроенную вручную, можно взять под управление без
новой копии — см. 4.6.
4.2. Этапы
№
Этап
Где
Состояние базы мастера после этапа
1
Регистрация базы на мастере
глава 3.3
PENDING_RESTART
2
Перезапуск Firebird мастера
глава 3.5
CONFIGURED
3
Синхронизация публикации
глава 6
CONFIGURED, публикация ON
4
Подготовка реплики: папка, права, версия Firebird
4.3
—
5
Проверка места на мастере и на реплике
4.4
—
6
Инициализация
глава 5
SEEDING → IN_SYNC
7
Перезапуск Firebird реплики (если нужен)
глава 5.6
реплика начинает применять сегменты
8
Проверка данных
глава 5.10
—
Этап 3 обязателен для Firebird 4/5. Без публикации Firebird мастера не пишет
изменения таблиц в сегменты, и реплика тихо отстаёт от мастера. На странице
Базы данных такая база отмечена значком публикация ВЫКЛ.. Нажмите
Синхронизировать публикацию (Sync publication) до инициализации.
HQbird 2.5/3.0. Публикаций нет, этап 3 пропускается. Набор таблиц задают
фильтры плагина replconf (глава 6).
Состояния базы:
Состояние
Группа в RCM
Значение
CONFIGURED
Pending
Firebird прочитал настройки, реплики ещё нет
PUBLISHING
Pending
идёт синхронизация публикации
SEEDING
Pending
идёт инициализация
IN_SYNC
Ok
реплика получила все сегменты
LAGGING
Pending
реплика отстаёт, сегменты в очереди
NEEDS_REINIT
Error
реплику нужно инициализировать заново
FAILED
Error
последняя инициализация не удалась
4.3. Подготовка реплики
Папка баз реплики
Узел реплики кладёт каждую базу в свою папку databases.root по пути:
Code
<databases.root>/<имя узла мастера>/<путь базы относительно корня мастера>
Пример: мастер node-a с корнем /databases/master и базой
/databases/master/sales/employee.fdb. На реплике node-b с корнем
/databases/replica база будет здесь:
Code
/databases/replica/node-a/sales/employee.fdb
Так базы с одинаковыми именами от разных мастеров не мешают друг другу.
Папку корня никто не создаёт сам — ни установщик, ни goafts, ни узел при
запуске. Создайте её одним из способов:
в окне Инициализировать (Initialize): поле Папка реплики, кнопка
Создать папку. Если вы укажете другую папку, RCM перед инициализацией
запишет её в databases.root узла реплики;
Бит setgid (2770) нужен, чтобы все файлы внутри получали группу Firebird.
Поменять корень реплики можно, только пока на ней нет баз: иначе старые базы
окажутся вне сканирования. Чтобы положить одну базу в другое место, используйте
Перенести (Move) на странице базы.
Права
Узел реплики и Firebird должны писать в корень баз. Узел проверяет, что
размещённые файлы получат группу папки. Если не может — отказ
ownership_unfixable с текстом, как исправить (обычно служба узла работает с
Group=root).
Версия Firebird
Главная версия Firebird на реплике должна совпадать с мастером (5.0 → 5.0,
4.0 → 4.0). Иначе реплика откажет до передачи данных:
incompatible_engine.
Связь
Узел реплики должен быть пиром мастера, а мастер — пиром реплики (глава 2).
Иначе RCM не предложит этот узел в окне Инициализировать.
4.4. Сколько нужно места
Коротко
Где
Что
Сколько
Мастер, том базы
свободно перед инициализацией
≥ 105 % размера базы
Реплика, том папки базы
свободно перед инициализацией
≥ 105 % размера базы (плюс старый файл, если реплика уже была)
Мастер, <база>.ReplLog
рабочие сегменты Firebird
до 64 сегментов × размер сегмента (по умолчанию 16 МБ) ≈ 1 ГБ на базу
Мастер, <база>.LogArch
архив сегментов для реплик
изменения за retention_days (по умолчанию 2 дня) + то, что реплики ещё не подтвердили
Реплика, <база>.Incoming
очередь сегментов на применение
до 256 сегментов × 16 МБ ≈ 4 ГБ на базу в худшем случае
Реплика, весь том
запас
не меньше free_space_floor_gb (по умолчанию 1 ГБ)
Проверка места перед инициализацией
Инициализация проверяет место дважды и только до блокировки базы:
RCM — по последней статистике узлов, до отправки команды. Если места
явно мало, RCM сразу отвечает ошибкой 507.
Узел мастера — живой замер на своём томе, затем запрос к реплике, чтобы
она замерила свой. Не хватает хотя бы на одной стороне — инициализация
завершается на шаге SPACE CHECK с ошибкой
insufficient disk space on master или … on replica.
Требование на обеих сторонах — 105 % размера базы мастера.
force (принудительно) пропускает только проверку в RCM. Проверку узла
обойти нельзя: она защищает узел от переполнения диска посреди копирования.
Почему столько
Мастер. Во время копирования база заблокирована nbackup -L. Все
изменения пишутся в файл <база>.delta рядом с базой. Размер .delta зависит
от нагрузки на запись за время копирования. При большой нагрузке и медленной
передаче он может вырасти сильно — следите за местом во время первой
инициализации.
Реплика. Копия пишется сразу в файл <база>.hqcluster-part рядом с
местом базы. Узел заранее резервирует полный размер. Затем файл проверяется,
исправляется (nbackup -FIXUP -SEQUENCE) и переименовывается на место. Второй
копии не нужно — нужен размер базы один раз, на томе базы.
Если реплика уже была (повторная инициализация), старый файл лежит на
диске до последнего шага. Значит, на томе одновременно нужны старый файл и
новая копия. Свободное место считается без старого файла — поэтому требование
то же: 105 % от размера базы свободно.
Архив мастера (.LogArch). Узел хранит отправленные сегменты
retention_days дней, чтобы реплика могла их запросить повторно. Сегменты,
которые реплика ещё не применила, хранятся дольше. Если места мало, узел
чистит архив по ступеням:
сегменты, которые применили все реплики, старше retention_days;
применённые сегменты новее (при нехватке места);
неприменённые сегменты — только в последнюю очередь. Тогда реплика
теряет нужные ей сегменты и получает NEEDS_REINIT.
Если реплика долго недоступна, архив растёт. Объём = изменения базы за время
простоя.
Пример расчёта
База 100 ГБ. Нагрузка — 5 ГБ сегментов в сутки. Инициализация идёт
ночью, копирование занимает 2 часа, за это время в .delta попадает около
2 ГБ.
Где
Расчёт
Итого свободно
Мастер, том базы
105 ГБ проверки (в них входит рост .delta) + .ReplLog 1 ГБ + .LogArch 2 дня × 5 ГБ = 10 ГБ
≥ 116 ГБ
Реплика, новая база
105 ГБ + .Incoming до 4 ГБ + запас 1 ГБ
≥ 110 ГБ
Реплика, повторная инициализация
старый файл 100 ГБ уже на диске + 110 ГБ свободно
том ≥ 210 ГБ
Добавьте запас на рост базы и на простой реплики (архив мастера растёт на
5 ГБ в сутки простоя).
Сегменты на отдельном томе
Папки .ReplLog, .LogArch и .Incoming по умолчанию лежат рядом с базой.
Их можно вынести на другой том: параметр segments.storage в node.json
(с mirror_hierarchy: true узел повторяет структуру папок баз). Тогда
архив не отнимает место у баз. Проверка 105 % при этом остаётся на томе базы.
Где смотреть место
Базы данных → Узлы и Обзор: значок свободного места тома
databases.root. Жёлтый — меньше 20 %, красный — меньше 10 %.
Страница «Базы данных»: колонка «Диск» в таблице «Узлы»
Отчёт кластера: hqbirdrcm report.
4.5. Несколько реплик одной базы
Вторая и следующие реплики делаются так же: Инициализировать в строке
мастера, выбор свободного узла реплики.
Пока идёт инициализация новой реплики, мастер не передаёт эту базу и
уже работающим репликам. Они догонят мастер после конца инициализации. Окно
подтверждения говорит об этом.
Одна база — одна инициализация за раз, даже на разные реплики.
Место на мастере проверяется для каждой инициализации отдельно.
База мастера с двумя репликами
4.6. Реплика, настроенная вручную
Если реплика уже работает по replication.conf, написанному вручную, её можно
взять под управление и не копировать базу заново:
Мастер: зарегистрируйте базы с detect_existing (глава 3.6).
Реплика:Базы данных → узел реплики → Подхватить (Take
over), или hqbirdrcm takeover-replica. RCM найдёт блоки реплик, сопоставит файлы с
базами мастера по GUID и покажет для каждой: in_sync, resumable или
needs_reinit.
Подтвердите строки. Узел перенесёт блоки в свою область replication.conf.
Перезапустите Firebird реплики, чтобы он прочитал перенесённые блоки.
Инициализируйте только строки needs_reinit: архив мастера уже не
содержит сегментов, нужных этим репликам.
4.7. Частые ошибки
Что видно
Причина
Что делать
insufficient disk space on master / on replica
мало места (4.4)
освободите место, повторите
507 от RCM сразу
по статистике места явно мало
то же
incompatible_engine
разные главные версии Firebird
обновите Firebird реплики
Папки нет на узле реплики
корень не создан
Создать папку в окне инициализации (4.3)
ownership_unfixable
служба узла с чужой группой
исправьте группу службы по тексту ошибки
duplicate_guid
две базы с одним GUID (копия файла)
уберите копию или дайте ей новый GUID (nbackup -F)
Узла реплики нет в списке Инициализировать
нет связи в пирах
глава 2
Реплика IN_SYNC, но данные расходятся
публикация была выключена
синхронизируйте публикацию, затем повторите инициализацию
5. Инициализация (reinit)
Инициализация — передача копии базы мастера на реплику. Первая передача
называется инициализацией (кнопка Инициализировать), повторная —
реинициализацией (кнопка Реинициализировать). Механизм один и тот же.
Перед началом выполните этапы 1–5 из главы 4:
база зарегистрирована, Firebird мастера перезапущен, публикация включена,
папка реплики есть, места хватает.
5.1. Как запустить
Окно «Реинициализировать базу данных?»
Откройте Базы данных (Databases).
В строке базы мастера нажмите Инициализировать (Initialize). Для уже
существующей пары — Реинициализировать (Reinit) в раскрытой карточке
мастера.
В окне:
выберите узел реплики (в списке только свободные узлы-пиры этого
мастера);
проверьте Папку реплики; если папки нет — Создать папку;
выберите Способ реинита: Плавный (рекомендуется) или Обычный
(5.4);
если база мастера ещё ждёт перезапуска Firebird, окно скажет об этом и
покажет кнопку Перезапустить Firebird мастера. Без перезапуска база
не реплицируется.
Подтвердите. RCM напишет, что база будет заблокирована на мастере и
скопирована на реплику.
Ход инициализации виден в раскрытой карточке мастера на странице Базы
данных: шаги и проценты.
Шаги инициализации в строке мастера
Каждая команда RCM (инициализация, перезапуск Firebird, синхронизация
публикации) записывается на странице Команды (Commands) с результатом.
Страница «Команды»
То же из командной строки
Command
# одна базаhqbirdrcm reinit -node node-a -db <db_id> -to node-b
# все базы мастераhqbirdrcm reinit -node node-a -all -to node-b
Параметры: -mode smooth|standard (по умолчанию smooth), -hold=false
(не удерживать архив при длинных транзакциях), -allow-restart (5.6),
-force (5.9).
-all пробует все базы и собирает ошибки, а не останавливается на первой.
5.2. Шаги
№
Шаг (в RCM)
Что происходит
1
SPACE CHECK
проверка места на мастере и на реплике (глава 4.4); реплика заранее проверяет, что может принять файл
2
LOCKING
nbackup -L: файл базы мастера заморожен, изменения идут в <база>.delta
nbackup -N сразу после передачи: изменения из .delta возвращаются в базу
5
SEEDING
на реплике: проверка контрольной суммы файла, nbackup -FIXUP -SEQUENCE, установка файла, gfix -replica, запись блока в replication.conf
6
RESTARTING REPLICA
перезапуск Firebird реплики, если он нужен (5.6)
После шага 6 база получает состояние IN_SYNC. Мастер продолжает отправку
сегментов с того места, где заканчивается копия.
Что важно знать:
Мастер работает всё время. Пользователи пишут в базу, изменения идут в
.delta. Блокировка снимается сразу после передачи.
Транзакции, которые совпали с блокировкой, не теряются. Узел находит
транзакции, открытые в момент nbackup -L, и реплика повторяет их из
сегментов.
Передача продолжается после обрыва. Если связь или узел реплики
перезапустились, мастер продолжит с последней полученной части. Недоделанная
передача хранится на реплике 24 часа (reinit_partial_keep_hours).
При ошибке узел снимает блокировку, удаляет недоделанный файл на
реплике и ставит базе FAILED. Следующая попытка начинается с известного
состояния.
Только nbackup. gbak не используется: он меняет GUID базы.
5.3. Влияние на работу
Что
Влияние
Пользователи мастера
работают; во время копирования растёт .delta, после -N изменения переносятся в базу
Другие реплики этой базы
не получают сегменты этой базы, пока идёт инициализация; потом догоняют
Другие базы мастера
не затронуты
Firebird реплики, новая база
не останавливается; перезапуск по 5.6
Firebird реплики, повторная инициализация
останавливается на время замены файла: все базы этого Firebird на секунды недоступны
Сеть и диск
нагрузка по лимитам скорости (5.5)
На Windows. Файл, открытый Firebird, заменить нельзя. При повторной
инициализации узел останавливает Firebird реплики через fbagent, ставит
файл и запускает Firebird снова. На Linux Firebird тоже останавливается до
замены: иначе он продолжит работать со старым удалённым файлом.
5.4. Плавный и обычный способ
Плавный (smooth, по умолчанию). Перед блокировкой узел ищет длинные
транзакции: пишущие транзакции пользователей, которые начались раньше самого
старого сегмента в архиве мастера. После инициализации реплика не сможет их
повторить и остановится на первом их изменении («Transaction … is not found»).
Транзакции без изменений не учитываются.
Если такие транзакции есть, инициализация не начинается: RCM пишет Плавный
реинит ждёт длинные транзакции и даёт ссылку Открыть список.
Страница «Длинные транзакции»: длинных транзакций нет
На странице Длинные транзакции:
сводка: сколько транзакций и соединений, самый старый сегмент;
Топ-5 соединений с самыми старыми транзакциями: пользователь, клиент,
начало, возраст, изменения, текущий запрос;
Удерживать сегменты / Снять удержание — пока удержание включено,
архив мастера не чистится и история не сокращается;
Отключить выбранные и повторить реинит — отключает соединения (их
транзакции откатываются) и сразу запускает плавный реинит;
Повторить реинит, Проверить снова.
Удержание включается само при отказе из-за длинных транзакций. Оно снимается
после успешной инициализации, вручную или когда архив дорастёт до
reinit_hold_max_segments (по умолчанию 1000 сегментов, оповещение
retention_hold_released).
Обычный (standard) блокирует базу сразу, без проверки. Используйте его,
только если вы знаете, что длинных пишущих транзакций нет.
Транзакции старше публикации. Firebird не пишет в сегменты транзакцию,
которая началась до включения публикации. Если публикацию включил узел,
инициализация ждёт (6 попыток через 10 секунд), пока такие транзакции не
закончатся, иначе завершается ошибкой reinit_pre_publication_transactions с
их списком. После синхронизации публикации, которая добавила таблицы,
переподключите приложения, затем запускайте инициализацию.
5.5. Скорость
Когда
Скорость
Настройка
В окне передачи windows.transfer_window (по умолчанию 23:00-05:00)
постоянная
limits.reinit_window_mbps, по умолчанию 100 МБ/с
Вне окна
доля измеренной скорости диска
limits.reinit_day_disk_fraction, по умолчанию 0.5
Узел пересчитывает режим каждые 30 секунд: инициализация, начатая днём,
ускорится ночью сама.
Скорость диска узел измеряет тестом. Повторить тест на хосте мастера:
Время инициализации ≈ размер базы ÷ скорость. Пример: 100 ГБ при 100 МБ/с —
около 17 минут чистой передачи; на практике ограничивает сеть или диск.
5.6. Перезапуск Firebird реплики
Новая база на реплике. Файл ставится без остановки Firebird. Firebird
прочитает новый блок replication.conf только после перезапуска. До него
реплика ничего не применяет. Шаг RESTARTING REPLICA показывает ожидание:
Надпись
Что значит
ждёт перезапуска Firebird на реплике, он запланирован на …
узел сам перезапустит Firebird после последней инициализации (reinit_restart_delay_sec), когда другие инициализации закончатся
… окно перезапуска закрыто, следующее откроется …
ждёт окна restart_window реплики
… последняя попытка не удалась, следующая в …
повторит позже
реплике нельзя перезапускать Firebird самой: перезапустите его вручную
auto_restart: never, или этот Firebird обслуживает и базы мастера
Узел перезапускает Firebird один раз после серии инициализаций, а не после
каждой базы.
Чтобы перезапустить вручную, нажмите Перезапустить Firebird реплики.
Ожидание заканчивается после любого успешного перезапуска Firebird или когда
реплика применила сегмент новее копии.
Повторная инициализация на Firebird, который обслуживает и базы мастера.
Такой Firebird узел сам не останавливает и отказывает:
restart_not_allowed. Запустите инициализацию снова и отметьте Разрешить
<узел> остановить Firebird для этого reinit (-allow-restart в командной
строке) — в то время, когда соединения этого Firebird можно разорвать, в том
числе к его базам мастера. Запускайте такие инициализации по одной на хост.
5.7. Очередь и одновременные инициализации
Одна база — одна инициализация за раз (даже на разные реплики). Кнопка
Инициализировать выключена, пока идёт инициализация этой базы.
Узел мастера ведёт limits.max_concurrent_reinits инициализаций разных баз
одновременно (по умолчанию 1). Остальные ждут в очереди; ответ содержит
номер в очереди.
Не запускайте свой nbackup -L (или ALTER DATABASE BEGIN BACKUP) на базе
во время её инициализации и не запускайте инициализацию во время такого
бэкапа: у базы может быть только одна блокировка. Инициализация проверяет
это и отказывает с nbackup backup lock already active.
Очередь и текущие передачи видны на странице Передача (Transfer).
Страница «Передача / очереди»
- Если после сбоя остался файл `<база>.delta`, убедитесь, что бэкап не идёт,
и выполните `nbackup -N <база>`. Не удаляйте `.delta` вручную.
5.8. Автоматическая реинициализация
RCM может сам реинициализировать базу в состоянии NEEDS_REINIT, только в
заданное окно. По умолчанию выключено.
Когда база получает NEEDS_REINIT:
Причина
Где видно
повторяющаяся неисправимая ошибка применения (нарушение PK, UNIQUE, FK) — 3 раза подряд
Окно: для базы → для узла → общее. "always" — в любое время.
Окна считаются по часам хоста RCM.
max_concurrent — сколько инициализаций (ручных и автоматических) может
идти в кластере, чтобы RCM запустил ещё одну автоматическую.
Автоматическая инициализация проходит те же проверки места и GUID, что и
ручная. Автор команды — system:autoreinit.
После изменения перезапустите RCM.
Отложить (Snooze) в карточке мастера отключает автоматическую
инициализацию одной базы на 1 час, 4 часа, 24 часа или до отмены. Ручная
инициализация остаётся доступной.
5.9. Ошибки
Ошибка
Причина
Что делать
insufficient disk space on master / on replica, 507
уберите копию; если при повышении до мастера шаг NEW GUID пропущен — -force (глава 8.4)
license_paused
у fbagent мастера нет лицензии
глава 2.8
409 orphaned
база вне сканирования мастера
глава 3.8
incompatible_engine
разные главные версии Firebird
глава 4.3
target_not_replica
на месте реплики рабочая база (сделана обычной)
см. ниже
restart_not_allowed
Firebird реплики обслуживает и базы мастера
5.6, флажок «Разрешить … остановить Firebird»
fbagent_required
на реплике нет fbagent
глава 1
nbackup backup lock already active
идёт бэкап nbackup
5.7
reinit already in progress for this database
инициализация этой базы уже идёт
дождитесь конца
target_not_replica. На месте копии лежит рабочая база: её сделали
обычной (есть файл <база>.hqcluster-normal.json) или она не в режиме
реплики. Узел не перезаписывает рабочую базу. Если её нужно заменить, запрос к API узла с
overwrite_non_replica: true (в RCM кнопки нет) заменит файл и сохранит старый как
<база>.pre-reinit-<время UTC>.fdb.
5.10. Как проверить результат
Базы данных: пара мастер — реплика в группе Ok, состояние
IN_SYNC.
Проверить (Verify) в карточке мастера: узлы считают строки таблиц из
sync_tables (глава 3.1) на мастере и на реплике и сравнивают.
Проверяйте в тихое время: при активной записи числа могут отличаться.
Периодическая проверка (по желанию): страница Проверка данных (Data
check), включить для всех узлов, затем перезапустить службы узлов.
Узлы сами сравнивают число строк, когда мастер и реплика стоят на одном
сегменте. Расхождение — оповещение data_mismatch; тогда запустите
Проверить.
Таблица, которую оператор убрал из публикации, показывается как «not
published», а не как расхождение.
6. Настройка публикации
Публикация говорит Firebird мастера, изменения каких таблиц писать в сегменты.
Без неё реплика ничего не получает.
6.1. Что такое публикация
В Firebird 4 и 5 таблицы для репликации задаёт публикация RDB$DEFAULT:
Публикация включена — в RDB$PUBLICATIONS у неё RDB$ACTIVE_FLAG = 1
(команда ALTER DATABASE ENABLE PUBLICATION).
Опубликованные таблицы — список в RDB$PUBLICATION_TABLES.
Firebird пишет в сегменты изменения только опубликованных таблиц и только
при включённой публикации. Регистрация базы (глава 3) публикацию не
включает. Её включает Синхронизировать публикацию (6.2).
Узел мастера проверяет публикацию каждый час
(limits.publication_check_interval_sec, по умолчанию 3600). Если она
выключена, узел проверяет её каждые 2 минуты.
На странице Базы данных у базы мастера есть значок:
Значок
Значение
публикация вкл.
публикация включена
публикация ВЫКЛ.
Firebird ничего не пишет в сегменты, реплики не получают изменений
публикация неизвестна
узел не смог прочитать состояние
Фильтр Публикация выкл. показывает базы с выключенной или неизвестной
публикацией.
Если у базы с выключенной публикацией уже есть реплика, мастер выдаёт
оповещение master_publication_off.
6.2. Синхронизировать публикацию
Строка мастера: публикация выключена
Где нажать:
в строке базы мастера на странице Базы данных. При выключенной
публикации кнопка стоит рядом со значком;
на странице базы;
для нескольких баз: отметьте строки, в списке Действие выберите
Синхронизировать публикацию. RCM отправит отдельную команду для каждой
базы.
Подтверждение синхронизации публикации
Что делает узел (одна транзакция):
Включает публикацию. Если оператор выключил её сам (6.4), не включает.
Добавляет в публикацию все таблицы с ключом, которых там ещё нет.
Убирает из публикации таблицы без ключа и таблицы, которые оператор
исключил (6.3).
Выключает автоматическое добавление новых таблиц (EXCLUDE ALL FROM
PUBLICATION, затем добавляет нужные таблицы). Состав публикации задаёт
только узел.
Строка мастера после синхронизации: публикация включена
Таблица с ключом — пользовательская постоянная таблица, у которой есть
первичный ключ или активный уникальный индекс. Системные и временные
таблицы не публикуются.
Синхронизация убирает из публикации и таблицы без ключа, которые DBA добавил
вручную.
Если состав уже правильный, узел ничего не меняет.
Когда узел отказывает:
Код
Причина
no_publications
HQbird 2.5/3.0 (6.6)
not_master
узел не мастер
reinit_in_progress
идёт инициализация этой базы
orphaned, database_failed, file_missing
база вне сканирования, в ошибке или без файла
Все базы узла сразу — только из командной строки. На странице Команды
результат показан по каждой базе: готово, пропущено или ошибка.
Базы в состоянии FAILED или SEEDING и базы без файла пропускаются.
То же из командной строки
Command
hqbirdrcm setpublication -node node-a -db <db_id> # одна базаhqbirdrcm setpublication -node node-a # все базы узла
Команда ждёт до 5 минут и печатает строку на каждую базу. При ошибке код
выхода 1. -nowait — не ждать результата.
6.3. Таблицы публикации
Страница «Таблицы публикации»
Откройте Таблицы публикации в строке базы мастера.
Страница показывает:
состояние публикации (вкл./выкл., выключена оператором) и счётчики;
каждую таблицу: имя, ключ и состояние.
Состояние
Значение
опубликована
изменения идут в сегменты
ещё не опубликована
таблица с ключом, будет добавлена при синхронизации
исключена
оператор убрал её из публикации
нет ключа
опубликовать нельзя
В колонке ключа — первичный ключ, а если его нет — уникальный индекс с
наименьшим числом полей.
Почему таблицу без ключа нельзя опубликовать. Реплика ищет строку для
UPDATE и DELETE по ключу. Без ключа она не найдёт строку. Добавьте
первичный ключ или уникальный индекс, затем синхронизируйте публикацию.
Исключить из публикации / Вернуть в публикацию:
Отметьте таблицы.
Нажмите Исключить из публикации или Вернуть в публикацию.
Узел сохраняет список и сразу синхронизирует публикацию.
Подтверждение «Исключить из публикации»
Список исключённых таблиц хранится на узле мастера. Синхронизация его
не меняет. При повышении реплики до мастера (глава 8) список переходит на
новый мастер.
Проверить (глава 5.10) показывает исключённую таблицу как «not published»,
а не как расхождение.
6.4. Включить и выключить публикацию
На странице Таблицы публикации: Выключить публикацию /
Включить публикацию.
Выключение — это выбор оператора. Синхронизация публикацию обратно не
включает.
Изменения, сделанные, пока публикация выключена (или пока таблица
исключена), не отправляются на реплику и после включения тоже.
После включения нажмите Проверить (глава 5.10). Если данные
расходятся — реинициализируйте реплику (глава 5).
6.5. Новая таблица
Новая таблица не попадает в публикацию сама: узел выключает
автоматическое добавление.
После DDL:
Создайте у таблицы первичный ключ или уникальный индекс.
Нажмите Синхронизировать публикацию.
Попросите приложения переподключиться, если нужна реинициализация. Firebird
не пишет в сегменты транзакции, которые начались до включения публикации;
COMMIT RETAINING держит такую транзакцию открытой. Инициализация ждёт
такие транзакции и затем отказывает с reinit_pre_publication_transactions
(глава 5.4).
Новая таблица в состоянии «ещё не опубликована»
Строки, записанные в новую таблицу до синхронизации, на реплику не попадут.
Если они есть, проверьте данные и при необходимости реинициализируйте реплику.
6.6. HQbird 2.5 и 3.0
В HQbird 2.5 и 3.0 публикаций нет. Firebird пишет сегменты, если в файле
плагина replconf есть блок мастера. Кнопки публикации на таких узлах скрыты,
API отвечает no_publications.
Набор таблиц задают параметры движка:
Параметр
Значение
include_filter
какие таблицы реплицировать: имена или шаблоны через запятую; пусто — все
exclude_filter
какие таблицы не реплицировать
Параметры меняются в Настройки → Параметры репликации (глава 7.1). Страница
Таблицы публикации показывает их только для чтения, со ссылкой Изменить
в настройках движка. Firebird читает новые значения после перезапуска.
Таблицы публикации на HQbird 3.0: фильтры движка
Плагин replconf. Узел пишет свой файл replconf.hqcluster.hqbird в папке
Firebird. Firebird читает его, только когда replconf.properties указывает на
него. Плагин нужно активировать один раз:
Настройки → Узлы, блок Плагин репликации (HQbird 2.5 / 3.0). Блок
показывает, куда указывает replconf.properties, и проблемы, которые нашёл
узел.
Плагин не активирован: replconf.properties указывает на файл HQbird DataGuard
Активировать… Окно перечисляет, что сделает узел: установит плагин,
направит replconf.properties на файл узла, перенесёт записи старого файла.
Выберите, когда: Только в окне перезапуска узла или Сейчас, не
учитывая окно перезапуска.
Окно активации плагина
После перезапуска Firebird поле Активировано показывает «да: движок
читает файл узла».
Плагин активирован
Активация перезапускает Firebird и затрагивает все базы этого Firebird.
Выполняйте её в тихое время.
7. Другие опции репликации
7.1. Параметры репликации
Настройки → Параметры репликации, форма мастера
Страница Настройки → Параметры репликации меняет ключи
replication.conf для выбранных баз или для узла в целом.
Добавить мастер и реплики — выберите базы. RCM группирует их по версии
Firebird и роли: своя форма для мастеров и для реплик.
Для каждого параметра выберите действие:
Действие
Что делает
без изменений
значение не меняется
задать значение
новое значение
сбросить (к следующему уровню)
убрать своё значение, взять значение уровнем выше
не записывать (значение Firebird)
ключ не пишется, работает значение Firebird
Выберите, куда применить: К выбранным базам или Как значение по
умолчанию их узлов.
Предпросмотр — узлы проверяют значения, ничего не меняя.
Предпросмотр изменений
Применить. RCM отправляет команду каждому узлу.
Откуда взято значение (колонка Сейчас):
Источник
Значение
эта база
задано для базы
значение узла
задано по умолчанию для узла
встроенное значение узла
значение узла из кода
значение Firebird
ключ не пишется
из файла (здесь ещё не задано)
значение из replication.conf, RCM его ещё не менял
задаёт узел
только для чтения (пути, префиксы)
Узел, который не отвечает, показывает свои базы как недоступные для выбора.
Изменения требуют fbagent (иначе fbagent_required).
Кто перезапускает Firebird (Firebird читает replication.conf только при
запуске):
Узел
Кто
мастер
перезапускаете вы: мастер никогда не перезапускает Firebird сам
реплика с firebird.auto_restart: never
вы
реплика, чей Firebird обслуживает и базы мастера
вы
остальные реплики
перезапускает узел в своём окне перезапуска
Для ручного перезапуска на странице есть кнопка Перезапустить Firebird.
7.2. Главные параметры
Мастер, Firebird 4/5:
Параметр
Подпись в RCM
Значение узла
Firebird
Совет
journal_archive_timeout
Таймаут архивации
10 с
60 с
сколько секунд Firebird ждёт, прежде чем закрыть неполный сегмент. Меньше — реплика ближе к мастеру. Должен быть меньше limits.data_check_quiet_sec (90)
journal_segment_count
Число сегментов
64
8
сколько сегментов может лежать в .ReplLog. Должно быть больше limits.backlog_critical (48)
journal_segment_size
Размер сегмента
—
16 МБ
от 1 МБ до 512 МБ; больше 512 МБ получатель не примет
buffer_size
—
1 МБ
Узел также пишет log_errors = true (нельзя изменить) и
disable_on_error = true.
Реплика, Firebird 4/5:
Параметр
Подпись в RCM
Firebird
Значение
apply_idle_timeout
Пауза при простое
10 с
пауза, когда новых сегментов нет
apply_error_timeout
Пауза после ошибки применения
60 с
пауза перед повтором после ошибки
verbose_logging
узел: true
подробный replication.log; выключать не рекомендуется
skip_upddel_without_pk
узел: true
пропускать UPDATE/DELETE таблиц без ключа
Только Firebird 5: include_filter, exclude_filter, cascade_replication.
HQbird 2.5/3.0 — ключи log_* с тем же смыслом: log_archive_timeout,
log_segment_count, log_segment_size (не меньше 2 × buffer_size). Ключ
alert_command задаётся только в node.json.
Подсказка к каждому параметру есть в форме RCM.
7.3. Хранение архива
Архив <база>.LogArch на мастере чистится по ступеням:
Сегменты, которые применили все реплики и которые старше
retention_days.
Если свободного места меньше free_space_floor_gb — применённые сегменты
моложе срока. Оповещение disk_serious_cleanup.
Если места всё ещё мало — неприменённые сегменты, начиная со старых.
Реплика получает NEEDS_REINIT, оповещение
replication_paused_reinit_scheduled.
Параметр (Настройки → Узлы, Хранение и файлы)
По умолчанию
limits.retention_days — Хранение архива, дней
2
limits.retention_min_kept_segments — Всегда хранить последних сегментов
0 (выключено)
limits.free_space_floor_gb — Минимум свободного места
1 ГБ
Настройки → Узлы, «Хранение и файлы»
Очистить архив вручную:
Command
hqbirdrcm cleanuparchive -node node-a # ступени для всех баз узлаhqbirdrcm cleanuparchive -node node-a -db <db_id> # одна база
-orphaned (только вместе с -db) удаляет все сегменты базы в состоянии
ORPHANED (глава 3.8). Для другой базы узел ответит not_orphaned.
Никогда не запускайте -orphaned на доноре повышения (глава 8.5).
7.4. Передача: сжатие, скорость, окна
Сжатие задаётся для каждого пира: Настройки → Узлы → Пиры, колонка
compress.
Значение
Что значит
пусто или none
без сжатия (по умолчанию)
zstd
сжатие zstd
Изменение действует сразу. Сжатие полезно для медленной сети.
Скорость передачи сегментов (Настройки → Узлы, Передача и
реинициализация):
Параметр
По умолчанию
Когда действует
limits.channel_a_mbps — Скорость передачи сегментов
50 МБ/с
сразу
limits.channel_a_burst_mbps — Всплеск передачи сегментов
200 МБ
сразу
Единица — мебибайты (MiB), хотя в имени стоит «mbps». Всплеск не может быть
меньше скорости.
Подтверждение паузы отправкиСтрока мастера во время паузы
Пауза действует до Возобновить отправку или до инициализации.
Firebird мастера продолжает писать сегменты. Архив .LogArch растёт: пока
реплика стоит, ступень 1 (7.3) не удаляет её сегменты.
Долгая пауза может дойти до ступени 3 и NEEDS_REINIT. Следите за местом.
Кнопки нет, если у базы нет реплики или публикация выключена. Значок
Пауза: нет лицензии — это пауза по лицензии (глава 2.8), её снимает
только лицензия.
7.8. Логи
Лог
Где
Узел
<папка установки>/logs/node-ГГГГММДД.jsonl (/opt/hqclusternode или C:\hqclusternode), по 32 МБ, 20 файлов
Firebird replication.log, firebird.log
пути в node.json: firebird.replication_log, firebird.firebird_log
RCM
Linux: journalctl -u hqbirdrcm
Аудит RCM
rcm-data/audit.jsonl
Лог удалённого узла — страница Журналы: выберите узел и источник
(replication.log, firebird.log, агент узла).
нужна отдельная рабочая копия: отчёты, тесты, авария без нового мастера
обычная база вне репликации
Повысить до мастера (Promote to master), 8.3
реплика должна стать новым мастером
база под управлением узла-компаньона с ролью мастера
Оба пути нельзя отменить через интерфейс.
8.1. Сделать обычной
Список «Действие» реплики: пункт «Сделать обычной»
Базы данных, сторона реплики: отметьте строки реплик.
В списке Действие выберите Сделать обычной, подтвердите.
Отдельной кнопки в строке нет. Команды в командной строке тоже нет.
Подтверждение «Сделать обычной»
3. Узел реплики:
- выполняет `gfix -replica none` (HQbird 2.5/3.0: `gfix -replica {}`). Если
база занята применением сегментов, узел на секунды переводит её в
`single`-shutdown (`gfix -shut single -force 0`), снимает режим реплики и
возвращает `gfix -online normal`. **Все соединения к этой базе
разрываются**;
- пишет файл-метку `<база>.hqcluster-normal.json` (время, автор, db_id,
GUID);
- начинает чистить очередь `.Incoming` (8.2).
4. RCM показывает базу в группе **Не реплика (обычная)**.
Страница «Базы данных» после «Сделать обычной»
После этого база открыта для записи.
Убрать блок реплики из replication.conf. Узел убирает его при следующем
сканировании, а Firebird читает файл при запуске:
До этого ошибки «база не в режиме реплики» для этой базы не выдаются как
оповещения.
Файл-метка защищает базу. Инициализация не перезапишет такую базу:
отказ target_not_replica (глава 5.9). Удалить только метку недостаточно:
узел проверяет и режим реплики в заголовке базы.
Если базу нужно снова сделать репликой — только новая инициализация с
перезаписью. Это делается через API узла (overwrite_non_replica: true), в
RCM такой кнопки нет. Старый файл сохраняется как
<база>.pre-reinit-<время UTC>.fdb, метка удаляется.
8.2. Что происходит с сегментами
Пока узел не просканировал базы, мастер продолжает слать сегменты. Узел
реплики каждые 30 секунд удаляет старые и хранит только последние 100
(keep_segments).
После сканирования запись базы на реплике получает состояние ORPHANED.
Узел реплики отвечает мастеру unknown_database. Мастер перестаёт слать
сегменты на эту реплику, перестаёт держать для неё архив и раз в 10 минут
проверяет её снова.
Другие реплики этой базы не затронуты.
Запись ORPHANED можно удалить (глава 3.8): hqbirdrcm forgetdatabase. Файл
базы при этом не удаляется.
8.3. Повысить до мастера
Реплика становится новым мастером. Её файл остаётся на месте, а управление
переходит к узлу-компаньону.
Условия:
Условие
Отказ
база — реплика
bad_request
на том же хосте работает узел с ролью мастера — компаньон (одинаковая метка host в rcm.json, глава 2.1)
no_companion
повышение этой базы ещё не идёт
already_running
нет инициализации в эту базу или из её мастера
reinit_running
RCM не создаёт узел-компаньон: установите его заранее (глава 1).
Как запустить:
в строке реплики Повысить до мастера, или в списке Действие;
RCM спросит подтверждение и назовёт узел-компаньон.
Подтверждение «Повысить до мастера?»
Шаги (видны в строке реплики, названия на английском):
№
Шаг
Что делает
1
TURN TO NORMAL
как 8.1; пропускается, если база уже обычная
2
NEW GUID
новый GUID базы на месте (8.4)
3
EXCLUDE ON DONOR
узел реплики (донор) исключает файл из своего сканирования (exclude_paths)
4
ENROLL ON <компаньон>
узел-компаньон регистрирует файл как базу мастера
5
PUBLICATION SYNC
синхронизация публикации; список исключённых таблиц переходит со старого мастера (глава 6.3)
6
RESTART DONOR FIREBIRD
перезапуск Firebird донора, без ожидания окна
7
RESTART <компаньон> FIREBIRD
перезапуск Firebird компаньона, без ожидания окна
8
FINALIZE
строка донора становится Призрачная реплика; старый мастер может стать Мастер деградировал (8.5)
Шаги повышения в строке реплики
На HQbird 2.5 и 3.0 публикаций нет: шаг PUBLICATION SYNC проходит с текстом
«this engine has no publication».
Шаги повышения на HQbird 3.0 (Windows)
Если донор и компаньон работают с одним Firebird, этот Firebird
перезапускается: соединения ко всем его базам разрываются.
Если шаг не удался, задание получает failed с текстом ошибки. Исправьте
причину и снова нажмите Повысить до мастера: выполненные шаги не
повторяются. Если RCM перезапустился во время повышения, задание тоже станет
failed — проверьте состояние узлов и повторите.
Лицензия. Если у fbagent на хосте мастера нет лицензии, мастер
приостановил отправку. Повышение всё равно возможно. RCM предупредит:
изменения после начала паузы будут потеряны.
8.4. Новый GUID
После повышения база должна получить свой GUID. Иначе новый мастер пишет
сегменты под GUID старого мастера, и его реплики получают отказ
duplicate_guid.
Шаг NEW GUID на узле:
gfix -shut single -force 0 — все соединения к базе разрываются;
nbackup -L, затем nbackup -F без -SEQUENCE;
удаляет <база>.delta;
проверяет заголовок: новый GUID, REPLICATION_SEQUENCE = 0;
gfix -online normal.
Firebird не перезапускается. Способ работает на всех версиях (2.5, 3.0, 4.0,
5.0).
Если шаг прервался, узел выдаёт оповещение newguid_interrupted. База может
остаться в single-shutdown. Повторите Повысить до мастера: шаг
продолжится.
Шаг пропускается (текст начинается с skipped:), если узел донора старой
версии или у файла уже свой GUID.
После нового GUID старая цепочка nbackup не подходит. Сделайте новую копию
nbackup уровня 0.
Если база создавалась с ADD DIFFERENCE FILE, её .delta лежит в другом
месте: удалите его вручную.
8.5. После повышения
Запись донора. На узле реплики база остаётся ORPHANED, путь — в
exclude_paths, папка .Incoming и метка остаются. В RCM это строка
Призрачная реплика с кнопками Открыть на новом мастере и Очистить.
Строка донора: «Призрачная реплика»
Чтобы убрать строку, нажмите Очистить. Это меняет только RCM.
forgetdatabase для донора узел отклоняет (mailbox_active), пока есть файл
и папка .Incoming.
Никогда не запускайте cleanuparchive -orphaned на доноре. Донор и
компаньон используют одну папку <база>.LogArch. Команда удалит живой
архив нового мастера.
Старый мастер.
Если донор был его последней работающей репликой, RCM ставит старому
мастеру Мастер деградировал и приостанавливает отправку на донор
(«отправка приостановлена: … (повышение до мастера)»). Не возобновляйте
отправку на донор: там уже рабочая база. Чтобы снять это состояние,
инициализируйте базу на другую реплику.
Старый мастер: «Мастер деградировал», отправка приостановлена
Инициализация со старого мастера на узел донора будет отклонена
(target_not_replica): там уже рабочая база.
Если шаг NEW GUID был пропущен, старый и новый мастер имеют один GUID.
Тогда инициализация со старого мастера требует -force (глава 5.9).
Сделать старый мастер репликой нового мастера автоматически нельзя.
Остановите приложения на старом мастере и уберите его базу из управления
(глава 3.8).
Новый мастер. Подключите для него реплику: узел реплики, пиры (глава 2),
публикация (глава 6), инициализация (глава 5).
Новый мастер: база с новым GUID, реплики пока нет
8.6. Плановое переключение: чек-лист
RCM не переключает мастер автоматически. Повышение не проверяет, пишут ли
приложения в старый мастер. Порядок действий:
Заранее. На хосте реплики работает узел-компаньон с ролью мастера, у
обоих узлов одна метка host (глава 2.1). Для нового мастера готов узел
будущей реплики.
Остановите запись приложений в базу старого мастера.
Дождитесь, пока реплика получит и применит всё: Базы данных →
IN_SYNC, нет очереди.
Проверить (глава 5.10): числа строк совпадают.
Повысить до мастера (8.3). Дождитесь шага FINALIZE.
Проверьте: база в списке мастеров компаньона, публикация вкл.
Переключите приложения на новый мастер.
Сделайте копию nbackup уровня 0 новой базы (8.4).
Очистить запись-призрак для строки донора (8.5).
Подключите реплику к новому мастеру и инициализируйте её (глава 5).
Старый мастер: уберите базу из управления или оставьте как архив (8.5).
Этот сайт использует файлы cookie для улучшения работы и запоминания ваших предпочтений.