PATRONİ-ETCD ve HAProxy İLE POSTGRESQL HIGH AVAILABILTY KURULUMU

Günümüzde, IT hizmetlerinden özellikle veri tabanı servisleri için yüksek erişilebilir (HA) ve ölçeklenebilir olması hizmet kalitesi için çok önemli etkenlerdendir. Oracle bunu RAC ile çok efektif olarak çözmektedir. İlişkisel veri tabanları içerisinde henüz Oracle’ın RAC (Real Aplication Cluster) çözümüne ulaşan bir çözüm henüz mevcut değildir. Postgresql tarafında ve Windows Sql server tarafında HA için always-on denen ve aktif-pasif olarak replikasını bulunduran çözümler mevcuttur. Bu çözümler için postgresql dünyasında açık kaynak ve ücretli olarak bir çok alternatif çözüm mevcuttur. Biz burada açık kaynak bir çözüm olan Patroni ile bir labaratuar ortamı oluşturmaya çalışacağız.

Peki kısaca Patroni ne yapıyor dersek;  High available (HA) postgresql kurulum, yönetim ve monitoring işlemleri geçekleştirilir. (Bilgi https://github.com/zalando/patroni )

Patroni için iki temel bileşen gerekir;

  • HAProxy : Yük dengelemek ve ölçeklendirilebilme kabiliyetleri için kullanılacak servis.
  • ETCD : Dağınık sistemler mimarisinde cluster yönetimi için kullanılacak servis.

Streaming, replication işlemlerini sağlar aynı zamanda Cluster konfigurasyonunuda gerçekleştirir. Mimaride her postgresql instance için bir patroni instance bulunur ve postgresql örneğini kontrol eder. Patroni topladığı bütün verileri distrubuted bir key-value store’da tutuyor (etcd,zookeper,consul vs.), patroni buraya bakarak primarydeki sorunları görür ve hangi replicanın primary olacağına karar vermesi gibi işlemleri buradaki bilgiler ışında yapacaktır. HA Proxy ise sürekli master node ile iletişim halindedir, master bilgisi için patroni API portu olan 8008’e istek gönderir masterdan gelen cevap 200OK iken diğer nodlardan gelen cevap 503 server unavailable dır. HA proxy bir virtural IP kullanır ve IP üzerinden postgres servislerine bağlantı yapılabilir. Bir arıza durumunda HA Proxy balans sağlayarak hizmetin kesilmesini engellemiş olacaktır buna da keepalived denmektedir.

Kuruluma geçerken kullanılan OS ler CentOS7 dir. Node lar aşağıdaki listedeki gibidir

120.120.100.140 etcd1.frkcvk.com        etcd1 --> ETCD Server
120.120.100.141 node1.frkcvk.com        node1 --> Patroni ve PostgreSQL
120.120.100.142 node2.frkcvk.com        node2 --> Patroni ve PostgreSQL
120.120.100.143 haproxy.frkcvk.com      haproxy --> HA Proxy 

Şimdi adım adım kurulumu gerçekleştirelim;

Install Epel Repo

sudo yum -y install epel-release
sudo yum -y install centos-release-scl-rh
sudo yum -y update

sudo shutdown -r now

Install PostgreSQL

Sadece node1 ve node2 için Postgresql kurulumu yapalım

# yum -y install centos-release-scl-rh
# yum -y install llvm-toolset-7-clang nano
# yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# yum -y install postgresql12-server postgresql12 postgresql12-devel

postgres userına şifre verelim ve nodeların birbirine root ve postgres user ile passordsuz geçiş yapabilmesini sağlayalım, ardından ortam değişkenlerimizide kontrol edelim

# passwd postgres
# su - postgres
$ cat .bash_profile
[ -f /etc/profile ] && source /etc/profile
PGDATA=/var/lib/pgsql/12/data
export PGDATA

PATH=$PATH:/usr/pgsql-12/bin
export PATH
# If you want to customize your settings,
# Use the file below. This is not overridden
# by the RPMS.
[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile


# systemctl stop postgres-12

Install Patroni

Versiyonu adresten kontrol ederek indirebilirsiniz Github

# sudo yum -y install https://github.com/cybertec-postgresql/patroni-packaging/releases/download/1.6.5-1/patroni-1.6.5-1.rhel7.x86_64.rpm

Patroni Ayarlarının Yapılması

patroni yaml file düzenlenmelidir aşağıdaki dizine yml dosyamızı kopyalayalım sonra içeriğini konfigüre edeceğiz.

# cp -p /opt/app/patroni/etc/postgresql.yml.sample /opt/app/patroni/etc/postgresql.yml

yml dosyamızı kendi parametrelerimize göre konfigüre edelim.

node2 için;

# cat /opt/app/patroni/etc/postgresql.yml
scope: postgres
namespace: /pg_cluster/
name: node2

restapi:
  listen: 120.120.100.142:8008
  connect_address: 120.120.100.142:8008


etcd:
  host: 120.120.100.140:2379

bootstrap:

  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:

  initdb:  # Note: It needs to be a list (some options need values, others are switches)
  - encoding: UTF8
  - data-checksums

  pg_hba:  # Add following lines to pg_hba.conf after running 'initdb'
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 120.120.100.141/0 md5
  - host replication replicator 120.120.100.142/0 md5
  - host all all 0.0.0.0/0 md5


  users:
    admin:
      password: admin
      options:
        - createrole
        - createdb

postgresql:
  listen: 120.120.100.142:5432
  connect_address: 120.120.100.142:5432
  data_dir: /var/lib/pgsql/12/data
  bin_dir: /usr/pgsql-12/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: replicator
    superuser:
      username: postgres
      password: postgres


tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

node1 için

# cat  /opt/app/patroni/etc/postgresql.yml
scope: postgres
namespace: /pg_cluster/
name: node1

restapi:
  listen: 120.120.100.141:8008
  connect_address: 120.120.100.141:8008


etcd:
  host: 120.120.100.140:2379

bootstrap:

  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:

  initdb:  # Note: It needs to be a list (some options need values, others are switches)
  - encoding: UTF8
  - data-checksums

  pg_hba:  # Add following lines to pg_hba.conf after running 'initdb'
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 120.120.100.141/0 md5
  - host replication replicator 120.120.100.142/0 md5
  - host all all 0.0.0.0/0 md5


  users:
    admin:
      password: admin
      options:
        - createrole
        - createdb

postgresql:
  listen: 120.120.100.141:5432
  connect_address: 120.120.100.141:5432
  data_dir: /var/lib/pgsql/12/data
  bin_dir: /usr/pgsql-12/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: replicator
    superuser:
      username: postgres
      password: postgres


tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

Install etcd

Bu test ortamı için yanlızca bir tane etcd için sunuc ayarlandı, fakat HA güçlendirmek için daha fazla suncu üzerine kurulum yapılması daha uygun olacaktır

# yum -y install etcd

etcd yapılandırma dosyasını düzenleyelim

vi /etc/etcd/etcd.conf

--Aşağıdaki satırları kendi durumumuza göre düzenleyerek yorumları kaldıralım

[Member]
ETCD_LISTEN_PEER_URLS="http://120.120.100.140:2380,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://120.120.100.140:2379,http://localhost:2379"

[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://120.120.100.140:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://120.120.100.140:2379"
ETCD_INITIAL_CLUSTER="default=http://120.120.100.140:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

Kaydedip ardından etcd servislerini .alıştırıp enable ediyoruz

# systemctl enable etcd
# systemctl start etcd

# systemctl status etcd
● etcd.service - Etcd Server
   Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-09-14 19:46:15 +03; 2s ago
 Main PID: 3104 (etcd)
    Tasks: 10
   Memory: 12.3M
   CGroup: /system.slice/etcd.service
           └─3104 /usr/bin/etcd --name=default --data-dir=/var/lib/etcd/default.etcd --listen-client-urls=http:...

Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: raft.node: c9b140df476e2dbe elected leader c9b140df476e2dbe at term 2
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: setting up the initial cluster version to 3.3
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: set the initial cluster version to 3.3
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: enabled capabilities for version 3.3
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: published {Name:default ClientURLs:[http://120.120.100.140:237...3e34
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: ready to serve client requests
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: serving insecure client requests on 127.0.0.1:2379, this is st...ged!
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: ready to serve client requests
Sep 14 19:46:15 etcd1.frkcvk.com etcd[3104]: serving insecure client requests on 120.120.100.140:2379, this...ged!
Sep 14 19:46:15 etcd1.frkcvk.com systemd[1]: Started Etcd Server.
Hint: Some lines were ellipsized, use -l to show in full.

# etcdctl cluster-health
member c9b140df476e2dbe is healthy: got healthy result from http://120.120.100.140:2379
cluster is healthy

etcd çalşıyor şimdi node1 ve node2 de patroni servislerini çalıştıralım, fakat öncesinde postgres userlarına şifre verelim ve root userları ile node1 ve node2 arasında şifresiz ssh yaılabilecek şekilde ssh-copy-id yapalım.

systemctl enable patroni
systemctl start patroni

# systemctl status patroni
● patroni.service - PostgreSQL high-availability manager
   Loaded: loaded (/usr/lib/systemd/system/patroni.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-09-20 15:08:47 +03; 57s ago
 Main PID: 4250 (python3.6)
    Tasks: 13
   Memory: 98.2M
   CGroup: /system.slice/patroni.service
           ├─4250 python3.6 /opt/app/patroni/bin/patroni /opt/app/patroni/etc/postgresql.yml
           ├─4268 /usr/pgsql-12/bin/postgres -D /var/lib/pgsql/12/data --config-file=/var/lib/pgsql/12/data/postgresql.conf --listen_addresses=120.120.100.141 --port=5432 --cluster_name=postgres --wal_level=replica --hot_standby=on...
           ├─4270 postgres: postgres: logger
           ├─4271 postgres: postgres: startup   recovering 000000010000000000000003
           ├─4272 postgres: postgres: checkpointer
           ├─4273 postgres: postgres: background writer
           ├─4274 postgres: postgres: stats collector
           ├─4283 postgres: postgres: postgres postgres 120.120.100.141(35166) idle
           └─4288 postgres: postgres: walreceiver   streaming 0/30006C0

Sep 20 15:09:09 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:09,526 INFO: no action.  i am a secondary and i am following a leader
Sep 20 15:09:19 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:19,521 INFO: Lock owner: node2; I am node1
Sep 20 15:09:19 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:19,522 INFO: does not have lock
Sep 20 15:09:19 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:19,524 INFO: no action.  i am a secondary and i am following a leader
Sep 20 15:09:29 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:29,524 INFO: Lock owner: node2; I am node1
Sep 20 15:09:29 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:29,524 INFO: does not have lock
Sep 20 15:09:29 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:29,526 INFO: no action.  i am a secondary and i am following a leader
Sep 20 15:09:39 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:39,524 INFO: Lock owner: node2; I am node1
Sep 20 15:09:39 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:39,524 INFO: does not have lock
Sep 20 15:09:39 node1.frkcvk.com patroni[4250]: 2021-09-20 15:09:39,526 INFO: no action.  i am a secondary and i am following a leader

node2 için

# systemctl status patroni
● patroni.service - PostgreSQL high-availability manager
   Loaded: loaded (/usr/lib/systemd/system/patroni.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-09-20 15:08:07 +03; 1min 47s ago
 Main PID: 4196 (python3.6)
    Tasks: 15
   Memory: 233.4M
   CGroup: /system.slice/patroni.service
           ├─4196 python3.6 /opt/app/patroni/bin/patroni /opt/app/patroni/etc/postgresql.yml
           ├─4224 /usr/pgsql-12/bin/postgres -D /var/lib/pgsql/12/data --config-file=/var/lib/pgsql/12/data/postgresql.conf --listen_addresses=120.120.100.142 --port=5432 --cluster_name=postgres --wal_level=replica --hot_standby=on...
           ├─4225 postgres: postgres: logger
           ├─4227 postgres: postgres: checkpointer
           ├─4228 postgres: postgres: background writer
           ├─4229 postgres: postgres: walwriter
           ├─4230 postgres: postgres: autovacuum launcher
           ├─4231 postgres: postgres: stats collector
           ├─4232 postgres: postgres: logical replication launcher
           ├─4237 postgres: postgres: postgres postgres 120.120.100.142(52762) idle
           └─4292 postgres: postgres: walsender replicator 120.120.100.141(46776) streaming 0/30006C0

Sep 20 15:09:09 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:09,522 INFO: Lock owner: node2; I am node2
Sep 20 15:09:09 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:09,527 INFO: no action.  i am the leader with the lock
Sep 20 15:09:19 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:19,521 INFO: Lock owner: node2; I am node2
Sep 20 15:09:19 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:19,524 INFO: no action.  i am the leader with the lock
Sep 20 15:09:29 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:29,524 INFO: Lock owner: node2; I am node2
Sep 20 15:09:29 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:29,527 INFO: no action.  i am the leader with the lock
Sep 20 15:09:39 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:39,524 INFO: Lock owner: node2; I am node2
Sep 20 15:09:39 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:39,527 INFO: no action.  i am the leader with the lock
Sep 20 15:09:49 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:49,523 INFO: Lock owner: node2; I am node2
Sep 20 15:09:49 node2.frkcvk.com patroni[4196]: 2021-09-20 15:09:49,525 INFO: no action.  i am the leader with the lock

Install HA Proxy

HA Proxy gelen istekleri sunuculara yönlendiren TCP ve HTTP uygulamalar için HA sağlayan bir load balancer ve proxy server görevi gören açık kaynak bir yazılımdır. Bizim durumuzda HA Proxy gelen isteği o anda master olan sunucu hangisi ise ona iletme görevini yerine getirecektir. Patroni master nodun çevirim içi olarak görünmesini sağlayarak HA Proxynin mastera bağlantıları yönlendirmesini sağlayacaktır. Şimdi HA Proxy için ayarladığımız sunucu üzerine yazılımımızı yükleyerek gerekli ayarlarımızı yapmaya başlayalım.

[[email protected] ~]# yum -y install haproxy

Inidirme tamamlandıktan sonra haproxy.cfg dosyasını düzenleyelim

# cp -p /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bkp
# vi /etc/haproxy/haproxy.cfg
  
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    tcp
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /

listen postgres
    bind *:5000
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server node1 120.120.100.141:5432 maxconn 1000 check port 8008
    server node2 120.120.100.142:5432 maxconn 1000 check port 8008

ARtık HA Proxyi enable ederek başlatabiliriz.

# systemctl enable haproxy
# systemctl start haproxy

# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-09-17 14:37:33 +03; 46s ago
 Main PID: 8107 (haproxy-systemd)
    Tasks: 3
   Memory: 2.4M
   CGroup: /system.slice/haproxy.service
           ├─8107 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
           ├─8108 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
           └─8109 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

HA proxy http arayüzünden kontrolümüzü yapalım

Arayüzden de gördüğümüz üzere node2 patronide master oldu ve node 1 ise standby durumda bekliyor. postgres sunucumuz bağlantı yapalım.

Pgadmin ile haproxy sunucumuza bağlantı yapalım;

Bağlantımızı yaptık, şimdi node2 deki postgres servisini durdurarak bir deneme yapalım bakalım node1 aktif olup servislerimiz devam edecek mi? Bu arada TEST adında bir database oluşturdum, ardından MYSCHEMA adında bir Schema ve altına da Test adında bir tablo yaratarak bir kayıt insert edip commit ettim, bakalım neler olacak.

Şimdi node2 yani master node da patroni servisini durduruyorum.

# systemctl stop patroni
[[email protected] ~]# systemctl status patroni
● patroni.service - PostgreSQL high-availability manager
   Loaded: loaded (/usr/lib/systemd/system/patroni.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Mon 2021-09-20 15:31:15 +03; 2s ago
  Process: 4196 ExecStart=/opt/app/patroni/bin/patroni ${PATRONI_CONFIG_LOCATION} (code=exited, status=0/SUCCESS)
 Main PID: 4196 (code=exited, status=0/SUCCESS)

Sep 20 15:30:39 node2.frkcvk.com patroni[4196]: 2021-09-20 15:30:39,525 INFO: no action.  i am the leader with the lock
Sep 20 15:30:49 node2.frkcvk.com patroni[4196]: 2021-09-20 15:30:49,521 INFO: Lock owner: node2; I am node2
Sep 20 15:30:49 node2.frkcvk.com patroni[4196]: 2021-09-20 15:30:49,524 INFO: no action.  i am the leader with the lock
Sep 20 15:30:59 node2.frkcvk.com patroni[4196]: 2021-09-20 15:30:59,522 INFO: Lock owner: node2; I am node2
Sep 20 15:30:59 node2.frkcvk.com patroni[4196]: 2021-09-20 15:30:59,525 INFO: no action.  i am the leader with the lock
Sep 20 15:31:09 node2.frkcvk.com patroni[4196]: 2021-09-20 15:31:09,523 INFO: Lock owner: node2; I am node2
Sep 20 15:31:09 node2.frkcvk.com patroni[4196]: 2021-09-20 15:31:09,526 INFO: no action.  i am the leader with the lock
Sep 20 15:31:14 node2.frkcvk.com systemd[1]: Stopping PostgreSQL high-availability manager...
Sep 20 15:31:15 node2.frkcvk.com patroni[4196]: 2021-09-20 15:31:15,086 INFO: Lock owner: node2; I am node2
Sep 20 15:31:15 node2.frkcvk.com systemd[1]: Stopped PostgreSQL high-availability manager.
[[email protected] ~]#

Şidi HA Proxy html sayfasından bir kontrol yapalım,

node1 up olmuş görünüyor pgadmin ile haproxy üzerinden tekrar bağlanalım ve bir sorgu göderelim.

Evet Patroni Cluster HA güzel bir şekilde çalışıyor. şimdi node2 yi tekrar çalıştıralım.

# systemctl start patroni

# systemctl status patroni
● patroni.service - PostgreSQL high-availability manager
   Loaded: loaded (/usr/lib/systemd/system/patroni.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-09-20 15:52:45 +03; 3s ago
 Main PID: 5327 (python3.6)
    Tasks: 12
   Memory: 36.0M
   CGroup: /system.slice/patroni.service
           ├─5327 python3.6 /opt/app/patroni/bin/patroni /opt/app/patroni/etc/postgresql.yml
           ├─5348 /usr/pgsql-12/bin/postgres -D /var/lib/pgsql/12/data --config-file=/var/lib/pgsql/12/data/pos...
           ├─5349 postgres: postgres: logger
           ├─5350 postgres: postgres: startup   waiting for 000000020000000000000003
           ├─5352 postgres: postgres: checkpointer
           ├─5353 postgres: postgres: background writer
           ├─5354 postgres: postgres: stats collector
           └─5359 postgres: postgres: postgres postgres 120.120.100.142(52776) idle

Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:45,626 INFO: postmaster pid=5348
Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 120.120.100.142:5432 - accepting connections
Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 120.120.100.142:5432 - accepting connections
Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:45,641 INFO: Lock owner: node1; I am node2
Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:45,642 INFO: does not have lock
Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:45,642 INFO: establishing a new patroni co...ster
Sep 20 15:52:45 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:45,656 INFO: no action.  i am a secondary ...ader
Sep 20 15:52:46 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:46,216 INFO: Lock owner: node1; I am node2
Sep 20 15:52:46 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:46,216 INFO: does not have lock
Sep 20 15:52:46 node2.frkcvk.com patroni[5327]: 2021-09-20 15:52:46,221 INFO: no action.  i am a secondary ...ader
Hint: Some lines were ellipsized, use -l to show in full.

Node 2 tekrar Patroni Cluster a Secondary (Standby) olarak eklendi. Postgresql kullanıcı işlemleri ve temel olarak veritabanı yönetimi ile ilgili aşağıdaki yazıdan yararlanabilirsiniz.

patronictl komutuna bir göz atalım

# patronictl --help
Usage: patronictl [OPTIONS] COMMAND [ARGS]...

Options:
  -c, --config-file TEXT  Configuration file
  -d, --dcs TEXT          Use this DCS
  -k, --insecure          Allow connections to SSL sites without certs
  --help                  Show this message and exit.

Commands:
  configure    Create configuration file
  dsn          Generate a dsn for the provided member, defaults to a dsn of...
  edit-config  Edit cluster configuration
  failover     Failover to a replica
  flush        Discard scheduled events (restarts only currently)
  history      Show the history of failovers/switchovers
  list         List the Patroni members for a given Patroni
  pause        Disable auto failover
  query        Query a Patroni PostgreSQL member
  reinit       Reinitialize cluster member
  reload       Reload cluster member configuration
  remove       Remove cluster from DCS
  restart      Restart cluster member
  resume       Resume auto failover
  scaffold     Create a structure for the cluster in DCS
  show-config  Show cluster configuration
  switchover   Switchover to a replica
  version      Output version of patronictl command or a running Patroni...

Şimdi patroni Cluster durumunu bir kontrol edelim lag var mı? vs

# patronictl -c postgresql.yml list
+ Cluster: postgres (7009986580612358263) ----+----+-----------+
| Member |       Host      |  Role  |  State  | TL | Lag in MB |
+--------+-----------------+--------+---------+----+-----------+
| node1  | 120.120.100.141 |        | running |  4 |         0 |
| node2  | 120.120.100.142 | Leader | running |  4 |           |
+--------+-----------------+--------+---------+----+-----------+