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 для отключения сжатия. Можно указать дополнительную строку деталей сжатия. Если строка деталей является целым числом, она указывает уровень сжатия. В противном случае, она должна быть списком элементов, разделенных запятыми, каждый из которых имеет форму keyword или keyword=value. В настоящее время, единственное поддерживаемое ключевое слово - level.

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

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

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

-d connstr
--dbname=connstr

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

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

-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 (см. Раздел 31.15).

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

Примечания

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

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

Примеры

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

$ pg_receivewal -h mydbserver -D /usr/local/pgsql/archive

См. также

pg_basebackup