sobota, 21 lipca 2018

DB Cluster Active Standby Postgres-10 + repmgr4

Cześć,

Dzisiaj szybki rzut okiem, jak zbudować dwu nodowy kluster bazodanowy active standby z użyciem postgres-10 i repmgr4. Calość na CentOS7.

Z góry przepraszam za uproszenia, to co prezentuje to minimalna działająca konfiguracja - którą każdy może następnie dostosować do swoich potrzeb.

Zakładam, że dysponujemy dwoma serwerami, w jednej podsieci.

Zaczynamy od instalacji postgresa:

Instalujemy repozytorium postgresa-10 dla CentOS:
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
Nastepnie instalujemy postgresa na obu nodach:
yum install postgresql-server
Inicjujemy postawowe systemowe bazy danych dla postgresa:
/usr/pgsql-10/bin/postgresql-10-setup initdb
Dodajemy postgres-10 do autostartu:
systemctl enable postgresql-10
Teraz czas na rep managera

Instalujemy repozytorium:
yum install https://rpm.2ndquadrant.com/site/content/2ndquadrant-repo-10-1-1.el7.noarch.rpm
Instalujemy sam pakiet:
yum install repmgr10
Teraz czas na konfiguracje. Dodajemy Master i Slave IP do pliku PG_HBA.conf tak aby oba nody mogły się ze sobą połączyć, w naszym wypadku user repmgr bedzie miał uprawnina trust:
PG_HBA.conf:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   repmgr        repmgr                                    trust
host    repmgr        repmgr            127.0.0.1/32            trust
host    repmgr        repmgr            172.30.10.10/32        trust   #Master IP
host    repmgr        repmgr            172.30.10.11/32          trust   #Slave IP

# "local" is for Unix domain socket connections only
local   all             all                                     ident
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             172.30.10.1/24          md5
Następnie czas na postawową konfigurację postgresql.conf'a tak aby słuchał na wszystkich inteface'ach i ładował repmgra
listen_addresses = '*'      
port = 5432    
shared_preload_libraries = 'repmgr'       
Dodatkowo dodajemy na masterze następujące wpisy:
max_wal_senders = 10
wal_level = 'replica'
hot_standby = on
archive_mode = on
archive_command = '/bin/true'
Teraz możemy wystarować "mastera":
systemctl start postgresql-10
Tworzymy usera repmgr niezbędnego do replikacji:
sudo -u postgres
createuser -s repmgr
createdb repmgr -O repmgr
Konfigueujemy samego repmgra, domyslnie jest to plik: /etc/repmgr/10/repmgr.conf

Na masterze:
node_id=1
  node_name=node1
  conninfo='host=node1 user=repmgr dbname=repmgr connect_timeout=2'
  data_directory='/var/lib/pgsql/10/data'
failover=automatic
promote_command='/usr/pgsql-10/bin/repmgr standby promote -f /etc/repmgr/10/repmgr.conf --log-to-file'
follow_command='/usr/pgsql-10/bin/repmgr standby follow -f /etc/repmgr/10/repmgr.conf--log-to-file --upstream-node-id=%n'
monitoring_history=yes
I na replice:
node_id=2
    node_name=node2
    conninfo='host=node2 user=repmgr dbname=repmgr connect_timeout=2'
    data_directory='/var/lib/pgsql/10/data'
failover=automatic
promote_command='/usr/pgsql-10/bin/repmgr standby promote -f /etc/repmgr/10/repmgr.conf --log-to-file'
follow_command='/usr/pgsql-10/bin/repmgr standby follow -f /etc/repmgr/10/repmgr.conf --log-to-file --upstream-node-id=%n'
monitoring_history=yes
Rejestrujemy primary node'a na masterze:
su - postgres
/usr/pgsql-10/bin/repmgr -f /etc/repmgr/10/repmgr.conf primary register
/usr/pgsql-10/bin/repmgr -f /etc/repmgr/10/repmgr.conf cluster show
Teraz przyszedl czas na skopiowanie danych do repliki: (pamietajmy aby postgres na replice był wyłączony)
su - postgres
/usr/pgsql-10/bin/repmgr -h node1 -U repmgr -d repmgr -f /etc/repmgr/10/repmgr.conf standby clone -F
Po skopiowaniu danych możemy uruchomić postgresa na replice:
service postgres-10 start
Teraz możemy zarejestrować drugiego node'a. W tym celu na replice, wykonujemy nastepujące polecenia:
su - postgres
/usr/pgsql-10/bin/repmgr -f /etc/repmgr/10/repmgr.conf standby register
Finalnie, sprawdzamy status klastra czy wszystko dziala, oraz czy oba node'y są widoczne:
/usr/pgsql-10/bin/repmgr -f /etc/repmgr/10/repmgr.conf cluster show
Sukces, dwunodowy klaster jest gotowy. Teraz jeśli chcemy, aby klaster automatycznie wykonywał failover pozostaje odpalić rep manager guarda jako daemon, tak by czuwał czy oba node'y działają:
sudo -u postgres /usr/pgsql-10/bin/repmgrd -f /etc/repmgr/10/repmgr.conf --pid-file /tmp/repmgrd.pid --daemonize 

Brak komentarzy:

Publikowanie komentarza