Алексей Васильев - Работа с PostgreSQL: настройка и масштабирование стр 19.

Шрифт
Фон

Удаление очереди всех событий из мастера

При работе с 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"

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке