Настройка master<->master репликации PostgreSQL через Bucardo

Хочу поделиться своим опытом настройки репликации PostgreSQL типа master<->master, которую мне потребовалось развернуть для уменьшения нагрузки на компьютер, на котором изначально была одна база, но со временем нагрузка на компьютер так возросла, что база перестала справляться.

Итак, что у нас есть и что нам нужно:

  • Есть 2 компьютера с чистой Debian 7 (pg1 -> 192.168.2.11 и pg2 -> 192.168.2.12)
  • Необходимость настройки репликации типа master<->master
  • Статья на хабре http://habrahabr.ru/sandbox/65312/
  • Дока с офф сайта Bucardu http://bucardo.org/wiki/Bucardo
  • Прокачка скила linux-админа

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

Установка необходимых пакетов

Допустим у нас есть 2 свежеустановленных системы Debian 7 редакции netinstall. Выполним установку необходимых пакетов на каждом сервере, который будет участвовать в репликации:

Активируем Bucardu на каждом из серверов:

Следуя совету автора статьи на хабре создадим директорию, в которой будет храниться PID запущенного сервера bucardu

Подготовительная настройка PostgreSQL

Необходимо настроить оба сервера:

Находим строку:

И приводим её к виду:

Потом нужно указать каким хостам и как разрешено работать с базой, сначала первый хост:

Потом на втором хосте:

Далее перезагружаем сервер:

Сбросим дефолтный пароль postgres:

Инсталляция Bucardu в PostgreSQL

На каждом из серверов:

Тут мы можем выбрать хост, на который хотим установить данную систему репликации. Нажимаем английскую "P", придётся 3 раза набрать пароль пользователя postgres, поэтому рекомендую скопировать его в буфер обмена и просто делать [ctrl]+[ins], каждый раз когда это будет нужно. Давайте сбросим пароль bucardo:

Настроим файл паролей:

Добавим строку:

Запускаем bucardo:

Создадим базу:

Далее работаем только с первым сервером, тут нам нужно импортировать дамп, если он имеется:

Если нет, попробуем создать тестовую таблицу:

Настройка Bucardo

Напомню, что мы работаем только с 1м сервером. Добавим базы в bucardo:

Добавим все имеющиеся таблицы на сервере webportal1 в группу таблиц webportal_herb:

Добавим все последовательности:

Создадим группу серверов:

Теперь создадим синхронизацию:

Посмотрим что мы тут наконфигуряли:

После изменения настроек обязательно рестартовать Bucardo:

Тестирование

На сервере pg1:

А на pg2:

Теперь снова на pg1:

Как видно репликация работает в обе стороны.

5 thoughts on “Настройка master<->master репликации PostgreSQL через Bucardo

  1. Добрый день.
    В момент добавления синхронизации bucardo виснет, в логе postgres'a -
    2016-07-04 15:10:26 MSK [11299-3] bucardo@bucardo STATEMENT: INSERT INTO bucardo.sync (herd,name,dbs) VALUES ($1,$2,$3)

    и на этом все виснет. Гугл внятного ничего не говорит. Не встречались ни с чем подобным?

  2. 2 Mikhail Komov

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

  3. > bucardo add sync webporta_sync herd=webporta_herd dbs=webportal_servers

    Замените webporta_herd на webportal_herd, а то потратил 10 минут чтобы найти неисправность.

    С другой стороны "грузим дамп" только на первый сервер, при настройке этой синхронизации пока не добавил дамп на второй сервер, репликация не заработала (но возможно из-за того, что изначально некорректно создал sync)

    1. Благодарю за комментарий, опечатку исправил.

      Скорее всего проблема была в кривом sync, потому что по идее Bucardo должен сам добавить недостающие данные на второй сервер.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *