Сквозные примеры

Здесь собраны целые развёртывания, а не отдельные команды. Каждый пример проходится сверху вниз.

Одиночный сервер

Самый простой случай: платформа и база на одной машине, база в контейнере.

bash install_ssh.sh --non-interactive \
     --host=192.168.0.10 --user=user \
     --ipaddress=192.168.0.10 --srvname=srv1 --postfix=_11 \
     --master=y --masterdomain=example.ru \
     --dopginstall=y --pgmode=d --usedockerhubpgimage=y \
     --pgport=5441

Общие каталоги не настраиваются: узел один, и монтировать нечего. Установщик создаст локальные каталоги и положит в них маркеры, чтобы платформа не сочла хранилище недоступным.

Сайт из трёх серверов

Мастер с базой, два узла, общие каталоги отдаёт мастер.

Шаг 1. Мастер.

bash install_ssh.sh --non-interactive \
     --host=192.168.0.10 --user=user \
     --ipaddress=192.168.0.10 --srvname=srv1 --postfix=_11 \
     --master=y --masterdomain=example.ru \
     --dopginstall=y --pgmode=h --pghostmode=m \
     --pgport=5441 --usereplic=n \
     --installnfsserver=y --nfsclinetmask=192.168.0.0/24

Шаг 2 и 3. Узлы.

for n in 11 12; do
  bash install_ssh.sh --non-interactive \
       --host="192.168.0.$n" --user=user \
       --ipaddress="192.168.0.$n" --srvname="srv$n" --postfix=_11 \
       --master=n --micaddress=mic@192.168.0.10 \
       --dopginstall=n --pghost=192.168.0.10 --pgport=5441 \
       --nfsserveraddr=192.168.0.10
done

Порядок важен: узлы при старте ищут мастер, поэтому он должен быть уже поднят.

Команды узлов можно не составлять вручную. Если при установке мастера ответить на экране 10, что планируются другие серверы, и перечислить их имена и адреса, установщик напечатает готовую команду для каждого — с ролью узла, адресом mic, базой и NFS-сервером мастера. См. era_installer/install-local.adoc#era-installer-install-local-addservers.

Проверить, что общие каталоги смонтировались, можно по логу узла: строка mount -v 192.168.0.10:…​. Если монтирование не удалось, установка не прервётся, но каталог получит файл nomount.sign — и это видно в логе как предупреждение.

Отдельный сервер базы с репликой

Шаг 1. Мастер базы.

bash install_pg_ssh.sh --non-interactive -y \
     --host=192.168.0.20 --user=user \
     --operation=install_host_master --postfix=_11 \
     --pgport=5441 --usereplic=y \
     --pgreplicauser=era_replica

Шаг 2. Реплика.

bash install_pg_ssh.sh --non-interactive -y \
     --host=192.168.0.21 --user=user \
     --operation=install_host_slave --postfix=_11 \
     --pghost=192.168.0.20 --pgport=5441 \
     --pgreplicauser=era_replica

Шаг 3. Платформа, указывающая на базу.

bash install_ssh.sh --non-interactive \
     --host=192.168.0.10 --user=user \
     --ipaddress=192.168.0.10 --srvname=srv1 --postfix=_11 \
     --master=y --masterdomain=example.ru \
     --dopginstall=n --pghost=192.168.0.20 --pgport=5441

--pghost задаёт платформе только начальную строку подключения — ту, что попадает в контейнер при первом запуске. Дальше список строк ведёт сама платформа: в её конфигурации их может быть несколько, и мастер, и реплика.

Проверить роли:

ssh user@192.168.0.20 'sudo -u postgres /usr/lib/postgresql/17/bin/psql -p 5441 -c "SELECT pg_is_in_recovery();"'
# мастер -> f, реплика -> t

Переключение на реплику

Мастер базы вышел из строя.

Обычно вмешательства не требуется: платформа сама следит за соединением и при его потере переходит на другую строку подключения из своей конфигурации, переводя базы в нужную роль. Команды ниже — дополнительный путь: он нужен, когда роли назначаются самостоятельно.

Повысить реплику до мастера:

bash install_pg_ssh.sh --non-interactive -y \
     --host=192.168.0.21 --user=user \
     --operation=switch_to_master --postfix=_11

Когда старый мастер вернётся, его понижают до реплики:

bash install_pg_ssh.sh --non-interactive -y \
     --host=192.168.0.20 --user=user \
     --operation=switch_to_slave --postfix=_11 \
     --pghost=192.168.0.21 --pgreplicauser=era_replica
Понижение заливает базу заново с нового мастера. Данные, записанные в старый мастер после расхождения, останутся только в резервной копии внутри --pgbackupfolder.

Перенос инстанса на другой сервер

Шаг 1 предполагает, что файл ответов ещё лежит на старом сервере. Установка могла пройти давно, а каталог поставки нередко распаковывают в /tmp — после перезагрузки там не остаётся ни логов, ни .params. Поэтому сохраняйте .params и .cmd сразу после установки в место, которое переживёт сервер: с ними перенос сводится к командам ниже, без них параметры инстанса приходится восстанавливать по тому, что осталось на сервере. При установке по ssh копия уже у вас — обёртка забирает каталог логов целевого хоста в logs/remote/<хост>/. См. era_installer/logs.adoc#era-installer-logs-where.

# 1. Забрать команду и параметры со старого сервера
scp user@192.168.0.10:/tmp/era_installer/logs/install_*.params ./srv1.params

# 2. Поставить на новый, изменив адрес и имя
bash install_ssh.sh --non-interactive \
     --answers-file=./srv1.params \
     --host=192.168.0.30 --user=user \
     --ipaddress=192.168.0.30 --srvname=srv1new

# 3. Убедиться, что новый работает, и только потом убрать старый
bash uninstall_ssh.sh --non-interactive \
     --host=192.168.0.10 --user=user \
     --eracontainername=era_11 --erainstancedatapath=/opt/era_11 \
     --douninstallpg=y --pgmode=h

Данные платформы переносятся отдельно — установщик их не копирует. Он разворачивает окружение, а содержимое томов и базы — задача переноса данных.

Переустановка на том же сервере

bash era/scripts/uninstall.sh --non-interactive \
     --datapath=/opt --eracontainername=era_11 \
     --erainstancedatapath=/opt/era_11 --douninstallpg=y --pgmode=d

bash era/scripts/install.sh --non-interactive \
     --answers-file=logs/install_20260101-120000.params

Переустановка опирается на тот же файл ответов, и здесь он лежит на том же сервере, который переустанавливают. Хранить его стоит и вне сервера: установка могла быть давно, и восстанавливать её параметры по памяти к моменту переустановки уже не по чему.

Проверьте --dry-run на удалении перед запуском: план покажет, что именно найдено и сколько занимает. Пункт с отметкой «не найден» почти всегда означает опечатку в имени.