PostgreSQL отдельно от платформы
era/scripts/install_pg.sh выполняет операции с базой, не трогая платформу.
Он нужен, когда база живёт на отдельном сервере, когда поднимается реплика или когда роли мастера и реплики меняются местами.
bash era/scripts/install_pg.sh
bash install_pg_ssh.sh --host=192.168.0.20 --user=user
Шесть операций
--operation |
Что делает |
|---|---|
|
Поднимает сервер в контейнере |
|
Ставит пакет, создаёт кластер в хосте, настраивает |
|
Ставит пакет и забирает базу с мастера через |
|
Повышает реплику до мастера. |
|
Понижает мастер до реплики: уносит данные в резерв и заливает базу с нового мастера. |
|
Останавливает сервер, удаляет контейнер или юнит и каталог кластера, а следом — каталог инстанса, если тот остался пуст. |
Операцию можно не указывать явно: она выводится из --pgmode и --pghostmode, как это описано в справке версии 3.
--pgmode=d даёт install_in_docker, --pgmode=h --pghostmode=m — install_host_master, --pgmode=h --pghostmode=r — install_host_slave.
Явный --operation всегда сильнее выведенного.
Контейнер или хост
| В контейнере | В хосте | |
|---|---|---|
Установка |
|
Пакет дистрибутива или PGDG |
Обновление версии |
Сменить образ |
Обновить пакет |
Каталог кластера |
|
Путь семейства ОС — см. era_installer/reference-os-matrix.adoc#era-installer-os-matrix |
Управление |
|
|
Репликация |
Не предусмотрена установщиком |
Поддержана полностью |
Контейнер проще и быстрее; кластер в хосте нужен там, где требуется репликация или где база должна пережить переустановку платформы.
Репликация
Мастер поднимается с --usereplic=y: тогда создаётся пользователь репликации и в pg_hba.conf добавляются разрешающие строки.
# на сервере-мастере базы
bash era/scripts/install_pg.sh --non-interactive -y \
--operation=install_host_master --postfix=_11 \
--pgport=5441 --usereplic=y \
--pgreplicauser=era_replica
# на сервере-реплике
bash era/scripts/install_pg.sh --non-interactive -y \
--operation=install_host_slave --postfix=_11 \
--pghost=192.168.0.20 --pgport=5441 \
--pgreplicauser=era_replica
Реплика забирает базу целиком через pg_basebackup -R: файл standby.signal и строка подключения к мастеру создаются автоматически.
Без этого кластер поднялся бы обычным мастером и разъехался бы с настоящим.
После установки установщик выполняет SELECT pg_is_in_recovery() — у мастера ответ f, у реплики t.
Это видно в логе и служит подтверждением, что роль назначена правильно.
Смена ролей
Операции ниже — дополнительный путь: платформа умеет переключаться на другую базу сама, по своей конфигурации. Ими пользуются, когда роль кластера нужно назначить самостоятельно.
Повысить реплику:
bash era/scripts/install_pg.sh --non-interactive -y \
--operation=switch_to_master --postfix=_11
Понизить бывший мастер:
bash era/scripts/install_pg.sh --non-interactive -y \
--operation=switch_to_slave --postfix=_11 \
--pghost=<адрес нового мастера> --pgreplicauser=era_replica
Понижение уносит текущий каталог кластера в --pgbackupfolder и заливает базу заново с нового мастера.
Данные, попавшие в старый мастер после расхождения, в новой базе не окажутся — они останутся только в резервной копии.
|
Что показывается в конце операции
После каждой операции печатается форма «что изменилось на сервере» — та же, что у установки платформы, но строки в ней про базу:
== Что изменилось на сервере ==
[ ok ] Пакеты postgresql-17, postgresql-client-17
[ ok ] PostgreSQL служба postgresql_17_era_11.service, порт 5441
[ ok ] Роли базы данных platformpgadmin
[ ok ] Репликация PostgreSQL подготовлена, пользователь era_replica
Статус берётся из состояния системы, а не из кода возврата команд: служба активна (или контейнер запущен), кластер отвечает на запрос, роль есть в pg_roles.
Отказ в любой строке даёт код возврата 5, даже если все команды отработали.
У операций свои строки:
| Операция | Что в форме |
|---|---|
|
Пакеты, сама база, роли, репликация. У реплики строка репликации подтверждается самим кластером: |
|
Только строка репликации: в этом и весь результат операции — какой стороной стал кластер. Строк про установку базы и ролей нет, эти действия в операции не предусмотрены. |
|
Форма отвечает на обратный вопрос — «что осталось»: контейнер или служба с юнитом и каталог кластера. |
При --dry-run формы нет: сервер не менялся, отчитываться не о чем.
Пароли и роли
| Ключ | Что это |
|---|---|
|
Роль, под которой платформа ходит в базу. По умолчанию |
|
Её пароль. |
|
Пароль встроенной роли |
|
Роль репликации и её пароль. |
|
Пароль системного пользователя |
В мастере вопрос о пароле называет учётную запись, для которой он вводится: «Пароль пользователя БД platformpgadmin», «Пароль пользователя БД era_replica».
Подпись следует за фактическим именем — если вы задали своё через --pgpostgresuser или --pgreplicauser, спросят про него.
Все пароли скрываются в логе и в напечатанных командах.
При установке кластера в хост пароль системного пользователя, если он не задан ключом, спрашивается интерактивно — терминал в этот момент отдаётся команде passwd.
Удаление базы
bash era/scripts/install_pg.sh --non-interactive --operation=uninstall \
--postfix=_11 --pgmode=h
Удаляются юнит systemd (или контейнер) и каталог кластера.
Пакеты остаются, если не задан --douninstallsyspkgs=y.
Каталог кластера удаляется общей защитой: путь должен быть абсолютным и не короче восьми символов. Пустое значение не приводит к удалению — оно приводит к предупреждению.
Каталог инстанса (/opt/era<постфикс>) убирается следом, если после удаления кластера в нём ничего не осталось.
Это тот каталог, который создала сама операция, когда база ставится без платформы.
Чужого удаление не коснётся: имя каталога должно совпадать с era<постфикс>, каталог не должен быть точкой монтирования, а команда — rmdir, который непустой каталог не тронет.
Поэтому /var/lib/postgresql/<версия> при базе в хосте остаётся на месте: он принадлежит пакету.