Поиск по сайту:

Как установить и настроить репликацию PostgreSQL с горячим резервированием в Ubuntu 15.04


Это руководство существует для этих версий ОС

  • Ubuntu 16.04 (Xenial Xerus)
  • Ubuntu 15.04 (Vivid Vervet)

На этой странице

  1. Шаг 1. Настройте имя хоста
  2. Шаг 2. Установите PostgreSQL на главном и подчиненном серверах
  3. Шаг 3. Настройка главного сервера
  4. Шаг 4. Настройка подчиненного сервера
  5. Шаг 5. Синхронизация данных с главного сервера на подчиненный сервер
  6. Шаг 6. Тестирование
  7. Справочник

PostgreSQL или Postgres — это система управления объектно-реляционными базами данных (ORDBMS) с открытым исходным кодом, активно разрабатываемая более 15 лет. Это мощный сервер базы данных, который может справляться с высокими нагрузками. PostgreSQL можно использовать на серверах Linux, Unix, BSD и Windows.

Репликация базы данных master/slave — это процесс копирования (синхронизации) данных из базы данных на одном сервере (главном) в базу данных на другом сервере (подчиненном). Основное преимущество этого процесса заключается в распределении баз данных на несколько машин, поэтому, когда на главном сервере возникают проблемы, есть резервная машина с теми же данными, доступная для обработки запросов без перерыва.

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

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

  1. Главный сервер — принимает подключения от клиента с разрешениями на чтение и запись.
  2. Подчиненный сервер — резервный сервер запускает копию данных с главного сервера с разрешением только для чтения.

Предпосылки

  • 2 сервера Ubuntu — 1 главный и 1 подчиненный.
  • Права root на серверах.
  • Некоторые базовые знания об Ubuntu, apt и т. д.

Шаг 1 - Настройте имя хоста

Войдите на оба сервера по ssh:

ssh 

Теперь задайте имя хоста для обоих серверов — главного сервера и подчиненного сервера — с помощью команды hostnamectl.

На главном сервере:

sudo hostnamectl set-hostname master-server

На подчиненном сервере:

sudo hostnamectl set-hostname slave-server

Затем отредактируйте файл /etc/hosts с помощью редактора vim:

sudo vim /etc/hosts

Вставьте эту конфигурацию для главного сервера:

192.168.1.249   master-server

Вставьте эту конфигурацию для подчиненного сервера:

192.168.1.248   slave-server

Сохраните файл и выйдите из редактора.

Шаг 2. Установите PostgreSQL на главном и подчиненном серверах.

Прежде чем мы начнем устанавливать PostgreSQL, обновите репозиторий Ubuntu:

sudo apt-get update

Затем установите PostgreSQL со всеми его зависимостями:

sudo apt-get install postgresql postgresql-client postgresql-contrib

После установки Postgres укажите новый пароль для пользователя postgres (создается автоматически при установке).

passwd postgres

Введите свой пароль пользователя postgres.

Теперь тестируем PostgreSQL:

su - postgres
psql
\conninfo

Вы увидите результат ниже:

Шаг 3 - Настройка Мастер-сервера

На этом шаге мы настроим главный сервер с IP-адресом 192.168.1.249. Мы создадим нового пользователя/роль со специальными правами для выполнения репликации, затем отредактируем файл конфигурации PostgreSQL, чтобы включить режим репликации с горячим резервом.

Из привилегий root переключитесь на пользователя PostgreSQL с помощью команды su:

su - postgres

Получите доступ к оболочке Postgres с помощью команды psql и введите этот запрос PostgreSQL, чтобы создать нового пользователя/роль:

psql
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '';

Проверьте нового пользователя реплики с помощью команды PostgreSQL ниже:

\du

Создан новый пользователь реплики.

Затем перейдите в каталог PostgreSQL /etc/postgresql/9.4/main, чтобы отредактировать файл конфигурации.

cd /etc/postgresql/9.4/main/

Откройте файл postgresql.conf с помощью vim:

vim postgresql.conf

Раскомментируйте строку 59 и добавьте IP-адрес сервера.

listen_addresses = 'localhost,192.168.1.249'

В строке 175 настроек WAL (Write Ahead Log) раскомментируйте и измените значение на hot_standby.

wal_level = hot_standby

В строке 199 раздела checkpoints раскомментируйте checkpoint_segments и измените значение на 8.

checkpoint_segments = 8

В строке 206 и 208 раздела архива включите опцию архивации и добавьте команду архивации.

archive_mode = on
archive_command = 'cp -i %p /var/lib/postgresql/9.4/main/archive/%f'

В строке 224 и 226 раздела репликации измените значение на максимальное количество процессов-отправителей WAL.

max_wal_senders = 3
wal_keep_segments = 8

Сохраните файл и выйдите из vim.

Теперь создайте новый каталог внутри основного каталога для конфигурации архива — выполните приведенную ниже команду от имени пользователя postgres:

mkdir -p /var/lib/9.4/main/archive/

Затем отредактируйте файл pg_hba.conf, чтобы разрешить подключение репликации.

vim pg_hba.conf

В конце строки добавьте новую конфигурацию для пользовательской реплики для подключения.

host    replication     replica      192.168.1.248/24            md5
#192.168.1.248 is slave-server ip address

Сохранить и выйти.

Шаг 4 - Конфигурация подчиненного сервера

Настройте подчиненный сервер как главный сервер. Используйте su, чтобы стать пользователем postgres, и перейдите в каталог конфигурации PostgreSQL.

su - postgres
cd /etc/postgresql/9.4/main/

Отредактируйте postgresql.conf с помощью vim:

vim postgresql.conf

Раскомментируйте строку 59 и добавьте IP-адрес подчиненного сервера.

listen_addresses = 'localhost,192.168.1.248'

Перейдите к строке 175 и раскомментируйте параметр wal_level, измените значение на hot_standby.

wal_level = hot_standby

Раскомментируйте строку 199 в разделе контрольной точки.

checkpoint_segments = 8

Раскомментируйте строки 224 и 226, чтобы настроить процесс max_wal_sender.

max_wal_senders = 3
wal_keep_segments = 8

Раскомментируйте строку 245, чтобы включить режим hot_standby на подчиненном сервере.

hot_standby = on

Сохранить и выйти.

Шаг 5 - Синхронизируйте данные с главного сервера на подчиненный сервер

На этом этапе мы переместим каталог данных PostgreSQL /var/lib/postgresql/9.4/main в резервную папку, а затем заменим его последними основными данными с помощью команды pg_basebackup.

Выполняйте все приведенные ниже команды только на ведомом сервере!

Остановите PostgreSQL на подчиненном сервере:

systemctl stop postgresql

Теперь войдите в систему под пользователем postgres и переименуйте основной каталог в main_original в качестве резервной копии.

su - postgres
mv 9.4/main 9.4/main_original

Запустите команду ниже, чтобы скопировать данные с главного сервера на подчиненный сервер:

pg_basebackup -h 192.168.1.249 -D /var/lib/postgresql/9.4/main -U replica -v -P

Примечание:

  • 192.168.1.249 — это IP-адрес главного сервера.
  • И вам будет предложено ввести пароль для реплики пользователя для репликации.

Перейдите в новый основной каталог и создайте новый файл восстановления recovery.conf с помощью vim:

cd /var/lib/postgresql/9.4/main/
vim recovery.conf

Вставьте конфигурацию ниже:

standby_mode = 'on'
primary_conninfo = 'host=192.168.1.249 port=5432 user=replica '
restore_command = 'cp //var/lib/postgresql/9.4/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'

Теперь вернитесь к пользователю root с выходом и запустите PostgreSQL с помощью команды systemctl:

exit
systemctl start postgresql

Убедитесь, что после запуска команды запуска нет ошибки.

Шаг 6 — Тестирование

Перейдите на главный сервер и войдите в систему под пользователем postgres, затем выполните приведенную ниже команду, чтобы просмотреть информацию о репликации.

su - postgres
psql -x -c "select * from pg_stat_replication;"

Вы увидите информацию о репликации ниже:

Затем попробуйте создать новую базу данных на главном сервере, а затем убедитесь, что база данных существует на подчиненном сервере.

su - postgres
psql
create database howtoforge;

Теперь войдите на подчиненный сервер и убедитесь, что база данных howtoforge была автоматически зеркалирована на подчиненный сервер.

su - postgres
psql
\list

База данных была реплицирована с главного сервера на подчиненный сервер.

Ссылка

  • https://cloud.google.com/solutions/setup-postgres-hot-standby