Предисловие Добрый день.
Так исторически сложилось, что Postgresql из коробки 8-я ветка (а светлое будущее с 9-й веткой в стабильной еще не наступило) не имеет системы репликации.
Поэтому для этих целей был написан внешний инструмент — Slony1.
Как это работает
.Работает это довольно просто: демон slon подключается к серверу Postgresql, цепляется за триггеры и ждет, пока произойдет какое-то событие, изменяющее содержимое базы данных.
Еще есть slonik — утилита настройки, использующая конфиги в STDIN и несколько других управляющих утилит для различных целей.
В рамках репликации, когда речь идет о Postgresql, обычно используются следующие термины:
- Узел — это пара сервер-база.
То есть, например, если у вас несколько баз данных, участвующих в репликации на одном сервере, это не один узел, а несколько.
- Кластер — это группа узлов.
Здесь, я считаю, все просто: хозяин и раб(ы).
- Таблицы – здесь все еще проще.
:)
- Последовательности — это счетчики таблиц.
- Сеты – набор столов и прилавков.
Для каждой базы создается отдельный набор.
Назначение таблиц можно найти в выключенный.
документация или с помощью psql. Так что если вдруг в процессе настройки вы столкнетесь с трудностями, а после перезагрузки получите сообщение типа «данный узел/кластер/таблица уже есть в списке», возможно, вас спасет сброс схемы.
Также необходимо знать, что репликации подлежат только те таблицы, которые имеют первичный ключ.
Главная неприятная особенность слона, для меня, заключалась в том, что он не умеет делать реплику всех таблиц в базе данных — обязательно нужно перечислять одну за другой.
Когда в вашей базе данных > 50 таблиц, написание конфигов становится чрезвычайно утомительной задачей.
Для этих целей я написал скрипт, размещенный ниже.
Самые любознательные из вас наверняка видели подобные манасы и, возможно, думают, что этот пост — очередной дубль.
Нет это не правда.
Вся мана, которую я видел, предлагала скормить конфиг напрямую в слоник через STDIN. При таком подходе система будет работать, но (по крайней мере, в случае с Debian/Ubuntu) возникнут две проблемы:
- скрипт инициализации не будет работать
- Вспомогательные утилиты Elephant работать не будут.
Как я уже говорил, первый конфиг представляет собой Perl-скрипт и входит в скрипт slon_start. Вообще, ручная настройка в этом посте не обсуждается — там лишь рассказывается, где можно найти примеры.
Подготовка.
Будем считать, что база данных у вас уже есть, а также настроенный Postgresql, в нем есть таблицы с первичным ключом и вы готовы приступить к его настройке.
Заранее оговорюсь, что всё делалось на разных версиях серверной Ubuntu, в Дебиане будет примерно одинаково, но что будет в других дистрибутивах, я не знаю.
Итак, нам нужны пакеты postgresql-8.3-slony1 и slony1-bin. Желательно, чтобы оба пакета были из второй ветки (так стабильнее).
Настройка серверов
Во-первых, в postgresql.conf вам нужно раскомментировать строку, содержащую «listen_addresses», и заменить localhost на IP-адрес интерфейса, обращенного к подчиненному устройству.Также можно вместо адреса поставить '*' — тогда сервер будет ждать соединений на всех интерфейсах.
Далее в pg_hba.conf (также в /etc/postgresql) вам нужно добавить строку типа host all all 192.168.1.0/24 md5
, где вместо 192.168.0.0/24 нужно указать сеть или IP слейва.
Далее то же самое делаем на слейве, указывая IP мастера.
Далее перезапускаем Postgresql на ведущем и ведомом устройствах, чтобы он подхватил новые настройки.
Нам также нужно будет создать суперпользователя pg на обеих машинах: createuser -sP slony
Скрипт
Чтобы не увеличивать размер поста в несколько раз, скрипт удален.здесь .
Заранее скажу, что я не претендую на премию за красоту кода — наоборот, он был написан на коленке в свободное время.
Еще немаловажно то, что это работает. Теперь я расскажу вам, что он делает. Для нормальной работы вам потребуется запустить его от имени пользователя root или через sudo (поскольку там su используется в пользователе postgres, а также запись в /etc и выполнение init-скриптов) также желательно (выполнить два последних этапа ), чтобы слейв разрешил root получить к нему доступ по ssh (желательно с ключом, потому что вводить пароль быстро надоест).
Также необходим пакет libdbd-pg-perl. Текущая версия не принимает параметры из командной строки (хотя должна), поэтому после запуска вы вступите в диалог со скриптом.
Итак, алгоритм работает пошагово:
1. Опрос пользователя на предмет названия кластера и реквизитов master/slave.
Если вы допустили ошибку, это не имеет значения; в случае проблем с подключением к базе данных скрипт предложит ввести данные еще раз.Имя кластера произвольное.
2. Диалог выбора базы данных.
Здесь все просто.
Скрипт запрашивает у сервера доступные базы данных и предлагает выбрать те, которые необходимо реплицировать.
Чтобы выбрать (или отменить выбор) базу, необходимо ввести ее номер.
Вы можете выбрать все со звездочкой.
По завершении нажмите Enter.
3. Добавление таблиц/последовательностей.
Имея список выбранных баз данных, скрипт собирает из них список таблиц.
В список добавляются все таблицы и последовательности, находящиеся в выбранных базах данных.
4. Перенос структуры базы данных с мастера на слейв.
Удаленные createb и createlang выполняются последовательно.
Далее локальный pg_dump -s после чего структура передается по ssh на слейв.
5.Непосредственное формирование конфига и его отправка.
Все необходимые данные есть, теперь конфиг генерируется и, если вы root, помещается в /etc/slony1 (в том числе и на слейве), редактируется /etc/default/slony1 (указывает какие ноды нужно запускать).
6. Запуск демона
Ну вот и все.Остаётся только запустить.
:) P.S. Я надеюсь, что это будет кому-то полезно; Если у вас есть вопросы или вдруг что-то работает не так, пожалуйста, пишите в комментариях.
Теги: #linux #postgresql #настройка Linux #perl #ubuntu #Debian #elephants
-
Ос «Сивелькирия»: Миссия И Форма Запуска
19 Oct, 24 -
Youtube Начнет Собственное Онлайн-Вещание.
19 Oct, 24 -
Вездесущность + Рекомендации
19 Oct, 24 -
Авторизация Отклонена
19 Oct, 24