Главная
Главная Руководства PostgreSQL › Репликация таблиц при помощи Skytools3



Автор:

Статья опубликована: 2017-11-30 11:58:53
Последние правки: 2019-11-06 11:58:13

Postgresql умеет работать в режимах master-slave, реплицируя полностью базы. Для репликации отдельных таблиц придуман skytools.

1. Postgresql
# apt-get install -y postgresql
# apt-cache search postgresql | grep londiste
postgresql-9.5-pgq3 - Skype tools for PostgreSQL replication, londiste and PGQ
skytools3 - Skype tools for PostgreSQL replication, londiste and PGQ
skytools3-ticker - Skype tools for PostgreSQL replication, londiste and PGQ
# apt-get install postgresql-9.5-pgq3
Добавление схемы в репликацию с созданием таблиц на реципиенте
:/etc/skytools$ londiste3 LEAF_NAME.ini add-table my_scheme.* --create
или с полной схемой:
:/etc/skytools$ londiste3 LEAF_NAME.ini add-table my_scheme.* --create-full


Удаление таблицы из репликации (в базе-реципиенте таблица остается)
:/etc/skytools$ londiste3 LEAF_NAME.ini remove-table my_scheme.table1 my_scheme.table2


- остановить воркер:
# londiste3 LEAF_NAME.ini worker -k
- запустить воркер в фоне:
londiste3 LEAF_NAME.ini worker -d


Меняем ip у сервера, на который идет репликация:
- мало поменять его в LEAF_NAME.ini, необходимо поменять и в таблице pgq_node.node_location, причем на каждом сервере (причем, не только на серверах откуда и куда идет репликация, а на всех, куда реплицируются данные).

Хорошим тоном является добавление в LEAF_NAME.ini не ip-адреса, а hostname, который резолвится через /etc/hosts, при смене надо будет просто заменить ip в /etc/hosts и перезапустить воркер.


Если ошибка в логе не очевидная. Смотрим, на каком событии тормознулось:
ERR: LEAF_NAME: [ev_id=3883249524,ev_txid=4930263273] ‘foo_id’
Идем в psql DATABASE
select * from pgq.event_2 where ev_id=3883249524;
Смотрим что за событие, делаем какие-то выводы, хотя бы на какой таблице

Удаление leaf
londiste3 LEAF_NAME.ini drop-node <ИМЯ>
ИМЯ - имя реплики, как оно показывается командой londiste3 LEAF_NAME.ini status