PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Replikacja Londiste z PostgreSQL 9.0

Londiste, narzędzie do replikacji asynchronicznej Master/Slave opracowane przez Skytools. Jest bardzo prosty i przyjazny dla użytkownika stworzony jak Slony. Podstawową logiką stojącą za Londiste lub Slony jest zdalne wyzwalanie. Natomiast londiste podąża za modelem kolejkowania wydarzeń, który nie jest ich w Slonach – I.

Omówienie Skytools:
Skytools to aplikacja oparta na Pythonie, zawiera pakiet trzech rzeczy:PgQ, Londiste i Walmgr, a także wymaga sterownika Python-Postgres „psycopg2”.

  • PGQ:Jego mechanizm kolejki zbudowany na pl/pgsql z dodanym frameworkiem phython.
  • Londiste:narzędzie do replikacji napisane w Phytonie przy użyciu PgQ jako transportera zdarzeń.
  • Walmgr:Tworzy konfigurację archiwizacji WAL.

Nie będę tu dużo opisywał procesu demona replikacji londiste itp., ponieważ najlepszy samouczek dotyczący Skytools (PgQ/Londiste/WalMgr) można znaleźć pod tym linkiem http://skytools.projects.postgresql.org/doc/.

Zasadniczo, moje demo zawiera jak postępować z replikacją Londiste z PostgreSQL 9.0 wraz z krokami instalacji. Mówię, że dokumentacja Skytools i Wiki PostgreSQL (http://wiki.postgresql.org/wiki/Londiste_Tutorial) to więcej niż cokolwiek do zabawy z replikacją Londiste.

Wymagania wstępne z linkami do pobierania:

  • 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

Moje demo zawiera następujące elementy:-

OS                     : RHEL 6 32 bit
DB version : PostgreSQL 9.0
Two Clusters & Database: londiste_provider on 5432,Londiste_subscriber on 5433
Table : One Table (ltest)
Location of .ini file : /opt/skytools-2.1.12/scripts
Location of Skytools : /opt/skytools-2.1.12
Location of PG 9.0 : /opt/PostgreSQL/9.0/

Jako proste demo z jedną tabelą, wypróbowałem RHEL 6 32bit/PostgreSQL 9.0 z dwoma klastrami w moim lokalnym pudełku. Musisz go dostosować zgodnie z rzeczywistymi wymaganiami.

Uwaga: Przed przejściem do przodu z konfiguracją, chciałbym przypomnieć, że wszystkie instalacje źródłowe muszą być użytkownikami root, a po instalacji te katalogi powinny posiadać uprawnienia użytkownika Postgres.

Krok 1.
Zainstaluj PostgreSQL 9.0 i utwórz dwa klastry za pomocą polecenia INITDB i upewnij się, że działają na 5432 i 5433 każdy. (Pamiętaj, że to stary fakt, że za pomocą polecenia INITDB katalog pg_log nie zostanie utworzony w katalogu Data_directory, musisz go utworzyć jawnie.)

Krok 2.
Zainstaluj Skytools, pobierając z powyższego linku. Najlepszą praktyką jest utrzymywanie wszystkich źródeł w jednej wspólnej standardowej lokalizacji. Użyłem ‘/usr/local/src’ i skytools pod ‘/opt/’. Teraz skonfiguruj skytools z 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
# make
# make install

Uwaga: Po instalacji zobaczysz dwa ważne moduły contrib (pgq i londiste) w lokalizacji contrib PostgreSQL. Zasadniczo te dwa contrib zapewniają funkcjonalność replikacji londiste.

# cd /opt/PostgreSQL/9.0/share/postgresql/contrib
# ll lond*
-rw-r--r--. 1 root root 29771 Jan 11 13:24 londiste.sql
-rw-r--r--. 1 root root 27511 Jan 11 13:24 londiste.upgrade.sql

# ll pgq*
-rw-r--r--. 1 root root 4613 Jan 11 13:24 pgq_ext.sql
-rw-r--r--. 1 root root 1170 Jan 11 13:24 pgq_lowlevel.sql
-rw-r--r--. 1 root root 69798 Jan 11 13:24 pgq.sql
-rw-r--r--. 1 root root 3940 Jan 11 13:24 pgq_triggers.sql
-rw-r--r--. 1 root root 54182 Jan 11 13:24 pgq.upgrade.sql

Krok 3.
Zainstaluj psycopg2, to sterownik phyton-postgres, który jest niezbędny dla skytools. Czasami te sterowniki nie są dostarczane z Pythonem, więc oto kroki instalacji.

# 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

Krok 4.
Przekaż własność Postgresa lokalizacji instalacji skytools i postgresa. Dzięki temu wszystkie pliki/pliki wykonywalne mają uprawnienia użytkownika Postgres.

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

Krok 5.
Ustaw LD_LIBRARY_PATH i PYTHONPATH i uruchom dwa nowo utworzone klastry. Możesz umieścić je w .bash_profile użytkownika postgres jako trwałe rozwiązanie.

$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:
or
$ vi .bash_profile
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:
:wq
$ . .bash_profile (execute to take effect of new settings)

Now Start the two cluster

$ pg_ctl -o "-p 5432" -D /opt/PostgreSQL/9.0/data start
$ pg_ctl -o "-p 5433" -D /opt/PostgreSQL/9.0/data_1 start

Krok 6.
Utwórz dwie bazy danych, londiste_provider w 5432 i londiste_subscriber w 5433. Utwórz jedną tabelę z nazwą klucza podstawowego „ltest” w dwóch bazach danych i WSTAW niektóre dane w tabeli londiste_provider (ltest) i po zakończeniu konfiguracji replikacji powinieneś je zobaczyć WSTAW dane po stronie londiste_subscriber.

Możesz nie potrzebować CRETAE TABLE po stronie podrzędnej, zamiast tego możesz użyć zrzutu/przywrócenia struktury za pomocą pg_dump/pg_restore, jeśli masz wiele tabel.

On 5432
psql -p 5432 -c "create database londiste_provider;"
psql -p 5432 londiste_provider
londiste_provider=# create table ltest(id int primary key);
londiste_provider=# insert into ltest VALUES (generate_series(1,10));
INSERT 0 10

On 5433
psql -p 5433 -c "create database londiste_subscriber;"
psql -p 5433 londiste_subscriber
londiste_subscriber=# create table ltest(id int primary key);

Krok 7.
Utwórz dwa pliki .ini, jeden dla londiste(londiste.ini), a drugi dla tickera PgQ(pgq_ticker.ini). Możesz również znaleźć przykładowe pliki .ini z podstawowej instalacji skytools. Np.:- lokalizacja „/opt/skytools-2.1.12/share/doc/skytools/conf”.

Krok 8.
Utwórz dwa katalogi na pliki dziennika i PID i wskaż je w parametrach londiste.ini i pgq_ticker.ini.

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

Krok 9 .
Rozpocznij replikację z plikami .ini, najpierw zainstaluj londiste u dostawcy i subskrybenta, a następnie uruchom pasek (PgQ) do replikacji tabel.

Zainstaluj londiste u dostawcy i abonenta za pomocą poniższych poleceń jeden po drugim:

$ cd /opt/skytools-2.1.12/bin
$ ./londiste.py ../scripts/londiste.ini provider install
2012-01-12 14:56:03,667 11073 INFO plpgsql is installed
2012-01-12 14:56:03,674 11073 INFO txid_current_snapshot is installed
2012-01-12 14:56:03,675 11073 INFO Installing pgq
2012-01-12 14:56:03,676 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/pgq.sql
2012-01-12 14:56:03,816 11073 INFO Installing londiste
2012-01-12 14:56:03,816 11073 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

-bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber install
2012-01-12 14:56:17,871 11081 INFO plpgsql is installed
2012-01-12 14:56:17,872 11081 INFO Installing londiste
2012-01-12 14:56:17,873 11081 INFO Reading from /opt/skytools-2.1.12/share/skytools/londiste.sql

-->Now, Install PqQ and start ticker with .ini file.

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini install
2012-01-11 16:45:03,219 6348 INFO plpgsql is installed
2012-01-11 16:45:03,225 6348 INFO txid_current_snapshot is installed
2012-01-11 16:45:03,228 6348 INFO pgq is installed

-bash-4.1$ ./pgqadm.py -d ../scripts/pgqadm.ini ticker -d

-->Add the table to provider & subscriber to replicate.

-bash-4.1$ ./londiste.py ../scripts/londiste.ini provider add ltest
2012-01-12 15:03:39,583 11139 INFO Adding public.ltest

-bash-4.1$ ./londiste.py ../scripts/londiste.ini subscriber add ltest
2012-01-12 15:03:47,367 11146 INFO Checking public.ltest
2012-01-12 15:03:47,384 11146 INFO Adding public.ltest

Po dodaniu rozpocznij replikację tabeli.

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

Note: "-d" option is to run the londiste/PgQ daemons in background.

Tutaj dokończ konfigurację replikacji. Teraz powinieneś zobaczyć dane tabeli „ltest” po stronie Slave (tj. na porcie 5433).

Krok 10.
Teraz zrozummy, co działo się w tle w tabeli/logach/pidach/danych itp. Zobaczmy jeden po drugim.

Informacje w dziennikach:

Struktura tabeli po replikacji:

Stan kolejki zdarzeń
Stan replikacji można sprawdzić za pomocą narzędzia pgq, jak poniżej:-

-bash-4.1$ ./pgqadm.py ../scripts/pgqadm.ini status
Postgres version: 9.0.1 PgQ version: 2.1.8

Event queue Rotation Ticker TLag
------------------------------------------------------------------------------
londiste.replica 3/7200s 500/3s/60s 6s
------------------------------------------------------------------------------

Consumer Lag LastSeen
------------------------------------------------------------------------------
londiste.replica:
myfirstlondiste 6s 6s
------------------------------------------------------------------------------

Uwaga: Istnieją bardzo dobre opcje z narzędziami Londiste i PGQ do prowadzenia prac badawczo-rozwojowych.
Mam nadzieję, że wszyscy macie pomyślną konfigurację replikacji Londiste. Prosimy o publikowanie komentarzy, które są bardzo cenione. Do zobaczenia wkrótce z kilkoma wpisami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można odszyfrować za pomocą pgcrypto z AES-256-CBC, ale AES-128-CBC jest OK

  2. Wskazówki dotyczące najlepszych praktyk w PostgreSQL VACUUM i ANALYZE

  3. Mapowanie kolumny PostgreSQL JSON na właściwość jednostki Hibernate

  4. Jak przyspieszyć działanie wstawiania w PostgreSQL

  5. Użyj \copy psql dla zapytania wielowierszowego