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.