Удаление очереди всех событий из мастера
При работе с Londiste может потребоваться удалить все ваши настройки для того, чтобы начать все заново. Для PGQ, чтобы остановить накопление данных, используйте следующие API:
SELECT pgq.unregister_consumer('queue_name', 'consumer_name');
Добавление столбца в таблицу
Добавляем в следующей последовательности:
добавить поле на все слейвы;
BEGIN; на мастере;
добавить поле на мастере;
COMMIT;
Удаление столбца из таблицы
BEGIN; на мастере;
удалить поле на мастере;
COMMIT;
Проверить lag, когда londiste пройдет момент удаления поля;
удалить поле на всех слейвах.
Хитрость тут в том, чтобы удалить поле на слейвах только тогда, когда больше нет событий в очереди на это поле.
Устранение неисправностей
Londiste пожирает процессор и lag растет
Это происходит, например, если во время сбоя админ забыл перезапустить ticker. Или когда вы сделали большой UPDATE или DELETE в одной транзакции, но теперь что бы реализовать каждое событие в этом запросе создаются транзакции на слейвах
Следующий запрос позволяет подсчитать, сколько событий пришло в pgq.subscription в колонках sub_last_tick и sub_next_tick.
SELECT count(*) FROM pgq.event_1, (SELECT tick_snapshot FROM pgq.tick WHERE tick_id BETWEEN 5715138 AND 5715139 ) as t(snapshots) WHERE txid_visible_in_snapshot(ev_txid, snapshots);
В нашем случае, это было более чем 5 миллионов и 400 тысяч событий. Чем больше событий с базы данных требуется обработать Londiste, тем больше ему требуется памяти для этого. Мы можем сообщить Londiste не загружать все события сразу. Достаточно добавить в INI конфиг PgQ ticker следующую настройку:
pgq_lazy_fetch = 500
Теперь Londiste будет брать максимум 500 событий в один пакет запросов. Остальные попадут в следующие пакеты запросов.
Bucardo
Введение
Bucardo асинхронная master-master или master-slave репликация PostgreSQL, которая написана на Perl. Система очень гибкая, поддерживает несколько видов синхронизации и обработки конфликтов.
Установка
Установку будет проводиться на Ubuntu Server. Сначала нам нужно установить DBIx::Safe Perl модуль.
$ apt-get install libdbix-safe-perl
Для других систем можно поставить из исходников:
$ tar xvfz dbix_safe.tar.gz $ cd DBIx-Safe-1.2.5 $ perl Makefile.PL $ make $ make test $ sudo make install
Теперь ставим сам Bucardo. Скачиваем его и инсталлируем:
$ wget http://bucardo.org/downloads/Bucardo-5.0.0.tar.gz $ tar xvfz Bucardo-5.0.0.tar.gz $ cd Bucardo-5.0.0 $ perl Makefile.PL $ make $ sudo make install
Для работы Bucardo потребуется установить поддержку pl/perl языка PostgreSQL.
$ sudo aptitude install
start
Остановка репликации:
$ bucardo stop
Общие задачи
Просмотр значений конфигурации
$ bucardo show all
Изменения значений конфигурации
$ bucardo set name=value
Например:
$ bucardo_ctl set syslog_facility=LOG_LOCAL3
Перегрузка конфигурации
$ bucardo reload_config
Более подробную информацию можно найти на официальном сайте.
Репликация в другие типы баз данных
Начиная с версии 5.0 Bucardo поддерживает репликацию в другие источники данных: drizzle, mongo, mysql, oracle, redis и sqlite (тип базы задается при использовании команды bucardo add db через ключ «type», который по умолчанию postgres). Давайте рассмотрим пример с redis. Для начала потребуется установить redis адаптер для Perl (для других баз устанавливаются соответствующие):
$ aptitude install libredis-perl
Далее зарегистрируем redis базу в Bucardo:
$ bucardo add db R dbname=simple_database type=redis Added database "R"
Создадим группу баз данных под названием pg_to_redis:
$ bucardo add dbgroup pg_to_redis master_db:source slave_db:source R:target Created dbgroup "pg_to_redis" Added database "master_db" to dbgroup "pg_to_redis" as source Added database "slave_db" to dbgroup "pg_to_redis" as source Added database "R" to dbgroup "pg_to_redis" as target
И создадим репликацию:
$ bucardo add sync pg_to_redis_sync tables=all dbs=pg_to_redis status=active Added sync "pg_to_redis_sync" Added table "public.pgbench_accounts" Added table "public.pgbench_branches" Added table "public.pgbench_history" Added table "public.pgbench_tellers"
После перезапуска Bucardo данные с PostgreSQL таблиц начнуть реплицироватся в Redis:
$ pgbench -T 10 -c 5 simple_database $ redis-cli monitor "HMSET" "pgbench_history:6" "bid" "2" "aid" "36291" "delta" "3716" "mtime" "2014-07-11 14:59:38.454824" "hid" "4331" "HMSET" "pgbench_history:2" "bid" "1" "aid" "65179" "delta" "2436" "mtime" "2014-07-11 14:59:38.500896" "hid" "4332" "HMSET" "pgbench_history:14" "bid" "2" "aid" "153001" "delta" "-264" "mtime" "2014-07-11 14:59:38.472706" "hid" "4333" "HMSET" "pgbench_history:15" "bid" "1" "aid" "195747" "delta" "-1671" "mtime" "2014-07-11 14:59:38.509839" "hid" "4334" "HMSET" "pgbench_history:3" "bid" "2" "aid" "147650" "delta" "3237" "mtime" "2014-07-11 14:59:38.489878" "hid" "4335" "HMSET" "pgbench_history:15" "bid" "1" "aid" "39521" "delta" "-2125" "mtime" "2014-07-11 14:59:38.526317" "hid" "4336" "HMSET" "pgbench_history:14" "bid" "2" "aid" "60105" "delta" "2555" "mtime" "2014-07-11 14:59:38.616935" "hid" "4337" "HMSET" "pgbench_history:15" "bid" "2" "aid" "186655" "delta" "930" "mtime" "2014-07-11 14:59:38.541296" "hid" "4338" "HMSET" "pgbench_history:15" "bid" "1" "aid" "101406" "delta" "668" "mtime" "2014-07-11 14:59:38.560971" "hid" "4339" "HMSET" "pgbench_history:15" "bid" "2" "aid" "126329" "delta" "-4236" "mtime" "2014-07-11 14:59:38.5907" "hid" "4340" "DEL" "pgbench_tellers:20"