Общие сведения о репликации и логическом декодировании
Параметр wal_level позволяет указать, сколько информации должно быть записано в журнал. Существует два варианта: LOGICAL или REPLICA. Вариант REPLICA задан по умолчанию. Этот параметр устанавливается при запуске сервера.
Высокая доступность
Высокий уровень доступности — это служба Базы данных Azure для PostgreSQL, которая предоставляет резервный сервер, готовый взять на себя управление в случае сбоя на основном сервере. Высокий уровень доступности в гибком сервере Базы данных Azure для PostgreSQL использует репликацию для автоматического обновления резервного сервера с учетом изменений данных.
При настройке высокого уровня доступности для гибкого сервера Базы данных Azure для PostgreSQL основной сервер помещается в одну зону доступности, а резервный сервер создается в другой зоне доступности. Данные реплицируются с основного сервера на резервный с помощью потоковой репликации PostgreSQL в синхронном режиме.
Каждая зона доступности состоит из одного или нескольких центров обработки данных. Зоны доступности имеют собственные источники питания, системы охлаждения, сетевую инфраструктуру и т. д., что делает их независимыми друг от друга. В пределах каждой зоны доступности хранятся три копии файлов данных и файлов журналов накануне записи (WAL) в локально избыточном хранилище, обеспечивая физическую изоляцию между основными и резервными серверами. Если одна зона доступности завершается ошибкой, остальные два, скорее всего, продолжают работать. Зоны доступности внутри региона соединены быстрыми оптоволоконными сетями с задержкой в оба конца менее 2 миллисекунд.
Примечание.
Не во всех регионах есть зоны доступности.
При высоком уровне доступности данные дублируются все время использования базы данных, обеспечивая актуальную копию оригинала. В случае сбоя вместо оригинала может быть использована реплика. Репликация имеет основной сервер и резервный сервер. Основной сервер отправляет файлы журналов WAL на резервный сервер, который получает файлы журналов WAL.
Резервный сервер возвращается на основной сервер с информацией, такой как последний журнал записи, который он написал, и последняя позиция, выброшенная на диск, и т. д. Чтобы определить минимальную частоту отправки отчета получателю WAL, задайте параметр wal_receiver_status_interval . Параметр max_replication_slots определяет максимальное количество слотов репликации, которые может поддерживать сервер. Если для параметра wal_level задано значение РЕПЛИКИ, max_replication_slots должен быть по крайней мере одним, однако допустимый диапазон значений составляет от 0 до 262 143.
Параметр max_wal_senders задает максимальное количество процессов отправителя WAL.
Основной и резервный серверы отслеживаются, и предпринимаются соответствующие действия для устранения проблем, включая активацию отработки отказа на резервный сервер. Ниже перечислены состояния избыточности зоны с высоким уровнем доступности.
- Инициализация. В процессе создания резервного сервера.
- Репликация. Репликация данных находится в стабильном состоянии и работоспособна.
- Работоспособен. Резервный сервер обновляется основным.
- Выполнение отработки отказа. Первичный сервер базы данных находится в процессе выполнения отработки отказов на резервный сервер.
- Удаление резервного сервера. В процессе удаления резервного сервера.
- Не включено. Высокий уровень доступности с избыточностью между зонами не включен.
Вы можете добавить функцию высокого уровня доступности для существующего сервера базы данных. Если вы включаете или отключаете высокий уровень доступности на действующем сервере, выполняйте операцию, пока активность низкая.
На портале Azure
- Перейдите к серверу Базы данных Azure для PostgreSQL.
- В разделе Обзор выберите текущую конфигурацию. Отобразится раздел Вычислительная среда и хранилище.
- В разделе "Высокий уровень доступности" установите флажок Высокий уровень доступности (избыточность между зонами). Высокий уровень доступности не поддерживается для уровня с увеличивающейся производительностью.
Важно отметить, что высокий уровень доступности — это параметр аварийного восстановления. Вы не можете использовать резервный сервер для каких-либо других целей, например для предоставления доступа к базам данных только для чтения. Однако вы можете настроить репликацию между двумя серверами Базы данных Azure для PostgreSQL, используя модель издателя и подписчика. Эта конфигурация поддерживает два сервера с репликацией данных между ними. После этого вы получите полный доступ к серверу подписчика и сможете использовать базы данных для любых целей. Вы практикуете эту конфигурацию в упражнении в конце этого модуля.
Логическое декодирование
Логическое декодирование также использует данные, отправленные в упреждающее протоколирование. Как следует из названия, оно декодирует записи в упреждающем протоколировании, чтобы сделать их понятными. Все изменения INSERT, UPDATE и DELETE доступны для логического декодирования.
Логическое декодирование может использоваться для аудита, аналитики или любой другой причины, по которой вы можете знать, что изменилось, и когда оно изменилось.
Логическое декодирование извлекает изменения из всех таблиц базы данных. Оно отличается от репликации тем, что не может отправить эти изменения другим экземплярам PostgreSQL. Вместо этого расширение PostgreSQL предоставляет выходной подключаемый модуль для потоковой передачи изменений.
Логическое декодирование позволяет декодировать содержимое упреждающего протоколирования в простой для понимания формат, который можно интерпретировать без знания структуры базы данных. База данных Azure для PostgreSQL поддерживает логическую декодирование с помощью расширения wal2json, установленного на серверах Базы данных Azure для Postgres.
Использовать можно и другие расширения, например расширение pglogical, позволяющее выполнять логическую потоковую репликацию.
Чтобы использовать логическое декодирование, в параметрах сервера задайте такие значения:
- wal_level на LOGICAL
- max_replication_slots = 10
- max_wal_senders = 10
После внесения этих изменений сервер необходимо перезапустить.
Чтобы использовать расширение pglogical с портала Azure, выполните следующее.
- Перейдите к серверу Базы данных Azure для PostgreSQL.
- Выберите Параметры сервера и найдите shared_preload_libraries. В раскрывающемся списке выберите pglogical.
- Найдите azure.extensions. В раскрывающемся списке выберите pglogical.
- Чтобы применить изменения, перезапустите сервер.
Вы также должны предоставить права администратора для репликации:
ALTER ROLE <adminname> WITH REPLICATION;
Дополнительные сведения см. в документации по pglogical extension online.
Логическое декодирование выводит изменения данных в виде потока, называемого слотом логической репликации.
- Каждый слот имеет один выходной подключаемый модуль, который вы можете определить.
- Каждый слот предоставляет изменения только из одной базы данных, но база данных может иметь несколько слотов.
- Каждое изменение данных обычно выдается один раз на слот.
- Если PostgreSQL перезапускается, слот может повторно выдавать изменения, которые клиент должен обрабатывать.
- Слоты должны отслеживаться. Неуправляемые слоты удерживаются на всех файлах WAL для этих неуправляемых изменений. Эта ситуация может привести к полному хранилищу или обходу обхода идентификатора транзакции.