qhb_upgrade
qhb_upgrade - обновить экземпляр сервера QHB
Синтаксис
qhb_upgrade -b oldbindir -B newbindir -d oldconfigdir -D newconfigdir [option...]
Описание
qhb_upgrade позволяет обновлять данные,
хранящиеся в файлах данных QHB, до более поздней версии
QHB, а также в файлах данных PostgreSQL 12 без создания дампа/перезагрузки данных, которая обычно требуется для
обновлений минорных версий. Это не требуется для обновлений версии, исправляющих ошибки.
В основных выпусках QHB регулярно добавляются новые функции,
которые часто меняют структуру системных таблиц, но формат внутреннего
хранилища данных редко меняется. qhb_upgrade использует этот факт для
быстрого обновления путем создания новых системных таблиц и простого
повторного использования старых файлов пользовательских данных. Если
будущий основной выпуск когда-либо изменит формат хранения данных таким
образом, что старый формат данных станет нечитаемым, qhb_upgrade не
будет использоваться для таких обновлений.
qhb_upgrade делает все возможное, чтобы убедиться, что старый и новый
кластеры совместимы в бинарном формате, например, путем проверки
совместимых настроек времени компиляции, включая 32/64-битные двоичные
файлы. Важно, чтобы любые внешние модули также были
бинарно-совместимыми, хотя это не может быть проверено qhb_upgrade .
Параметры
qhb_upgrade принимает следующие аргументы командной строки:
| Аргумент | Описание |
|---|---|
-b bindir, --old-bindir=bindir | каталог исполняемых файлов старой версии QHB; переменная окружения PGBINOLD |
-B bindir, --new-bindir=bindir | каталог исполняемых файлов новой версии QHB; переменная окружения PGBINNEW |
-c, --check | только проверить кластеры, не изменять данные |
-d configdir, --old-datadir=configdir | каталог конфигурации старого кластера базы данных; переменная окружения PGDATAOLD |
-D configdir, --new-datadir=configdir | каталог конфигурации нового кластера базы данных; переменная окружения PGDATANEW |
-s dir, --socketdir=dir | каталог, используемый для сокетов postmaster во время обновления; по умолчанию текущий рабочий каталог; переменная окружения PGSOCKETDIR |
-U username, --username=username | имя пользователя для установки кластера; переменная окружения PGUSER |
-v, --verbose | включить подробное внутренние сообщения |
-V, --version | показать версию и выйти |
--help | показать справку и выйти |
Использование
Далее описаны шаги, чтобы выполнить обновление с qhb_upgrade:
-
Переместить старый кластер
Если ваш используете установочный каталог привязан к конкретной версии, например
/opt/QHB/1, то вам не требуется перемещать старый кластер. Все графические установщики используют директории установки привязанные к конкретной версии.Если ваш установочный каталог не зависит от версии, например
/usr/local/qhb, необходимо переместить текущий установочный каталог QHB, чтобы он не мешал новой установке QHB. Когда текущий сервер QHB выключен, каталог этой установки QHB можно безопасно переместить; если старый каталог -/usr/local/qhb, вы можете переименовать его:mv /usr/local/qhb /usr/local/qhb.old -
Установите новые исполняемые файлы QHB
Установите новый исполняемые файлы сервера и вспомогательные файлы.
qhb_upgradeвключен в установку по умолчанию. -
Инициализировать новый кластер QHB
Инициализируйте новый кластер, используя qhb_bootstrap. Используйте совместимые флаги
qhb_bootstrapкоторые соответствуют флагам старого кластера. Многие готовые установщики делают этот шаг автоматически. Нет необходимости запускать новый кластер. -
Установите дополнительные разделяемые объектные файлы
Установите любые дополнительные общие объектные файлы (или DLL), используемые старым кластером, в новый кластер, например,
pgcrypto.so, независимо от того, находились ли вcontribили другом месте. Не устанавливайте определения схемы, (например,CREATE EXTENSION pgcrypto), потому что они будут перенесены из старого кластера. Кроме того, все нестандартные файлы поддержки полнотекстового поиска (словарь, синоним, тезаурус, стоп-слова) также должны быть скопированы в новый кластер. -
Настройте аутентификацию
qhb_upgradeбудет подключаться к старому и новому серверам несколько раз, так что возможно имеет смысл установить режим аутентификацииpeerвqhb_hba.confили использовать файл~/.pgpass. -
Остановить оба сервера
Убедитесь, что оба сервера базы данных остановлены. Для Unix, можно выполнить:
pg_ctl -D /opt/pgsql/12 stop qhb_ctl -D /opt/PostgreSQL stopведомые серверы потоковой репликации и доставки журналов могут оставаться запущенными до следующего шага.
-
Подготовка к обновлению резервного сервера
Если вы обновляете ведомые серверы, используя методы, описанные в разделе Шаг 10, убедитесь, что старые ведомые серверы заняты, запустив
qhb_controldataсо старым основным и резервным кластерами. Убедитесь, что значения «Последнее положение контрольной точки» совпадают во всех кластерах. (Будет несоответствие, если старые ведомые серверы были закрыты до старого основного или старые ведомые серверы все еще работают). Также изменитеwal_levelнаreplicaв файлеqhb.confна новом основном кластере. -
Запустите
qhb_upgradeВсегда запускайте
qhb_upgradeот нового сервера, а не от старого. Дляqhb_upgradeтребуется указать каталоги данных и исполняемых файлов (bin) старого и нового кластера. Вы также можете указать имя пользователя.После запуска
qhb_upgradeпроверит совместимость двух кластеров, а затем выполнит обновление. Вы можете использоватьqhb_upgrade--checkдля выполнения только проверок.qhb_upgrade --checkтакже сообщит какие настройки, нужно будет сделать вручную после обновления.Очевидно, что никто не должен иметь доступ к кластерам во время обновления.
qhb_upgradeзапускает серверы на порту 50432, чтобы избежать непреднамеренных клиентских подключений.Если при восстановлении схемы базы данных произошла ошибка,
qhb_upgradeзавершится, и вам придется вернуться к старому кластеру, как описано в шаге 16 ниже. Чтобы повторить попыткуqhb_upgrade, вам потребуется внести коррективы в старый кластер, чтобыqhb_upgradeмогла успешно восстановить схему. Если проблема возникла с модулемcontrib, вам может потребоваться удалить его в старом кластере, и затем установить его в новом после обновления, (предполагается, что модуль не используется для хранения пользовательских данных). -
Обновление ведомых серверов с потоковой репликацией и трансляцией журнала
Если у вас настроена потоковая репликация или трансляция журнала для ведомых серверов, вы можете выполнить следующие шаги, чтобы быстро обновить их. Вам не придётся запускать
qhb_upgradeна ведомых серверах. Вместо этого используйте rsync на ведущем сервере. Не запускайте пока никаких серверов на этом этапе.Если вы не хотите использовать rsync (или у вас его нет), либо вам нужно более простое решение, пропустите инструкции этого раздела и просто заново создайте ведомые серверы после завершения
qhb_upgradeи запуска нового ведущего сервера.
-
Установите новые исполняемые файлы QHB на ведомых серверах
Убедитесь, что новые исполняемые и вспомогательные файлы установлены на всех ведомых серверах.
-
Убедитесь, что на ведомых серверах новых каталогов данных не существует (или они пустые)
Если запускалась
qhb_bootstrap, удалите новые каталоги данных на ведомых серверах. -
Установите дополнительные разделяемые объектные файлы
Установите те же дополнительные разделяемые объектные файлы на новых ведомых серверах, что вы установили в новом ведущем кластере.
-
Остановите ведомые серверы
Если ведомые серверы все еще работают, остановите их сейчас, используя приведенные выше инструкции.
-
Сохраните файлы конфигурации
Сохраните все файлы конфигурации из старых каталогов конфигурации ведомых серверов, такие как,
qhb.conf,qhb_hba.conf, потому что они будут перезаписаны или удалены на следующем этапе. -
Запустите
rsyncПри использовании режима ссылок ведомые серверы можно быстро обновить с помощью rsync. Для этого в каталоге, внутри которого находятся каталоги старого и нового кластера, для каждого ведомого сервера выполните на ведущем:
rsync --archive --delete --hard-links --size-only --no-inc-recursive old_cluster new_cluster remote_dirгде
old_clusterиnew_clusterзадаются относительно текущего каталога на ведущем, аremote_dirнаходится на ведомом над каталогами старого и нового кластера. Структура подкаталогов в указанных каталогах на ведущем и ведомом серверах должна совпадать. Обратитесь к руководствуrsyncза подробной информацией как указать удаленный каталог, например так:rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/PostgreSQL \ /opt/PostgreSQL standby.example.com:/opt/PostgreSQLВы можете проверить, что будет делать команда, используя параметр rsync
--dry-run.rsyncдолжен быть запущен на ведущем сервере как минимум с одним ведомым. Затем, пока обновленный ведомоый сервер остаётся остановленным, на этом ведомом сервере можно запустить rsync для обновления других ведомых серверов.Во время этой операции записываются ссылки, созданные в режиме ссылок
qhb_upgrade, которые связывают файлы в старом и новом кластерах на ведущем сервере. Затем находятся соответствующие файлы в старом кластере ведомого и в новом кластере ведомого создаются ссылки на них. Файлы, которые не были связаны ссылками на ведущем, просто копируются с него на ведомый. (Обычно они маленькие). Это обеспечивает быстрое обновление ведомого сервера. К сожалению,rsyncбез необходимости копирует файлы, связанные с временными и незарегистрированными таблицами, потому что эти файлы обычно не существуют на ведомых серверах.Если у вас есть табличные пространства, вам нужно будет выполнить аналогичную команду
rsyncдля каждого каталога табличного пространства, например:rsync --archive --delete --hard-links --size-only --no-inc-recursive /vol1/pg_tblsp/PG_9.5_201510051 \ /vol1/pg_tblsp/PG_9.6_201608131 standby.example.com:/vol1/pg_tblspЕсли вы переместили
pg_walза пределы каталогов данных,rsyncдолжен быть запущен и в этих каталогах. -
Настройка ведомого сервера с потоковой репликации и трансляцией журнала
Настройте серверы для трансляции журнала. (Не требуется запускать
pg_start_backup()иpg_stop_backup()или делать резервную копию файловой системы, так как ведомые устройства все еще синхронизируются с ведущим).
-
Восстановите
qhb_hba.confЕсли вы изменили
qhb_hba.conf, восстановите его исходные настройки. Также может потребоваться настроить другие файлы конфигурации в новом кластере в соответствии со старым кластером, напримерqhb.conf. -
Запустите новый сервер
Теперь можно безопасно запустить новый сервер, а затем и любые ведомые серверы синхронизированные с помощью
rsync. -
Действия после обновления
Если требуются какие-либо действия после обновления,
qhb_upgradeвыдаст предупреждения по завершении. Также будут сгенерированы файлы скриптов, которые должен будет запустить администратор. Скрипты будут подключаться к каждой базе данных, которой требуются дополнительные действия после обновления. Каждый скрипт должен быть запущен командой:psql --username=qhb --file=script.sql qhbОни могут быть выполнены в любом порядке и могут быть удалены после выполнения.
Предостережение
Как правило, небезопасно обращаться к таблицам, которые задействованы в перестраивающих базу данных скриптах, пока эти скрипты не завершат свою работу; это может привести к некорректным результатам или плохой производительности. К таблицам, которые не задействованы в скриптах, можно обращаться немедленно. -
Статистика
Поскольку статистика оптимизатора не передается
qhb_upgrade, вам будет предложено выполнить команду для восстановления этой информации после обновления. Возможно, вам придется установить параметры подключения к новому кластеру. -
Удалить старый кластер
Если вы удовлетворены обновлением, вы можете удалить каталоги данных старого кластера. Вы также можете удалить старые каталоги установки (например,
bin,share). -
Возврат к старому кластеру
Если после запуска
qhb_upgradeвы хотите вернуться к старому кластеру, есть несколько вариантов:
-
Если использовался параметр
--check, то старый кластер не изменился; просто перезапустите его. -
Если
qhb_upgradeпрервана до начала связывания, старый кластер не изменился; просто перезапустите его.
Примечания
Запускайте qhb_upgrade пользователем, от имени которого будет запускаться новый сервер, или укажите его параметром -U.
qhb_upgrade нельзя запускать под пользователем root.
qhb_upgrade создает различные файлы, такие как дампы схем, в
текущем рабочем каталоге, поэтому текущий пользователь должен иметь права на запись в него. Также в целях безопасности убедитесь, что этот
каталог не доступен для чтения или записи другим пользователям.
qhb_upgrade запускает на короткое время процессы postmaster со старым и новым
каталогом данных. Временные файлы Unix-сокетов для работы с этими
процессами по умолчанию создаются в текущем рабочем каталоге. В
некоторых ситуациях путь к текущему каталогу может быть слишком длинным,
чтобы быть допустимым именем сокета. В этом случае вы можете
использовать опцию -s чтобы поместить файлы сокетов в другой каталог
с коротким путем. В целях безопасности убедитесь, что этот каталог
не доступен для чтения или записи другим пользователям.
qhb_upgrade сообщит обо всех случаях сбоя, перестроения и
переиндексации, если они влияют на вашу установку; скрипты после
обновления для восстановления таблиц и индексов будут создаваться
автоматически. Если вы пытаетесь автоматизировать обновление многих
кластеров, вы должны обнаружить, что кластеры с одинаковыми схемами баз
данных требуют одинаковых шагов после обновления для всех обновлений
кластера; Это связано с тем, что действия после обновления основаны на
схемах базы данных, а не на пользовательских данных.
Для тестирования развертывания создайте копию старого кластера только для схемы, вставьте фиктивные данные и обновите их.
qhb_upgrade не поддерживает обновление баз данных, содержащих столбцы
таблиц, с использованием этих системных типов данных reg* OID-ссылки:
regproc, regprocedure, regoper, regoperator, regconfig и
regdictionary. (regtype может быть обновлен).