qhb_receivewal

qhb_receivewal — принимать потоковую передачу журналов упреждающей записи с сервера QHB


Синтаксис

qhb_receivewal [параметр...]

Описание

Утилита qhb_receivewal используется для приема потоковой передачи журнала упреждающей записи из работающего кластера QHB. Журнал упреждающей записи передается по протоколу потоковой репликации и записывается в локальный файловый каталог. Этот каталог можно использовать в качестве расположения архива для возврата в исходное состояние с использованием восстановления на определенный момент времени (см. раздел Непрерывное архивирование и восстановление на момент времени (PITR)).

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

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

Журнал упреждающей записи передается по обычному соединению QHB и использует протокол репликации. Это соединение должно быть установлено суперпользователем или пользователем, имеющим разрешения REPLICATION (см. раздел Атрибуты ролей), а в qhb_hba.conf должно быть разрешено соединение репликации. Кроме того, сервер должен быть сконфигурировать с достаточно большим значением max_wal_senders, чтобы оставить хотя бы один сеанс доступным для потоковой передачи.

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

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

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

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

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

В отсутствие критических ошибок qhb_receivewal будет работать до тех пор, пока не прекратится сигналом SIGINT (Control+C).


Параметры

-D каталог
--directory=каталог
Каталог для записи выходных данных.
Это обязательный параметр.

-E lsn
--endpos=lsn
Автоматически останавливать репликацию и выходить с нормальным кодом завершения 0, когда при получении данных достигается указанный LSN.
Если есть запись с LSN, в точности равным lsn, эта запись будет обработана.

--if-not-exists
Не выдавать ошибку, если задан параметр --create-slot, а слот с указанным именем уже существует.

-n
--no-loop
Не зацикливаться при ошибках подключения, а сразу же завершить работу с ошибкой.

--no-sync
С этим параметром qhb_receivewal не будет принудительно сбрасывать данные WAL на диск. Это ускоряет работу, но означает, что последующий сбой операционной системы может привести к повреждению сегментов WAL. В целом, этот параметр полезен для тестирования, но не должен применяться при архивации WAL в производственной среде.
Этот параметр несовместим с --synchronous.

-s интервал
--status-interval=интервал
Задает интервал в секундах между отправками пакетов состояния обратно на сервер. Это упрощает для сервера мониторинг прогресса. Нулевое значение полностью выключает периодическое обновление состояния, хотя обновление все равно будет отправляться при запросе от сервера во избежание разъединения при длительном отсутствии сигнала. Значение по умолчанию — 10 секунд.

-S имя_слота
--slot=имя_слота
Заставляет qhb_receivewal использовать существующий слот репликации (см. подраздел Слоты репликации). Когда используется этот параметр, qhb_receivewal будет сообщать серверу позицию сброса на диск, указывая, когда каждый сегмент был синхронизирован с диском, чтобы сервер мог удалить этот сегмент, если в нем больше нет необходимости.
Когда клиент репликации qhb_receivewal сконфигурирован на сервере как синхронный резервный сервер, он будет при использование слота репликации сообщать серверу позицию сброса на диск, но только когда файл WAL закрывается. Поэтому такая конфигурация приведет к тому, что транзакции на основном сервере будут ожидать завершения долгое время и, в целом, будут работать неудовлетворительно. Для корректной работы этой конфигурации следует дополнительно указать параметр --synchronous (см. ниже).

--synchronous
Сбросить данные WAL на диск сразу после их получения. Также передать пакет состояния обратно на сервер сразу после очистки, независимо от значения --status-interval.
Этот параметр следует задавать, если клиент репликации qhb_receivewal сконфигурирован на сервере как синхронный резервный сервер, чтобы обеспечить своевременную передачу отчетов на сервер.

-v
--verbose
Включает режим подробных сообщений.

-Z уровень
-Z метод[:подробная_информация]
--compress=уровень
--compress=метод[:подробная_информация]
Включает сжатие журналов упреждающей записи.
В качестве метода сжатия можно выбрать gzip, lz4 (если QHB была скомпилирована с параметром --with-lz4) или none (без сжатия). Дополнительно можно указать строку с подробной информацией по сжатию. Если в этой строке передается целое число, оно задает уровень сжатия. В противном случае это должен быть список разделенных запятыми элементов в форме ключевое_слово или ключевое_слово=значение. В настоящее время поддерживается только ключевое слово level (уровень).
Если уровень сжатия не задан, будет использован уровень сжатия по умолчанию. Если задан только уровень, но не алгоритм сжатия, будет использован метод сжатие gzip, если уровень больше 0, а при уровне 0 сжатие не будет выполняться.
При использовании метода gzip ко всем именам файлов автоматически будет добавляться суффикс .gz, а при использовании метода lz4 — суффикс .lz4.

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

-d строка_подключения
--dbname=строка_подключения
Задает параметры, используемые для подключения к серверу, в виде строки подключения; они будут переопределять все конфликтующие параметры командной строки.
Этот параметр называется --dbname для согласованности с другими клиентскими приложениями, но поскольку qhb_receivewal не подключается к какой-либо конкретной базе данных в кластере, имя базы данных в строке подключения будет игнорироваться.

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

-p порт
--port=порт
Указывает TCP-порт или расширение файла локального сокета домена Unix, через который сервер принимает подключения. Значение по умолчанию определяется переменной среды PGPORT, если она установлена, или значением по умолчанию, заданным при компиляции.

-U имя_пользователя
--username=имя_пользователя
Имя пользователя, под которым производится подключение.

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

-W
--password
Принудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как qhb_receivewal автоматически запросит пароль, если сервер требует аутентификацию по паролю. Однако чтобы выяснить это, qhb_receivewal потребуется дополнительная попытка подключения к серверу. В некоторых случаях имеет смысл ввести -W, чтобы исключить эту лишнюю попытку.

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

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

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

Также доступны и другие параметры:

-V
--version
Вывести версию qhb_receivewal и завершиться.

-?
--help
Показать справку об аргументах командной строки qhb_receivewal и завершиться.


Код завершения

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


Переменные среды

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

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


Примечания

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

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


Примеры

Принять потоковую передачу журнала упреждающей записи с сервера mydbserver и сохранить его в локальном каталоге /var/lib/qhb/data/archive:

$ qhb_receivewal -h mydbserver -D /var/lib/qhb/data/archive

См. также

qhb_basebackup