Репликация PostgreSQL

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

Репликация баз данных методом Master-Salve — это процесс копирования (синхронизации) данных из базы данных на одном сервере (Master), в базу данных на другом сервере (Salve). В этой статье мы рассмотрим как настраивается репликация PostgreSQL в Ubuntu.

ПРЕИМУЩЕСТВА РЕПЛИКАЦИИ

Основное преимущество — распределение базы данных между несколькими машинами. Если с основным сервером что-то происходит и он перестает работать, то данные все еще доступны на резервном сервере и могут быть без труда получены или восстановлены. Работа проекта продолжится без каких-либо трудностей.

В PostgreSQL доступно несколько способов репликации базы данных в зависимости от цели репликации. Можно настраивать репликацию только для резервного копирования или для организации отказоустойчивого сервера баз данных. Мы будем использовать репликацию типа Master-Salve. Она более подходит для резервного копирования. Для реализации будет использоваться модуль standby.

УСТАНОВКА И НАСТРОЙКА POSTGRESQL

Мы уже подробно рассматривали как установить Postgresql в Ubuntu в одной из предыдущих статей. Но в этой статье повторим эти команды более кратко. Установить и выполнить первоначальную настройку сервера нужно на обоих машинах. Если вы используете последние версии Ubuntu — 17.04 или 17.10, то версия PostgreSQL 9.6 уже есть в официальных репозиториях. Для более старых систем можно использовать PPA:

sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgresql-9.6

В более новых версиях просто установите программу из репозиториев:

sudo apt install postgresql-9.6

Затем запустите службу и добавьте ее в автозагрузку:

systemctl start postgresql-9.6
systemctl enable postgresql-9.6

По умолчанию PostgreSQL запускается на порту 5432. Вы можете убедиться, что этот порт имеет состояние LISTEN выполнив команду netstat:

netstat -plntu

После того как Postgresql запущен, нам нужно настроить пароль для пользователя Postgres. Но для этого вам нужно авторизоваться под этим пользователем в системе:

sudo su - postgres

Затем, войдите в консоль управления:

psql

Осталось выполнить такую команду, чтобы задать пароль:

\password postgres

Осталось разрешить общение компьютеров между собой по сети на порту 5432 в брандмауэре:

sudo ufw allow postgresql/tcp
sudo ufw allow 5432/tcp
sudo ufw allow 5433/tcp

Напоминаю, что эти действия нужно проделать на обоих машинах.

НАСТОЙКА РЕПЛИКАЦИИ POSTGRESQL

Сначала настроем мастер-сервер. Это основной сервер, который будет выполнять основные действия записи и рассылать данные на сервера Salve. Приложения могут не только читать, но и записывать данные взаимодействуя с этим сервером. Для его настройки нам нужно изменить содержимое файла postgresql.conf в папке /etc/postgresql/9.6/main/:

Сначала расскоментируйте строчку listen_address и пропишите в ней ip адрес вашего сервера. Порт должен быть 5433 иначе не заработает:

listen_address = '192.168.56.101'
port=5433

Расскоментируйте строчку wal_level и установите значение standby, она отвечает за способ репликации:

wal_level = hot_standby

Мы будем использовать локальную синхронизацию:

synchronous_commit = local

Включите режим архивирования и укажите команду для создания архива:

archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/archive/%f'

Теперь настроем куда именно будет выполняться синхронизация. В нашей инструкции мы будем использовать только два сервера — Master и Salve. Поэтому в строке max_wal_senders поставьте значение 2:

max_wal_senders = 2
wal_keep_segments = 10

Установите имя нашего сервера синхронизации:

synchronous_standby_names = 'pgslave01'

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

mkdir -p /var/lib/postgresql/9.6/archive/
chmod 700 /var/lib/postgresql/9.6/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/archive/

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

host база_данных пользователь ip_адрес метод опции

sudo vi /etc/postgresql/9.6/main/pg_hba.conf

# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 192.168.56.101/32 md5
# PostgreSQL SLave IP address
host replication replica 192.168.56.102/32 md5

После всех настроек нужно перезапустить службу:

systemctl restart postgresql-9.6

Дальше нам нужно создать нового пользователя, у которого будут права на репликацию. Назовите его replica:

su - postgres
createuser --replication -P replica

После всех этих действий настройка репликации postgresql на сервере Master завершена и он готов к работе. Дальше настроем сервер Salve. Тут все проще. Мы собираемся заменить директорию data этого сервера, на эту же директорию из сервера master и поддерживать их синхронизацию. Сначала остановите службу:

systemctl stop postgresql-9.6

Затем сделайте резервную копию текущей директории, если там есть важные данные и вы боитесь их потерять. Удалите текущую папку с данными:

sudo rm /var/lib/postgresql/9.6/main

Затем авторизуйтесь от имени пользователя postgres и скопируйте все данные из сервера Master:

su - postgres
pg_basebackup -h 192.168.56.101 -U replica -D /var/lib/postgresql/9.6/main -P --xlog -p 5433

Вам нужно будет ввести пароль и дождаться пока будут загружены данные. Дальше нужно исправить настройки /etc/postgresql/9.6/main/postgresql.conf:

sudo vi /etc/postgresql/9.6/main/postgresql.conf

Включите hot_standby:

hot_standby = on

И укажите ip адрес этого сервера в строке listen_address:

listen_addresses = '192.168.56.102'

Это все, можете сохранить изменения и закрыть файл. Затем создайте файл /etc/postgresql/9.6/main/recovery.conf:

sudo vi /etc/postgresql/9.6/main/recovery.conf

standby_mode = 'on'
primary_conninfo = 'host=192.168.56.101 port=5432 user=replica password=password application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5433'

Эти настройки нужны для восстановления базы данных в случае возникновения проблем. Осталось запустить службу postgresql на другой машине:

systemctl start postgresql-9.6

Дальше осталось только протестировать как работает потоковая репликация postgresql.

ТЕСТИРОВАНИЕ РЕПЛИКАЦИИ

Чтобы посмотреть как работает репликация вы можете проверить состояния потока репликации, а также просто проверить передаются ли данные от Master на Salve. Сначала посмотрим параметры соединения:

su - postgres

psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"

Затем авторизуйтесь на сервере Master и войдите в консоль управления:

sudo su postgres
psql

Создайте новую таблицу replica_test и вставьте в нее некоторые данные:

CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('losst.ru');
INSERT INTO replica_test VALUES ('This is from Master');

Затем перейдите на сервер Salve и проверьте действительно есть ли там эта табилца:

su - postgres

select * from replica_test;

Дальше вы можете попытаться выполнить запись на сервере Salve:

INSERT INTO replica_test VALUES ('this is SLAVE');

Но получите ошибку, так как из этого сервера можно только читать данные.

ВЫВОДЫ

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

Creative Commons License
Статья Репликация PostgreSQL распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.
Ваше имя тоже может быть здесь. Начните писать статьи для Losst. Это просто! Смотрите подробнее как начать писать статьи - Пишите для нас

Оцените статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (1 оценок, среднее: 5,00 из 5)
Загрузка...

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: