Как установить и настроить репликацию PostgreSQL с горячим резервированием в Ubuntu 15.04
Это руководство существует для этих версий ОС
- Ubuntu 16.04 (Xenial Xerus)
- Ubuntu 15.04 (Vivid Vervet)
На этой странице
- Шаг 1. Настройте имя хоста
- Шаг 2. Установите PostgreSQL на главном и подчиненном серверах
- Шаг 3. Настройка главного сервера
- Шаг 4. Настройка подчиненного сервера
- Шаг 5. Синхронизация данных с главного сервера на подчиненный сервер
- Шаг 6. Тестирование
- Справочник
PostgreSQL или Postgres — это система управления объектно-реляционными базами данных (ORDBMS) с открытым исходным кодом, активно разрабатываемая более 15 лет. Это мощный сервер базы данных, который может справляться с высокими нагрузками. PostgreSQL можно использовать на серверах Linux, Unix, BSD и Windows.
Репликация базы данных master/slave — это процесс копирования (синхронизации) данных из базы данных на одном сервере (главном) в базу данных на другом сервере (подчиненном). Основное преимущество этого процесса заключается в распределении баз данных на несколько машин, поэтому, когда на главном сервере возникают проблемы, есть резервная машина с теми же данными, доступная для обработки запросов без перерыва.
PostgreSQL предоставляет несколько способов репликации базы данных. Его можно использовать для целей резервного копирования и обеспечения высокой доступности сервера базы данных. В этом руководстве я покажу вам, как установить и настроить репликацию PostgreSQL с использованием режима горячего резерва. Режим горячего резерва легко настроить, и это очень хорошая отправная точка для углубленного изучения PostgreSQL.
Для режима горячего резерва требуется 2 сервера базы данных, мы будем использовать Ubuntu в качестве операционной системы на обоих серверах.
- Главный сервер — принимает подключения от клиента с разрешениями на чтение и запись.
- Подчиненный сервер — резервный сервер запускает копию данных с главного сервера с разрешением только для чтения.
Предпосылки
- 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