Replikacja w PostgreSQL za pomocą Slony-I – update
W poprzednim artykule opisałem jak zestawić replikację w postgresie za pomocą slon-tools.
Dziś chciałem dodać parę rzeczy których tam zabrakło, a które są często potrzebne w praktycznym zastosowaniu Slony-I.
Dodawanie tabeli do replikacji
Załóżmy że chcemy dodać do replikacji tabelę froobles.
- Tabela musi istnieć na obu serwerach i mieć klucz główny. Możemy utworzyć ją ręcznie, lub wykorzystać skrypt który to zrobi:
slonik_execute_script set1 /path/to/froobles.sql
- W konfigu (plik slon_tools.conf) musimy dodać kolejną publikację (set) Slony-I. Dopisujemy go do hasha $SLONY_SETS.
$SLONY_SETS = { set1 => { set_id => 1, table_id => 1, sequence_id => 1, pkeyedtables => [ 'accounts', 'branches', 'tellers', ], }, # tymczasowy set dla dodawanych tabel set2 => { set_id => 2, table_id => 100, sequence_id => 100, pkeyedtables => [ 'froobles', ], }, }; 1; -
Następnie musimy utworzyć publikację w klastrze.
postgres@merry:~$ slonik_create_set set2 | slonik
-
Utoworzoną publikację (set #2) musimy zasubskrybować do slave'a (node #2):
postgres@merry:~$ slonik_subscribe_set set2 2 | slonik
-
Zawartość tabeli zostanie przekopiowana na serwer slave. Może to potrwać zależnie od wielkości tabeli.
-
Gdy już upewniliśmy się że tabela jest replikowana, możemy złączyć publikacje z powrotem w jedną. Służy do tego polecenie slonik_merge_sets:
postgres@merry:~$ slonik_merge_sets 1 set1 set2 | slonik
-
Uaktualniamy plik slon_tools.conf (patrz wyżej) tak by odzwierciedlał aktualną konfigurację klastra. Nowo dodane tabele powinny się znaleźć w "set1". Robimy to aby uniknąć zamieszania w razie konieczności odtworzenia klastra.
$SLONY_SETS = { set1 => { set_id => 1, table_id => 1, sequence_id => 1, pkeyedtables => [ 'accounts', 'branches', 'tellers', 'froobles', ], }, }; 1;
Usuwanie tabeli z replikacji
Jeśli chcemy dodawać, to pewnie czasem i usuwać.
Przykład: Usuwamy tabelę z publikacji nr 1. Musimy znać też ID tabeli nadane przez slonika; możemy je podejrzeć w bazie w tabeli _webdev.sl_table. W tym przykładzie jest to 100.
postgres@merry:~$ slonik_drop_table 100 set1 | slonik
Podsumowanie
Narzędzia slon-tools są naprawdę proste.
Wszystkie skrypty dostępne w pakiecie rozpoczynają się od prefiksu slonik_ lub slon_. Polecam zapoznanie się z nimi oraz z doumentacją Slony-I dostępną pod adresem http://slony.info.
Powodzenia!
January 30th, 2009 - 14:07
Bardzo proszę o podpowiedź. Jak mogę wyczyścić zaległe potwierdzenia dla danego wezła. Mam taką sytuację że baza replikuje się co około 10 dni. Nie chcę pchac słoniem wszystkich kolejnych poleceń wykonywanych na rekordach rodzimej bazy. Chcę ją tylko zsynchronizować. Replikacja trwa ponad dwa dni. Natomiast jesli usunę węzeł i założe od nowa bazy wyrównują się w ciagu około 10 min.
Proszę o pomoc.
January 30th, 2009 - 17:51
@Marek:
1. jeśli nie jest potrzebna ciągła replikacja to może w ogóle nie korzystać z slony-I?
może wystarczy dump/restore raz na te 10 dni? będzie prościej…
2. Co masz na myśli mówiąc “Replikacja trwa ponad dwa dni”? może sieć jest wąskim gardłem?
March 9th, 2009 - 02:31
Witam. Mam pytanko. Czy i w jaki sposob mozna wypromowac baze slave do roli mastera ?
March 31st, 2009 - 12:56
@Michal: jest kilka sposobów.
np. za pomocą polecenia MOVE SET (slonik_move_set ),
albo – jeśli serwer główny uległ awarii – za pomocą polecenia slonik_uninstall_node.
polecam wczytanie się w dokumentację systemu Slony-I dostępną pod adresem http://slony.info/