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:
Сначала просканируйте каталог, в который записываются файлы сегментов WAL, и найдите самый новый завершенный файл сегмента, используя начало следующего файла сегмента WAL в качестве начальной точки.
Если точка начала не может быть рассчитана с помощью предыдущего метода и если используется слот репликации, выполняется дополнительная команда
READ_REPLICATION_SLOT
для получения значенияrestart_lsn
слота, которое будет использоваться в качестве точки начала. Эта опция доступна только при потоковой передаче журналов транзакций от Tantor BE версии 15 и выше.Если точка начала не может быть рассчитана с помощью предыдущего метода, используется последнее местоположение сброса 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