pg_receivewal#

pg_receivewal

pg_receivewal

pg_receivewal — потоковая запись журналов предварительной записи с сервера Tantor BE

Синтаксис

pg_receivewal [option...]

Описание

pg_receivewal используется для потоковой передачи журнала предварительной записи (write-ahead log) из работающего кластера Tantor BE. Журнал предварительной записи передается с использованием протокола потоковой репликации и записывается в локальный каталог файлов. Этот каталог может быть использован в качестве места архивирования для восстановления с использованием восстановления до точки во времени (см. Раздел 24.3).

pg_receivewal стримит журнал предварительной записи в реальном времени, по мере его генерации на сервере, и не ожидает завершения сегментов, как это делают archive_command и archive_library. По этой причине не требуется устанавливать archive_timeout при использовании pg_receivewal.

В отличие от приемника WAL на резервном сервере PostgreSQL, pg_receivewal по умолчанию сбрасывает данные WAL только при закрытии файла журнала предзаписи. Опция --synchronous должна быть указана для сброса данных WAL в реальном времени. Поскольку pg_receivewal не применяет WAL, необходимо не допускать его использование в качестве синхронного резервного сервера, когда synchronous_commit равно remote_apply. Если это произойдет, он будет выглядеть как резервный сервер, который никогда не догонит основной сервер, и будет блокировать коммит транзакций. Чтобы избежать этого, следует либо настроить соответствующее значение для synchronous_standby_names, либо указать application_name для pg_receivewal, которое не совпадает с ним, либо изменить значение synchronous_commit на что-то отличное от remote_apply.

Журнал предварительной записи передается по обычному соединению Tantor BE и использует протокол репликации. Соединение должно быть установлено с пользователем, имеющим разрешения REPLICATION (см. Раздел 20.2) или суперпользователем, и pg_hba.conf должен разрешать соединение для репликации. Сервер также должен быть настроен с параметром max_wal_senders, установленным достаточно высоко, чтобы оставить хотя бы одну сессию доступной для потока.

Начальная точка потоковой передачи журнала предварительной записи определяется при запуске pg_receivewal:

  1. Сначала просканируйте каталог, в который записываются файлы сегментов WAL, и найдите самый новый завершенный файл сегмента, используя начало следующего файла сегмента WAL в качестве начальной точки.

  2. Если точка начала не может быть рассчитана с помощью предыдущего метода и если используется слот репликации, выполняется дополнительная команда READ_REPLICATION_SLOT для получения значения restart_lsn слота, которое будет использоваться в качестве точки начала. Эта опция доступна только при потоковой передаче журналов транзакций от Tantor BE версии 15 и выше.

  3. Если точка начала не может быть рассчитана с помощью предыдущего метода, используется последнее местоположение сброса WAL, сообщенное сервером из команды IDENTIFY_SYSTEM.

Если соединение потеряно или изначально не может быть установлено с некритической ошибкой, pg_receivewal будет повторять попытки соединения неограниченное количество раз и восстанавливать потоковую передачу как можно скорее. Чтобы избежать этого поведения, используйте параметр -n.

При отсутствии фатальных ошибок, pg_receivewal будет работать до завершения по сигналу SIGINT (Control+C) или сигналу SIGTERM.

Опции

-D directory
--directory=directory

Каталог для записи вывода.

Этот параметр обязателен.

-E lsn
--endpos=lsn

Остановить репликацию автоматически и завершить с нормальным статусом выхода 0, когда достигнут указанный LSN.

Если существует запись с LSN, точно равным lsn, запись будет обработана.

--if-not-exists

Не выдавать ошибку, когда указана опция --create-slot и слот с указанным именем уже существует.

-n
--no-loop

Не выполняйте цикл при ошибках подключения. Вместо этого немедленно завершите работу с ошибкой.

--no-sync

Этот параметр заставляет pg_receivewal не принудительно записывать данные WAL на диск. Это ускоряет процесс, но означает, что последующий сбой операционной системы может привести к повреждению сегментов WAL. Обычно этот параметр полезен для тестирования, но не следует использовать его при архивировании WAL в рабочей среде.

Этот параметр несовместим с --synchronous.

-s interval
--status-interval=interval

Определяет количество секунд между пакетами статуса, отправляемыми обратно на сервер. Это облегчает мониторинг прогресса с сервера. Значение ноль полностью отключает периодические обновления статуса, хотя обновление все равно будет отправлено по запросу сервера, чтобы избежать разрыва соединения по тайм-ауту. Значение по умолчанию - 10 секунд.

-S slotname
--slot=slotname

Требуется использование pg_receivewal для использования существующего слота репликации (см. Раздел 25.2.6). Когда используется эта опция, pg_receivewal будет сообщать серверу о позиции сброса, указывая, когда каждый сегмент был синхронизирован на диск, чтобы сервер мог удалить этот сегмент, если он не нужен.

Когда клиент репликации pg_receivewal настроен на сервере как синхронный резервный экземпляр, использование слота репликации будет сообщать серверу позицию флаша, но только при закрытии файла журнала предзаписи. Поэтому такая конфигурация будет приводить к длительному ожиданию транзакций на основном сервере и эффективно не будет работать удовлетворительно. Для правильной работы необходимо указать опцию --synchronous (см. ниже).

--synchronous

Сбросить данные WAL на диск немедленно после их получения. Также отправить пакет статуса обратно на сервер немедленно после сброса, независимо от --status-interval.

Этот параметр должен быть указан, если клиент репликации pg_receivewal настроен на сервере как синхронный резервный экземпляр, чтобы гарантировать своевременную обратную связь отправляется на сервер.

-v
--verbose

Включает режим подробного вывода.

-Z level
-Z method[:detail]
--compress=level
--compress=method[:detail]

Включает сжатие журналов предварительной записи.

Метод сжатия может быть установлен на gzip, lz4 (если Tantor BE был скомпилирован с --with-lz4) или none для отсутствия сжатия. Строка деталей сжатия может быть указана опционально. Если строка деталей является целым числом, она указывает уровень сжатия. В противном случае, она должна быть списком элементов, разделенных запятыми, каждый из которых имеет форму ключевое_слово или ключевое_слово=значение. В настоящее время единственным поддерживаемым ключевым словом является level.

Если уровень сжатия не указан, будет использоваться уровень сжатия по умолчанию. Если указан только уровень без указания алгоритма, будет использоваться сжатие gzip, если уровень больше 0, и сжатие не будет использоваться, если уровень равен 0.

Всем именам файлов автоматически будет добавлен суффикс .gz при использовании gzip, а суффикс .lz4 добавляется при использовании lz4.

Следующие параметры командной строки управляют параметрами подключения к базе данных.

-d connstr
--dbname=connstr

Указывает параметры, используемые для подключения к серверу, в виде строки подключения; эти параметры переопределяют любые конфликтующие параметры командной строки.

Эта опция называется --dbname для согласованности с другими клиентскими приложениями, но поскольку pg_receivewal не подключается к какой-либо конкретной базе данных в кластере, любое имя базы данных, включенное в строку подключения, будет проигнорировано сервером. Однако имя базы данных, указанное таким образом, переопределяет имя базы данных по умолчанию (replication) для целей поиска пароля подключения репликации в ~/.pgpass. Аналогично, промежуточное ПО или прокси, используемые при подключении к Tantor BE, могут использовать это имя для таких целей, как маршрутизация подключения.

-h host
--host=host

Указывает имя хоста машины, на которой работает сервер. Если значение начинается с косой черты, оно используется в качестве каталога для Unix-доменного сокета. Значение по умолчанию берется из переменной среды PGHOST, если она установлена, в противном случае выполняется попытка подключения через Unix-доменный сокет.

-p port
--port=port

Определяет TCP-порт или расширение локального файла сокета Unix, на котором сервер прослушивает соединения. По умолчанию используется переменная окружения PGPORT, если она установлена, или скомпилированное значение по умолчанию.

-U username
--username=username

Имя пользователя для подключения.

-w
--no-password

Не запрашивать пароль. Если сервер требует аутентификации по паролю и пароль не доступен другими средствами, такими как файл .pgpass, попытка подключения завершится неудачей. Этот параметр может быть полезен в пакетных заданиях и скриптах, где отсутствует пользователь, чтобы ввести пароль.

-W
--password

Принудите pg_receivewal запросить пароль перед подключением к базе данных.

Эта опция никогда не является обязательной, так как pg_receivewal автоматически запросит пароль, если сервер требует аутентификацию по паролю. Однако pg_receivewal потратит попытку подключения, чтобы узнать, что сервер требует пароль. В некоторых случаях стоит набрать -W, чтобы избежать дополнительной попытки подключения.

pg_receivewal может выполнить одно из двух следующих действий для управления физическими слотами репликации:

--create-slot

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

--drop-slot

Удалить слот репликации с указанным именем в --slot, затем выйти.

Доступны и другие варианты:

-V
--version

Выведите версию pg_receivewal и завершите работу.

-?
--help

Показать справку о командной строке для pg_receivewal и выйти.

Статус выхода

pg_receivewal завершится со статусом 0 при завершении сигналом SIGINT или SIGTERM. (Это нормальный способ завершения. Следовательно, это не ошибка.) В случае фатальных ошибок или других сигналов, статус завершения будет ненулевым.

Окружение

Эта утилита, как и большинство других утилит Tantor BE, использует переменные среды, поддерживаемые libpq (см. Раздел 30.15).

Переменная среды PG_COLOR определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения: always, auto и never.

Примечания

При использовании pg_receivewal вместо archive_command или archive_library в качестве основного метода резервного копирования WAL настоятельно рекомендуется использовать слоты репликации. В противном случае сервер может свободно перерабатывать или удалять файлы журналов предварительной записи до их резервного копирования, поскольку он не имеет никакой информации, ни от archive_command или archive_library, ни от слотов репликации, о том, насколько далеко был архивирован поток WAL. Однако следует отметить, что слот репликации заполнит дисковое пространство сервера, если приемник не успевает получать данные WAL.

pg_receivewal сохранит групповые разрешения для полученных файлов журнала предзаписи, если групповые разрешения включены в исходном кластере.

Примеры

Для передачи журнала предварительной записи с сервера на mydbserver и сохранения его в локальном каталоге /opt/tantor/db/17/archive:

$ pg_receivewal -h mydbserver -D /opt/tantor/db/17/archive

См. также

pg_basebackup