Jak skonfigurować dwa identyczne serwery do automatycznego przełączania awaryjnego w PostgreSQL 9.1.
OS
Centos 5
PostgreSQL 9.1 skompilowany ze źródła
Konto użytkownika Postgres istnieje na obu komputerach i ma bezhasłowy klucz ssh do łączenia się z oboma komputerami.
Moja obecna konfiguracja:
Konfiguracja serwera głównego:
postgresql.conf:
listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16
wal_keep_segments = 8
archive_mode = on
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'
pg_hba.conf:
host replication all 10.0.66.1/32 trust
host replication all 10.0.66.2/32 trust
Serwer rezerwowy
Postgresql.conf i pg_hba.conf są identyczne z konfigurowanymi na serwerze głównym.
recovery.conf:
standby_mode = 'on'
primary_conninfo = 'host=10.0.66.1'
trigger_file = '/opt/pgsql91/data/trigger.txt'
Dzięki hzRoot rozumiem teraz, jak przełączyć serwer z trybu gotowości na tryb główny.
Korzystając z następujących poleceń, mogę zsynchronizować nowy moduł podrzędny z nowym modułem głównym, a następnie uzyskać kopię zapasową replikacji i uruchomić ją.
Na nowym komputerze głównym (10.0.66.2)
- su - postgres
- dotknij trigger.txt w / opt / pgsql91 / data /
- recovery.conf zmienia się w recovery.done
- psql -c "; SELECT pg_start_backup ('backup', true)";
- rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
- psql -c "; SELECT pg_stop_backup ()";
Na nowym slave (10.0.66.1)
- utwórz plik recovery.conf: cp recovery.done to recovery.conf
- vi recovery.conf zmień adres ip: primary_conninfo = 'host = 10.0.66.2'
- rozpocznij postgresql
Więc moje pytania są teraz:
- Czy to właściwy sposób na zmianę ról?
- Czy ktoś zautomatyzował ten proces, jeśli tak, to co zrobiłeś?
- Jeśli włączona jest replikacja synchroniczna, zauważyłem, że nowy serwer główny nie będzie dokonywał żadnych transakcji, ponieważ czeka na odpowiedź urządzenia podrzędnego. Nie ma jednak slave'a, ponieważ drugi serwer, stary master jest wyłączony. Czy to prawda, czy muszę tymczasowo wyłączyć replikację synchroniczną, gdy nowy moduł podrzędny jest wyłączony?