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.
[root@haproxy ~]# 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
[root@node2 ~]# 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.
[root@node2 ~]#
Ş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 | |
+--------+-----------------+--------+---------+----+-----------+
Bir yanıt yazın