Patroni Cluster Ayarları
Global Settings
scope, namespace ve name parametreleri sunucunun hangi cluster’ın üyesi (node)
olduğunu belirtir.
- scope : postgresql cluster ismi girilir.
- namespace : DCS (etcd, consule vb.) üzerinde patroni cluster’ın
bilgilerini tuttuğu yolu (path) belirtir. - name : Patroni cluster’da bu node/sunucuyu tanımlamak için verilen
herhangi bir benzersiz (unique) isim. - rest api : Leader yani primary sunucunun seçimi sırasında patroninin
kendi kullandığı rest api’dir.
ETCD altındaki hostlar, ETCD host IP adresidir.
data_dir’in postgresql veritabanı için datafile lokasyonu olması
gerekmektedir.
Dynamic Configuration Setings (DCS)
DCS’te yapılan ayarlar Distributed Configuration Store’da yani etcd’de tutulur.
Ve tüm sunuculara asenkron olarak uygulanır.loop_wait, ttl, postgresql.parameters.max_connections, vb. parametreler
postgresql.parameters.max_worker_processes
sadece burada ayarlanabilir. Bu ayarları $PGDATA/patroni.dynamic.json
dosyasından görmek mümkündür.postgresql.listen, postgresql.data_dir gibi ayarlarda sadece lokalde
patroni konfigurasyon dosyasında veya konfigurasyon değişkenleri ile ayarlanabilir.
- loop_wait : Loop’un beklemede kalacağı saniye cinsinden süre (default değer 10 sn).
- ttl : Autofail over işlemi gerçekleştirmeden önce beklenecek saniye cinsinden süre (default değer 30 sn ).
- retry_timeout : DCS (etcd) postgresql arasındaki veri alışverişindeki zaman aşımı. Network vb. erişim arızaları burada belirtilen süreyi geçmediği sürece failover gerçekleşmez.
- Maximum_lag_on_failover : Leader/primary adayı olabilecek standby’ların byte cinsinden gecikme tolerans sınırı.
- Postgresql.parameters : Veritabanı ayarlarının yapıldığı bölüm.
Postgresql instance’ının çalıştığı bir makineye patroni kuruldu ise, aşağıdaki initdb
satırlarını config.yml dosyasından bootstrap bölümünün altından kaldırılmaldır.
(sadece primary sunucuda).
initdb:
- - Encoding: UTF8
- data-checksums
- use_slots : Replikasyon için slot kullanılıp kullanılmayacağını belirtir. Postgresql
9.4+ sürümlerinde default değer ‘true’ olarak belirlenir. Slot önerilen bir yöntemdir.
standby’a işlenmemiş WAL dosyalarını sildirmez.
Patroni cluster ayarlarının değiştirilmesi
Patroni cluster ayarlarının değiştirilmesi için çeşitli yöntemler vardır ;
-DCS’te dinamik konfigurasyonlar yapılır. Burada yapılan değişiklik tüm nodlara
uygulanır.
-lokal *.yml (/etc/patroni/patroni.yml) konfigurasyon dosyasında
yapılan değişiklikler dinamik konfigurasyonu ezer.
-Veritabanı seviyesinde “alter system” komutlarıyla ve lokal değişkenlerle
(environment configuration) yapılabilir.
1- Restart gerektirmeyen, dinamik değiştirilebilen ayarlar
export EDITOR=vim # vim ile açması içinpatronictl -c /etc/patroni/config.yml edit-config erp
vim editörünün komutları ile değişiklik yapılıp kayıt edilir.
Değişikliklerin diğer nodlara da uygulandığı görülür.(patronictl -c /etc/patroni/config.yml show-config erp)
2- Restart gereken değişiklikler
Aynı şekilde edit-config ile değişiklik yapılıp,
patronictl -c /etc/patroni/config.yml edit-config erp
restart bekleyen sunucular listelenir.
patronictl -c /etc/patroni/config.yml list erp
Hangi parametrenin restart beklediğini görmek için;select name, setting, short_desc, sourcefile, sourceline
from pg_settings where pending_restart ;
Tek tek de restart edilebilir. (Önce primary)
patronictl -c /etc/patroni/config.yml restart erp pgdb1
patronictl -c /etc/patroni/config.yml restart erp pgdb2
Bütün nodlar da restart edilebilir.patronictl -c /etc/patroni/config.yml restart erp
3- “alter system” veritabanında seviyesinde yapılan değişikliler
Tüm nodlara uygulanmayacaktır. Tüm veritabanı sunucularında tek tek çalıştırılması
gerekir. Tüm cluster seviyesinde aynı olması gereken ayarlar vardır. Bu ayarları primary
sunucudan farklı olan standby’lar açılamaz log dosyasına konfig farklılığını yazar.
Tüm sunucularda aynı olması zorunlu olan ayarlar;
max_connections
max_locks_per_transaction
max_worker_processes
max_prepared_transactions
wal_level
wal_log_hints
track_commit_timestamp
Sunucularda farklı değer alabilecek ayarlar ;max_wal_senders
max_replication_slots
wal_keep_segments
wal_keep_size
Bütün sunucular her an primary adayı olduğu için aynı ayarlara ve kaynaklara sahip
olmaları önerilir.
DCS’den (etcd) status kontrol edilir.
postgres@pgdb1:~$ sudo apt install jq -y
postgres@pgdb1:~$ curl http://pgdb1:8008/master | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 473 0 473 0 0 20565 0 --:--:-- --:--:-- --:--:-- 20565
{
“state”: “running”,
“postmaster_start_time”: “07:21:41.947592+00:00”,
“role”: “master”,
“server_version”: 130008,
“xlog”: {
“location”: 83886296
},
“timeline”: 1,
“replication”: [
{
“usename”: “replicator”,
“application_name”: “pgdb2”,
“client_addr”: “192.168.56.72”,
“state”: “streaming”,
“sync_state”: “async”,
“sync_priority”: 0
}
],
“dcs_last_seen”: 1662103583,
“database_system_identifier”: “7138428822420387146”,
“patroni”: {
“version”: “2.1.3”,
“scope”: “erp”
}
}
curl -s http://pgdb1:8008/patroni | jq .
curl -s http://pgdb2:8008/patroni | jq .
curl -s http://pgdb1:8008/erp | jq .
curl -s http://pgdb2:8008/erp | jq .
