PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Репликация на Londiste с PostgreSQL 9.0

Londiste, асинхронен инструмент за репликация главен/подчинен, разработен от Skytools. Той е много прост и лесен за използване, създаден като Slony. Основната логика зад Londiste или Slony е дистанционното задействане. Докато londiste следва модела на опашка на събития, който не е техният в Slony – I.

Общ преглед на Skytools:
Skytools е приложение, базирано на Python, идва с пакет от три неща PgQ, Londiste &Walmgr и също така изисква драйвера на Python-Postgres „psycopg2“.

  • PGQ:Неговият механизъм за опашка, изграден с pl/pgsql с phython рамка отгоре.
  • Londiste:Инструмент за репликация, написан на Phyton, използващ PgQ като транспортьор на събития.
  • Walmgr :Създава настройка за WAL архивиране.

Няма да описвам много тук по отношение на процеса на демон за репликация londiste и т.н., защото можете да намерите най-добрия урок относно Skytools(PgQ/Londiste/WalMgr) в тази връзка http://skytools.projects.postgresql.org/doc/.

По принцип моята демонстрация включва как да продължите с репликацията на Londiste с PostgreSQL 9.0 заедно със стъпките за инсталиране. Казвам, че документацията на Skytools и PostgreSQL Wiki (http://wiki.postgresql.org/wiki/Londiste_Tutorial) е нещо повече, за да си играете с репликацията на Londiste.

Предварителни изисквания с връзки за изтегляне :

  • PostgreSQL – PostgreSQL 9.0 http://www.enterprisedb.com/products-services-training/pgdownload
  • skytools – skytools-2.1.12.tar.gz http://pgfoundry.org/frs/download.php/2872/skytools-2.1.12.tar.gz
  • psycopg2 – psycopg2-2.4.2.tar.gz http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz

Моята демонстрация включва следното:-

OS :RHEL 6 32 bit
DB версия:PostgreSQL 9.0
Два клъстера и база данни:londiste_provider на 5432, Londiste_subscriber на 5433
Таблица:Една таблица (ltest)
Местоположение на .ini файл:/opt/skytools-2.1.12/scripts
Местоположение на Skytools:/opt/skytools-2.1.12
Местоположение на PG 9.0:/opt/PostgreSQL/9.0/

Като проста демонстрация с една таблица, опитах с RHEL 6 32bit/PostgreSQL 9.0 с два клъстера в моя локална кутия. Ще трябва да го настроите според действителните изисквания.

Забележка: Преди да продължа напред с настройката, бих искал да напомня, че всички инсталации на източник трябва да са като root потребител и след инсталирането тези директории трябва да притежават потребителски разрешения на Postgres.

Стъпка 1.
Инсталирайте PostgreSQL 9.0 и създайте два клъстера с команда INITDB и се уверете, че работят на 5432 и 5433 всеки. (Не забравяйте, че е стар факт, че с командата INITDB директорията pg_log няма да бъде създадена под Data_directory, трябва да я създадете изрично.)

Стъпка 2.
Инсталирайте skytools, като изтеглите от горната връзка. Най-добрата му практика да съхранява всички източници в едно общо стандартно местоположение. Използвах „/usr/local/src“ и skytools под „/opt/“. Сега конфигурирайте skytools с PostgreSQL 9.0 „pg_config“.

# tar -xvf skytools-2.1.12.tar.gz
# cd /usr/local/src/skytools-2.1.12
# ./configure --prefix=/opt/skytools -2.1.12 --with-pgconfig=/opt/PostgreSQL/9.0/bin/pg_config
# направи
# направи инсталиране

Забележка: След инсталацията ще видите два важни модула за принос (pgq &londiste) под местоположението за принос на PostgreSQL. По принцип тези два приноса ви дават функционалността на londiste репликация.

# cd /opt/PostgreSQL/9.0/share/postgresql/contrib
# ll lond*
-rw-r--r--. 1 корен корен 29771 11 януари 13:24 londiste.sql
-rw-r--r--. 1 root root 27511 11 януари 13:24 londiste.upgrade.sql

# ll pgq*
-rw-r--r--. 1 корен корен 4613 11 януари 13:24 pgq_ext.sql
-rw-r--r--. 1 корен корен 1170 януари 11 13:24 pgq_lowlevel.sql
-rw-r--r--. 1 корен корен 69798 11 януари 13:24 pgq.sql
-rw-r--r--. 1 корен корен 3940 11 януари 13:24 pgq_triggers.sql
-rw-r--r--. 1 root root 54182 януари 11 13:24 pgq.upgrade.sql

Стъпка 3.
Инсталирайте psycopg2, това е phyton-postgres драйвер, който е необходим за skytools. Понякога тези драйвери няма да идват с python, така че ето стъпките за инсталиране.

# tar -xvf psycopg2-2.4.2.tar.gz
# cd psycopg2-2.4.2
# python setup.py install --prefix=/usr/local
# python setup.py build_ext --pg-config /opt/PostgreSQL/9.0/bin/pg_config

Стъпка 4.
Дайте собствеността върху Postgres на skytools и място за инсталиране на postgres. Това гарантира, че всички файлове/изпълними файлове са с потребителски разрешения на Postgres.

# chown -R postgres:postgres /opt/skytools-2.1.12 
# chown -R postgres:postgres /opt/PostgreSQL/9.0/

Стъпка 5.
Задайте LD_LIBRARY_PATH &PYTHONPATH и стартирайте двата новосъздадени клъстера. Можете да ги поставите в .bash_profile на потребител на postgres като постоянно решение.

$export PYTHONPATH=/opt/skytools-2.1.12/lib/python2.6/site-packages/
$export LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr /lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
или
$ vi .bash_profile
експортиране на PYTHONPATH=/opt/skytools-2.1.12/lib/ python2.6/site-packages/
експортиране LD_LIBRARY_PATH=/opt/PostgreSQL/9.0/lib:/usr/lib:/usr/lib/perl5/5.10.0/i386-linux-thread-multi/CORE:
:wq
$ . .bash_profile (изпълни, за да влезе в сила новите настройки)

Сега стартирайте двата клъстера

$ pg_ctl -o "-p 5432" -D /opt/PostgreSQL/9.0/ начало на данните
$ pg_ctl -o "-p 5433" -D /opt/PostgreSQL/9.0/data_1 начало

Стъпка 6.
Създайте две бази данни, londiste_provider в 5432 и londiste_subscriber в 5433. Създайте една таблица с име на първичен ключ 'ltest' в две бази данни и ВЪВЕТЕ някои данни в таблицата londiste_provider (ltest) и по-късно при завършване на настройката за репликация трябва да видите тези INSERT данни от страната на londiste_subscriber.

Може да не се нуждаете от CRETAE TABLE от подчинена страна, вместо това можете да използвате изхвърляне/възстановяване на структура, като използвате pg_dump/pg_restore, ако имате много таблици.

На 5432
psql -p 5432 -c "създаване на база данни londiste_provider;"
psql -p 5432 londiste_provider
londiste_provider=# създаване на таблица ltest(id int първичен ключ);
londiste_provider=# вмъкване в ltest VALUES (generate_series(1,10));
INSERT 0 10

На 5433
psql -p 5433 -c "създаване на база данни londiste_subscriber;"
psql -p 5433 londiste_subscriber
londiste_subscriber=# създаване на таблица ltest(id int първичен ключ);

Стъпка 7.
Създайте два .ini файла, един за londiste(londiste.ini) и друг за PgQ ticker(pgq_ticker.ini). Можете също да намерите примерните .ini файлове от основната инсталация на skytools. Например:- местоположение „/opt/skytools-2.1.12/share/doc/skytools/conf“.

Стъпка 8.
Създайте две директории за регистрационни файлове и PID файлове и ги насочете в параметрите на londiste.ini и pgq_ticker.ini.

$ cd /opt/PostgreSQL/9.0
$ mkdir log pid

Стъпка 9 .
Започнете репликацията с .ini файлове, първо инсталирайте londiste на доставчик и абонат и след това стартирайте тикера (PgQ) за репликиране на таблиците.

Инсталирайте londiste на доставчик и абонат с команди по-долу една по една:

$ cd /opt/skytools-2.1.12/bin
$ ./londiste.py ../scripts/londiste.ini доставчик инсталира
2012-01-12 14:56:03,667 11073 INFO plpgsql е инсталиран
2012-01-12 14:56:03,674 11073 INFO txid_current_snapshot е инсталиран
2012-01-12 14:56:03,675 11073
ИНФОРМАЦИЯ- /> 102 pg 14:56:03,676 11073 ИНФОРМАЦИЯ Четене от /opt/skytools-2.1.12/share/skytools/pgq.sql
2012-01-12 14:56:03,816 11073 ИНФОРМАЦИЯ- />0101
Инсталиране на londiste -12 14:56:03,816 11073 ИНФОРМАЦИЯ Четене от /opt/skytools-2.1.12/share/skytools/londiste.sql

-bash-4.1$ ./londiste.py ../scripts/ Инсталиране на абонати на londiste.ini
2012-01-12 14:56:17,871 11081 INFO plpgsql е инсталиран
2012-01-12 14:56:17,872 11081 INFO Инсталиране на londiste
1-012- 12 14:56:17,873 11081 ИНФОРМАЦИЯ Четене от /opt/skytools-2.1.12/share/skytools/londiste.sql

-->Сега инсталирайте PqQ и стартирайте тикер с .ini файл.

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini install
2012-01-11 16:45:03,219 6348 INFO plpgsql е инсталиран
2012-01-11 16:45:03,225 6348 ИНФОРМАЦИЯ txid_current_snapshot е инсталиран
2012-01-11 16:45:03,228 6348 INFO pgq е инсталиран

-bash.4p1.g. .py -d ../scripts/pgqadm.ini ticker -d

-->Добавяне на таблицата към доставчик и абонат за репликация.

-bash-4.1$ . /londiste.py ../scripts/londiste.ini доставчик добавете ltest
2012-01-12 15:03:39,583 11139 ИНФОРМАЦИЯ Добавяне на public.ltest

-bash-4.1$ ./ londiste.py ../scripts/londiste.ini абонат добавете ltest
2012-01-12 15:03:47,367 11146 ИНФО Проверка на public.ltest
2012-01-12 15:03:47,3484 INFO 111 Добавяне на public.ltest

След добавяне стартирайте репликацията на таблицата.

-bash-4.1$ ./londiste.py ../ scripts/londiste.ini replay -d

Забележка:Опцията "-d" е да стартирате демоните londiste/PgQ във фонов режим.

Тук завършете настройката за репликация. Сега трябва да видите данните от таблицата „ltest“ на подчинената страна (т.е. на порт 5433).

Стъпка 10.
Сега нека разберем какво се е случило във фонов режим на таблица/регистрационни файлове/pids/data и т.н., Да видим един по един.

Информация за регистрационните файлове:

Структура на таблицата след репликация:

Състояние на опашката за събития
Състоянието на репликацията може да се провери с помощта на pgq, както следва:-

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini status
Версия на Postgres:9.0.1 Версия PgQ:2.1.8

Опашка за събития Ротация Ticker TLag
----------------------------------------------------- ---------------------------------
londiste.реплика 3/7200s 500/3s/60s 6s
------------------------------------------------------- -------------------------------

Потребителско изоставане LastSeen
---- -------------------------------------------------- ------------------------
londiste.replica:
myfirstlondiste 6s 6s
------- -------------------------------------------------- ---------------------

Забележка: Има много добри опции с помощните програми на Londiste и PGQ за извършване на научноизследователска и развойна дейност.
Надяваме се всички да имате успешна настройка за репликация на Londiste. Моля, публикувайте вашите коментари, които са високо оценени. До скоро с още публикации.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql извлича последния ред за всеки идентификатор

  2. Генерирана стойност в Postgres

  3. PostgreSQL таблична променлива

  4. Как да използвам PostgreSQL JSON(B) оператори, съдържащи въпросителен знак? чрез JDBC

  5. Ограничения за имена на колони в таблицата Postgres?