Инструменты пользователя

Инструменты сайта


skytools

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

skytools [2018/12/09 03:59] (текущий)
Строка 1: Строка 1:
 +====== SkyTools Londiste ======
 +Downloads [[http://​pgfoundry.org/​projects/​skytools|pgFoundry SkyTools]]
 +
 +**Londiste** асинхронная Master-Slave [[репликация]] из состава утилит Skytools для сервера [[PostgreSQL]].
 +
 +**Принцип работы.**
 +Londiste базируется на механизме очередей PgQ, который входит в пакет SkyTools. Информация об изменениях данных попадает в эти очереди из специальных триггеров,​ навешиваемых на реплицируемые таблицы. PgQ, в свою очередь,​ основывается на пакетной обработке и использует утилиту (демон) ticker, генерирующую события готовности пачек данных. Эти события слушает демон Londiste и по их наступлению переносит пачки с мастера на слейв.
 +===== SkyTools 2.1.12 =====
 +**Задача**. Настройка синхронизации (репликации) между двумя серверами PostgreSQL в режиме Master-Slave (Master реплицирует данные на Slave).
 +  - Сервер (IP 10.161.85.55) Fedora 13 2.6.34.9-69.fc13.x86_64;​ PostgreSQL 8.4.8 - настраиваем как **Master**. БД mbill.
 +  - Сервер (IP 10.161.85.109) Fedora 14 2.6.35.14-106.fc14.x86_64;​ PostgreSQL 8.4.9 - настраиваем как **Slave**. БД mbillcz5054.
 +  - Используем {{::​psycopg2-2.4.2.tar.gz|}},​ {{::​python-2.5.tgz|}}, ​ {{::​skytools-2.1.12.tar.gz|}}
 +**Решение**.
 +  - Установим дополнительные библиотеки и pg_config<​file>​
 +# yum install slang-devel glib2-devel gcc.x86_64 make.x86_64 postgresql-devel.x86_64 zlib-devel.x86_64 -y
 +</​file>​
 +  - Устанавливаем на обоих серверах Python-2.5. После чего в системе будет присутствовать две версии [[Python]] - наша и установленная из репозиториев дистрибутива (Fedora 13 - Python 2.6.4; Fedora 14 - Python 2.7).<​file>​
 +# python --version
 +Python 2.7
 +# tar xvf Python-2.5.tgz
 +# cd Python-2.5
 +# ./configure # для Fedora 13
 +# ./configure --with-zlib=/​usr/​include # для Fedora 14 так как Pyton 2.5 не мог самостоятельно найти модуль zlib в /​usr/​include
 +# make
 +# make install
 +# /​usr/​local/​bin/​python --version
 +Python 2.5
 +</​file>​
 +  - Устанавливаем пакет Skytools-2.1.12<​file>​
 +# tar -xvf skytools-2.1.12.tar.gz
 +# cd skytools-2.1.12
 +# ./configure --with-python=/​usr/​local/​bin/​python2.5 --with-pgconfig=/​usr/​bin/​pg_config
 +# make
 +# make install
 +</​file>​
 +  - Устанавливаем пакет [[http://​initd.org/​psycopg/​install/​|Psycopg]] psycopg2-2.4.2<​file>​
 +# tar -xvf psycopg2-2.4.2.tar.gz
 +# cd psycopg2-2.4.2
 +# /​usr/​local/​bin/​python2.5 setup.py build
 +# /​usr/​local/​bin/​python2.5 setup.py install
 +Writing /​usr/​local/​lib/​python2.5/​site-packages/​psycopg2-2.4.2-py2.5.egg-info
 +</​file>​
 +  - Необходимое программное обеспечение установлено. Далее непосредственно настройка репликации.
 +  - Разрешим доверительный(без пароля) доступ между базами серверов. Все утилиты будут работать под системным пользователем postgres. Операции с БД будет выполнять одноименный пользователь postgres из [[PostgreSQL]]. На Master- сервере добавим строку в pg_hba.conf<​file bash>
 +# nano /​var/​lib/​pgsql/​data/​pg_hba.conf
 +# TYPE  DATABASE ​   USER        CIDR-ADDRESS ​         METHOD
 +host    mbillcz5054 ​  ​postgres ​  ​10.161.85.109/​32 ​     trust
 +
 +# /​etc/​init.d/​postgresql reload
 +</​file>​ На Slave- сервере добавим строку в pg_hba.conf<​file>​
 +# nano /​etc/​postgresql/​8.3/​main/​pg_hba.conf
 +# TYPE  DATABASE ​   USER        CIDR-ADDRESS ​         METHOD
 +host    mbillcz5054 ​        ​postgres ​  ​10.161.85.55/​32 ​     trust
 +
 +# /​etc/​init.d/​postgresql reload
 +</​file>​В этом случае реплицируются только БД mbill в БД mbillcz5054,​ если нужно реплицировать все БД в колонке DATABASE указываем all. После reload, должна выполняться команда с мастера - подключение к слейву<​file>​
 +# psql -h 10.161.85.109 -U postgres -d mbillcz5054
 +</​file>​
 +  - Настраиваем postgresql.conf на Master и Slave (примеры настроек лежат в директории skytools-2.1.12/​tests/​walmgr/​). Оставил по умолчанию,​ ничего не менял:<​file>​
 +listen_addresses = '​*'​
 +port = 5432                             # (change requires restart)
 +max_connections = 100                   # (change requires restart)
 +#​superuser_reserved_connections = 3     # (change requires restart)
 +#​unix_socket_directory = '' ​            # (change requires restart)
 +#​unix_socket_group = '' ​                # (change requires restart)
 +#​unix_socket_permissions = 0777         # begin with 0 to use octal notation
 +#ssl = off                              # (change requires restart)
 +</​file>​
 +  - Настройка ticker на стороне Master. Создадим файл конфигурации для БД mbill (можно взять из примеров и отредактировать). Подобные конфигурации нужно создавать для каждой реплицируемой базы данных. Права чтения/​записи для пользователя postgres на директорию.<​file>​
 +# mkdir /​etc/​skytools
 +# mv pgqadm.ini mbill-ticker.ini
 +# nano /​etc/​skytools/​mbill-ticker.ini
 +# mkdir /​var/​log/​skytools/​
 +# mkdir /​var/​run/​skytools
 +# chown -R postgres:​postgres /​etc/​skytools
 +# chown -R postgres:​postgres /​var/​log/​skytools
 +# chown -R postgres:​postgres /​var/​run/​skytools
 +# nano mbill-ticker.ini
 +[pgqadm]
 +job_name = mbill-ticker
 +db = dbname=mbill
 +
 +# Задержка между запусками обслуживания (ротация очередей и т.п.)
 +# how often to run maintenance [minutes]
 +maint_delay_min = 5
 +
 +# Задержка между проверками наличия активности (новых пакетов данных) в секундах
 +# how often to check for activity [secs]
 +loop_delay = 0.1
 +
 +logfile = /​var/​log/​skytools/​%(job_name)s.log
 +pidfile = /​var/​run/​skytools/​%(job_name)s.pid
 +
 +use_skylog = 0
 +</​file>​
 +  - Теперь необходимо инсталлировать служебный код (SQL) и запустить ticker как демона (ключ -d) для каждой из БД. Делается это с помощью утилиты pgqadm.py от пользователя postgres:<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini install
 +2012-03-22 09:​36:​51,​800 27555 INFO plpgsql is installed
 +2012-03-22 09:​36:​51,​807 27555 INFO txid_current_snapshot is installed
 +2012-03-22 09:​36:​51,​807 27555 INFO Installing pgq
 +2012-03-22 09:​36:​51,​808 27555 INFO   ​Reading from /​usr/​local/​share/​skytools/​pgq.sql
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini ticker -d
 +</​file>​Проверим лог /​var/​log/​skytools/​mbill-ticker.ini.log на ошибки или запросом<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini status
 +</​file>​
 +  - Настройка Slave. Londiste должен быть остановлен. Теперь нужно создать БД mbillcz5054 на Slave в которую будет происходить репликация БД mbill. Для этого выкачаем схему БД mbill на Master и воссоздадим ее на Slave c новым именем БД mbillcz5054<​file>​
 +# sudo -u postgres pg_dump -s mbill > mbill_schema.sql # на Master сервере
 +# sudo -u postgres createdb mbillcz5054 # на Slave сервере
 +# sudo -u postgres psql mbillcz5054 < mbill_schema.sql ​ # на Slave сервере
 +</​file>​
 +  - Создаём конфигурацию репликатора на Master и Slave (файлы отличаются названием БД). Для каждой из реплицируемых баз создадим конфигурационные файлы:<​file>​
 +# cp londiste.ini mbill-londiste.ini
 +# nano /​etc/​skytools/​mbill-londiste.ini
 +[londiste]
 +# MASTER
 +job_name = mbill-londiste
 +provider_db = dbname=mbill port=5432 host=127.0.0.1
 +subscriber_db = dbname=mbillcz5054 port=5432 host=10.161.85.67
 +pgq_queue_name = mbill-londiste-queue
 +
 +logfile = /​var/​log/​skytools/​%(job_name)s.log
 +pidfile = /​var/​run/​skytools/​%(job_name)s.pid
 +log_size = 5242880
 +log_count = 3
 +pgq_lazy_fetch = 500 # указывает не брать более 500 событий в один пакет запросов,​ этим контролируется использование ЦП и ОЗУ
 +
 +#loop_delay = 1
 +#​lock_timeout = 10.0
 +</​file><​file>​
 +[londiste]
 +# SLAVE
 +job_name = mbill-londiste
 +provider_db = dbname=mbill port=5432 host=10.161.85.54
 +subscriber_db = dbname=mbillcz5054 port=5432 host=127.0.0.1
 +pgq_queue_name = mbill-londiste-queue
 +
 +logfile = /​var/​log/​skytools/​%(job_name)s.log
 +pidfile = /​var/​run/​skytools/​%(job_name)s.pid
 +log_size = 5242880
 +log_count = 3
 +
 +#loop_delay = 1
 +# max locking time on provider (in seconds, float)
 +lock_timeout = 100
 +</​file>​
 +  - Устанавливаем Londiste в базы на Маster и Slave. Теперь необходимо установить служебный SQL для каждой из созданных в предыдущем пункте конфигураций. Устанавливаем код на стороне мастера:<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider install
 +</​file>​и подобным образом на стороне слейва:<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber install
 +</​file>​После этого пункта на мастере будут созданы очереди для репликации.
 +  - Запускаем процессы Londiste на Маster для каждой реплицируемой базы делаем:<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini replay -d
 +</​file>​Таким образом запустятся слушатели очередей репликации,​ но, т.к. мы ещё не указывали какие таблицы хотим реплицировать,​ они пока будут работать в холостую. Убедимся что в логах нет ошибок (/​var/​log/​skytools/​db1-londistes.log). Добавляем реплицируемые таблицы. Для каждой конфигурации указываем что будем реплицировать с мастера:<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider add --all
 +</​file>​и что со слейва:<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber add --all
 +</​file>​В данном примере используется параметр --all, который означает все таблицы,​ но вместо него вы можете перечислить список конкретных таблиц,​ если не хотите реплицировать все.
 +  - Добавляем реплицируемые последовательности (sequence). Так же для всех конфигураций. Для мастера:<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider add-seq --all
 +</​file>​Для слейва:<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber add-seq --all
 +</​file>​Точно также как и с таблицами можно указать конкретные последовательности вместо --all.
 +  - Проверяем на **Master должно быть запущено два процесса,​ на Slave ни одного**:<​file>​
 +# ps -ef | grep sky
 +postgres ​ 6645     ​1 ​ 0 17:54 ?        00:00:09 /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini ticker -d
 +postgres 10840     ​1 ​ 0 19:36 ?        00:00:00 /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini replay -v -d
 +</​file>​
 +  - Проверяем на каком этапе находится синхронизация таблиц. Состояние OK сообщает,​ что синхронизация таблицы nases завершена.<​file>​
 +# sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber tables
 +Table                                           State
 +public.nases ​                                      ok
 +</​file>​
 +
 +===== Управление SkyTools 2.1.12 =====
 +  * Запустить SkyTools (ticker и Londiste)<​file bash>
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini ticker -d
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini replay -d
 +</​file>​
 +  * Остановить SkyTools (Londiste и ticker)<​file bash>
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini -s
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini ticker -s
 +</​file>​
 +  * Посмотреть состояние репликации. Данные уже синхронизированы для тех таблиц,​ где статус отображается как "​ok"​.<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber tables
 +</​file>​
 +  * Просмотреть добавленные последовательности<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider seqs
 +или
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber seqs
 +</​file>​
 +  * Master добавление одиночной таблицы и ее последовательности<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider add nases
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider add-seq nases_id_seq
 +</​file>​
 +  * Slave добавление одиночной таблицы и ее последовательности<​file>​
 +sudo -u postgres /​usr/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber add nases
 +sudo -u postgres /​usr/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber add-seq nases_id_seq
 +</​file>​
 +  * Slave удаление всех таблиц и и их sequence<​file>​
 +sudo -u postgres /​usr/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber remove-seq --all
 +sudo -u postgres /​usr/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini subscriber remove --all
 +</​file>​
 +  * **Время отставание репликации**. Запрос выполняется на Master. В столбце lag показывается время отставания от мастера в синхронизации,​ last_seen - время последнего запроса от слейва.<​file>​
 +select queue_name, consumer_name,​ lag, last_seen from pgq.get_consumer_info();​
 +или из командной строки
 +sudo -u postgres psql -d mbillcz5054 --command="​select queue_name, consumer_name,​ lag, last_seen from pgq.get_consumer_info()"​
 +</​file>​
 +  * Посмотреть состояние ticker<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​pgqadm.py /​etc/​skytools/​mbill-ticker.ini status
 +</​file>​
 +==== Решение проблем ====
 +
 +Если в логе Londiste появились ошибки можно попробовать сбросить очереди:<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini replay --reset
 +</​file>​
 +Для более точного определения ошибок можно запустить Londiste в дебаговом режиме<​file>​
 +sudo -u postgres /​usr/​local/​bin/​python2.5 /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini replay -v
 +</​file>​
 +
 +===== Удаление SkyTools =====
 +Для полного удаление SkyTools 2.1.12 нужно выполнить:​
 +<​file>​
 +Остановить Londiste
 +sudo -u postgres /​usr/​local/​bin/​python /​usr/​local/​bin/​londiste.py -s /​etc/​skytools/​mbill-londiste.ini
 +Остановить ticker
 +sudo -u postgres /​usr/​local/​bin/​python /​usr/​local/​bin/​pgqadm.py -s /​etc/​skytools/​mbill-ticker.ini
 +Удалить sequence (последовательности)
 +sudo -u postgres /​usr/​local/​bin/​python /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider remove-seq --all
 +Удаляем реплицируемые таблицы
 +sudo -u postgres /​usr/​local/​bin/​python /​usr/​local/​bin/​londiste.py /​etc/​skytools/​mbill-londiste.ini provider remove --all
 +</​file>​Удаляем схему pgg (schema pgq)<​file>​
 +drop schema if exists pgq cascade;
 +</​file>​Удаляем схему londiste (schema londiste)<​file>​
 +drop type if exists ret_provider_table_list cascade;
 +drop schema if exists londiste cascade;
 +</​file>​ И соответственно вручную удалить бинарные файлы из /​usr/​local/​bin.
 +===== SkyTools 3.0 =====
 +  * [[http://​www.opennet.ru/​opennews/​art.shtml?​num=33381|Релиз Skytools 3.0, инструментария для PostgreSQL, используемого в инфраструктуре Skype]]
 +====== Ссылки ======
 +  * [[http://​www.opennet.ru/​tips/​2364_postgresql_replication_londiste.shtml|Установка Londiste, системы асинхронной мастер-слэйв репликации PostgreSQL]]
 +  * [[http://​cs.cstu.edu.ua/​post/​707/​|Настройка репликации в СУБД POSTGRESQL-8.4 с помощью набора утилит SkyTools в OS Fedora12]]
 +  * [[http://​wiki.postgresql.org/​wiki/​Skytools|Wiki Postgresql SkyTools]]
 +  * [[http://​wiki.postgresql.org/​wiki/​Londiste_Tutorial#​Installing_londiste|Londiste Tutorial]]: установка
  
загрузка...
skytools.txt · Последние изменения: 2018/12/09 03:59 (внешнее изменение)