imitatio creatio co we łbie piszczy

19Dec/08Off

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.

  1. 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
    
  2. 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;
    
  3. Następnie musimy utworzyć publikację w klastrze.

    postgres@merry:~$ slonik_create_set set2  | slonik
    
  4. Utoworzoną publikację (set #2) musimy zasubskrybować do slave'a (node #2):

    postgres@merry:~$ slonik_subscribe_set set2 2  | slonik
    
  5. Zawartość tabeli zostanie przekopiowana na serwer slave. Może to potrwać zależnie od wielkości tabeli.

  6. 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
    
  7. 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!