Patroni, primary veri tabanı sunucusunda bakım, yazılım veya donanım arızası durumların da Primary Node’unun otomatik olarak bir Standby Node’una yük devretmesini ve yüksek kullanılabilirliği sağlayan PostgreSQL cluster yönetimi modülüdür.
Patroninin tek başına kurulumu PostgreSQL kümesine yük devretme ve yüksek kullanılabilirlik niteliği kazandırmaya yeterli değildir. Patroni ile birlikte Distributed Configuration Store araçlarından birine ihtiyaç vardır. Bu kapsamda Patroni ile birlikte ETCD kullanılacaktır.

ETCD: PostgreSQL kümesinin durumunu saklar. Herhangi bir PostgreSQL düğümünün durumunda herhangi bir değişiklik bulunduğunda, Patroni ETCD anahtar/değer deposundaki durum değişikliğini günceller. ETCD, bu bilgiyi ana düğümü seçmek için kullanır ve kümeyi ayakta tutmayı sağlar. ETCD servisi fail olursa veri tabanı clusterıda servis hizmet veremez hale gelir. Bu sebepten dolayı ETCD servisi için de bir küme oluşturulması tavsiye edilmektedir.

vi install_etcd.sh
ETCD_VER=v3.5.18
# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}
rm -f /opt/tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /opt/tmp/etcd-download-test && mkdir -p /opt/tmp/etcd-download-test
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /opt/tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /opt/tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /opt/tmp/etcd-download-test --strip-components=1
rm -f /opt/tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
mv /opt/tmp/etcd-download-test/etcd* /usr/local/bin/
Etcd servisini kurmak için bir tane bash script oluşturdum bu sayede belirttiğim versiyonda ki etcd’yi kurmuş olacağım.

chmod +x install_etcd.sh ve ./install_etcd.sh
Linux sistemlerinde bir betik dosyasını çalıştırmadan önce, ona çalıştırma izni (execute permission) vermek gerekebilir.

etcd -version
Kurulumu sağladıktan sonra etcd versiyonlarını kontrol ediyoruz.

mkdir /etc/etcd mkdir /var/lib/etcd
/etc/etcd dizinini oluşturma sebebimiz ETCD’nin yapılandırma (configuration) dosyalarının saklandığı yerdir.Burada etcd.conf.yml gibi yapılandırma dosyaları bulunur.Servis başlatıldığında hangi ayarlarla çalışacağını buradaki dosyalardan okur.
/var/lib/etcd dizinini oluşturma sebebim ETCD’nin verilerini (data) sakladığı dizin olduğundan.Veritabanı dosyaları burada tutulur ve ETCD’nin çalışırken yönettiği anahtar-değer (key-value) çiftleri burada depolanır.

groupadd etcd
useradd -g etcd etcd
usermod --uid 999 etcd
groupmod --gid 999 etcd
chown -R etcd:etcd /var/lib/etcd
ETCD’yi güvenli bir şekilde çalıştırmak için özel bir kullanıcı ve grup oluşturulur. Böylece ETCD, root yetkileri olmadan çalışabilir.ETCD’yi güvenli bir şekilde çalıştırmak için önce groupadd etcd komutu ile etcd adında bir grup oluşturulur. Ardından, useradd -g etcd etcd komutu kullanılarak etcd grubuna ait etcd adlı kullanıcı eklenir.Sistem üzerinde tutarlılık sağlamak için usermod — uid 999 etcd komutu ile etcd kullanıcısının UID’si 999 olarak ayarlanır ve groupmod — gid 999 etcd komutu ile etcd grubunun GID’si 999 olarak belirlenir.Son olarak, chown -R etcd:etcd /var/lib/etcd komutu çalıştırılarak /var/lib/etcd dizininin sahipliği etcd kullanıcısına ve grubuna atanır. Bu işlem, ETCD’nin güvenli bir şekilde çalışmasını ve yalnızca yetkilendirilmiş kullanıcı tarafından erişilmesini sağlar.

vi /lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/local/bin/etcd --config-file /etc/etcd/etcd.conf.yaml"
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
ETCD’yi bir systemd servisi olarak çalıştırmak için /lib/systemd/system/etcd.service dosyası oluşturulur. Bu servis dosyası, ETCD’nin başlangıçta otomatik olarak çalışmasını, ağ bağlantısı sağlandıktan sonra başlatılmasını ve hata durumunda yeniden başlatılmasını sağlar.[Service] bölümünde, ETCD’nin çalışma dizini (/var/lib/etcd/), yapılandırma dosyası (/etc/etcd/etcd.conf.yaml) ve maksimum açık dosya sınırı (LimitNOFILE=65536) gibi ayarlar tanımlanır. ExecStart satırında, sistemdeki işlemci sayısına göre GOMAXPROCS ayarlanarak ETCD’nin optimize çalışması sağlanır.Son olarak, [Install] bölümünde multi-user.target hedefi ile sistem açılışında servisin otomatik başlaması sağlanır.

vi /etc/etcd/etcd.conf.yaml
name: 'etcd01-test'
initial-cluster-token: PGSQL_ETCD
initial-cluster-state: new
initial-cluster: etcd01-test=http://10.0.1.100:2380,etcd02-test=http://10.0.1.101:2380,etcd03-test=http://10.0.1.102:2380
data-dir: /var/lib/etcd
initial-advertise-peer-urls: http://10.0.1.100:2380
advertise-client-urls: http://10.0.1.100:2379
listen-client-urls: http://10.0.1.100:2379,http://127.0.0.1:2379
listen-peer-urls: http://10.0.1.100:2380,http://127.0.0.1:2380
log-level: warn
ETCD kümesini (cluster) yapılandırmak için /etc/etcd/etcd.conf.yaml dosyası oluşturulur. Bu dosya, ETCD’nin ağ yapılandırmasını, küme üyelerini ve çalışma ayarlarını belirler.ETCD kümesini başarılı bir şekilde yapılandırmak için her düğümün name parametresi benzersiz olmalıdır. Örneğin, bir kümede etcd01-test, etcd02-test, ve etcd03-test gibi isimler kullanılmalıdır. Kümenin bir bütün olarak tanımlanmasını sağlamak için tüm düğümlerde initial-cluster-token aynı olmalı ve initial-cluster-state yeni bir küme kuruluyorsa new, var olan bir kümeye düğüm ekleniyorsa existing olarak ayarlanmalıdır.Kümedeki düğümlerin birbiriyle iletişim kurabilmesi için initial-cluster parametresi, her düğümün adresini içerecek şekilde tanımlanır. Örneğin, etcd01-test=http://10.0.1.100:2380, etcd02-test=http://10.0.1.101:2380, etcd03-test=http://10.0.1.102:2380 gibi bir yapı oluşturulmalıdır. Tüm düğümlerin veri saklama alanı olarak data-dir parametresi ile aynı dizin kullanılması gereklidir, genellikle /var/lib/etcd seçilir.Düğümlerin birbirleriyle haberleşebilmesi için initial-advertise-peer-urls her düğümün kendi IP adresine göre belirlenmeli, örneğin http://10.0.1.100:2380, http://10.0.1.101:2380, http://10.0.1.102:2380 şeklinde ayarlanmalıdır. Aynı şekilde, istemcilerin bağlanacağı advertise-client-urls parametresi de her düğümün kendi IP adresine göre ayarlanmalı ve dışarıya açık olmalıdır. ETCD’nin istemci bağlantılarını dinlediği listen-client-urls genellikle localhost ve düğümün IP adresini içerirken, listen-peer-urls parametresi düğümler arası iletişimi sağlamak için her düğümün kendi IP adresine göre belirlenmelidir.Gereksiz sistem yükünü önlemek için log seviyesi log-level parametresi warn olarak ayarlanabilir. Bu yapılandırmaların doğru şekilde yapılması, ETCD düğümlerinin güvenilir ve ölçeklenebilir bir küme olarak çalışmasını sağlar.

systemctl start etcd
Etcd servisini node’larımızda başlatıyoruz.

etcdctl member list
etcdctl member list komutu, ETCD kümesindeki tüm düğümleri (node’ları) listeler.Her düğümün benzersiz kimliği (örneğin, 3c2d95f2…) bulunmaktadır.Başlangıç durumu (started) gösterilmektedir.Peer URL’leri (örneğin, http://10.0.1.102:2380) düğümlerin birbirleriyle nasıl iletişim kurduğunu gösterir.Client URL’leri (http://10.0.1.102:2379) istemcilerin bağlanacağı adreslerdir.false ifadesi, düğümün şu an leader olmadığını, yani lider seçilmediğini gösterir.Eğer tüm düğümler listeleniyor ve doğru adreslerle görünüyorlarsa, küme başarılı bir şekilde çalışıyor demektir. Ancak bir düğüm eksikse veya false yerine true yazan bir düğüm yoksa, lider seçimi veya bağlantılarla ilgili bir sorun olabilir.Etcd kurulumu burada tamamlanıyor artık PgSQL’i kurabiliriz.
PatroniCluster öncesi 2 tane node kurdum. Bu node’ları ayarlama yaparken data dizinini farklı oluşturmak istedim. göründüğü gibi /patroni diye bir dizin belirttim.

Kurulum öncesi “https://www.postgresql.org/download/linux/ubuntu/” adresinden hangi işletim sistemine uygun olan versiyonu seçip indireceğiz. Burada benim sunucumda tek farklı olan kısım hardened bir imaj olduğunda dolayı ekstra olarak bir kaç dosyaya izin vereceğiz. Standart bir ubuntu22.04 olanlar ise kurulumu direkt yapabilir.

install -d /usr/share/postgresql-common/pgdg
install -d /usr/share/postgresql-common/pgdg komutu, /usr/share/postgresql-common/pgdg dizinini oluşturur.install -d → mkdir komutu gibi çalışır, ancak gerekli izinleri ve sahiplik ayarlarını otomatik yapar./usr/share/postgresql-common/pgdg → PostgreSQL için dağıtım (PGDG — PostgreSQL Global Development Group) ile ilgili dosyaların saklanabileceği bir dizindir.

curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc — fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
Bu komut, PostgreSQL’in GPG anahtarını, PostgreSQL APT repo paketlerinin doğruluğunu kontrol edebilmek için kullanmak üzere belirttiğiniz dosya yoluna indirir.

ll /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc
Bu komut, belirtilen dosyanın bulunduğu dizindeki dosya izinleri, sahibi, boyutu, son değiştirilme tarihi ve benzeri bilgileri gösterecektir. Eğer dosya mevcut değilse, komut çıktısında “No such file or directory” gibi bir hata mesajı alırsınız.

chmod 644 /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc
644: Dosya sahibine (owner) okuma (r) ve yazma (w) izni verir, grup (group) ve diğer kullanıcılara (others) sadece okuma (r) izni verir.Bu komut, dosyanın güvenli bir şekilde erişilebilir olmasını sağlar, çünkü yalnızca dosya sahibi yazma iznine sahip olacak ve başkaları sadece okuma yapabilecektir.

sudo sh -c ‘echo “deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’
Bu komut, PostgreSQL’in resmi APT reposunu Ubuntu veya Debian tabanlı bir sisteme eklemek için kullanılır. İlk olarak, sudo komutu ile yönetici hakları elde edilir ve ardından sh -c komutuyla bir kabuk (shell) komutu çalıştırılır. echo komutu, PostgreSQL’in APT reposunun adresini oluşturur ve bu adresin güvenlik doğrulaması için kullanılan imza anahtarının yerini belirtir. Bu adres, sistemin sürümüne göre (örneğin, Ubuntu’nun bir sürümü gibi) dinamik olarak değiştirilir. Son olarak, oluşturulan bu metin, /etc/apt/sources.list.d/pgdg.list dosyasına yazılır. Bu dosya, PostgreSQL’in resmi paketlerinin APT aracılığıyla indirilebilmesi için gereklidir. Bu işlem, sistemin PostgreSQL paketleriyle güncellenmesini sağlar ve güvenlik anahtarının doğruluğunu kontrol ederek, paketlerin güvenli bir şekilde yüklenmesini sağlar.

apt update

apt install postgresql-16 patroni/jammy-pgdg postgresql-16-timescaledb/jammy-pgdg
PostgreSQL 16 veritabanı sistemini, Patroni’yi yüksek erişilebilirlik (HA) için ve TimescaleDB’yi zaman serisi verisi yönetimi için Ubuntu sistemine kurar. İlk olarak, postgresql-16 paketi, PostgreSQL’in 16. sürümünü kurarak veritabanı sistemini hazırlar. Ardından, patroni/jammy-pgdg paketi yüksek erişilebilirlik sağlayan Patroni’yi yükler. Patroni, PostgreSQL kümeleri oluşturup, bu kümelerde otomatik failover ve replikasyon yönetimi sağlar. Son olarak, postgresql-16-timescaledb/jammy-pgdg paketi, PostgreSQL’e zaman serisi verileri için optimize edilmiş TimescaleDB eklentisini entegre eder. Bu komut, sisteminize yüksek erişilebilirlik, zaman serisi veri yönetimi ve veritabanı yönetim özelliklerini entegre ederek güçlü bir PostgreSQL çözümü sunar.

systemctl disable postgresql ve systemctl stop postgresql
Patronicluster kurulumu sırasında PostgreSQL servisini başlangıçta durdurmak ve manuel olarak başlatmamak, genellikle yüksek erişilebilirlik (HA) yapılandırması için yapılan ön hazırlıkların bir parçasıdır. Bunun birkaç nedeni vardır:
1. Yüksek Erişilebilirlik (HA) Yapılandırması: Patroni, PostgreSQL için yüksek erişilebilirlik sağlayan bir araçtır ve birden fazla PostgreSQL sunucusunun küme (cluster) olarak çalışmasını yönetir. Eğer PostgreSQL servisi otomatik olarak başlatılırsa, Patroni’nin düzgün şekilde yapılandırılması zorlaşır çünkü Patroni, kendi kontrolü altında başlatılacak PostgreSQL örneklerini ve küme yapılandırmasını yönetir. Bu nedenle, önceden kurulumda PostgreSQL servisini manuel başlatmak yerine durdurmak, Patroni’nin yapılandırmayı doğru bir şekilde yönetmesini sağlar.
2. Patroni’nin Servis Yönetimi: Patroni, PostgreSQL servisinin kontrolünü devralır. Bu nedenle, PostgreSQL servisini kurulum sırasında durdurmak, Patroni’nin devreye girmesi ve servisi uygun şekilde başlatması için gereklidir. Eğer PostgreSQL servisi önceden başlatılmışsa, Patroni doğru şekilde küme yapılandırmasını yapamaz ve sorunlar çıkabilir.
3. Konfigürasyon Değişiklikleri: Kurulum sırasında PostgreSQL’in yapılandırma dosyaları üzerinde bazı değişiklikler yapılması gerekebilir. PostgreSQL servisi çalışırken bu dosyaların değiştirilmesi riskli olabilir. Servisi durdurmak, konfigürasyon dosyalarını güvenli bir şekilde düzenlemeyi ve değişikliklerin etkili olmasını sağlamayı kolaylaştırır.
4. PostgreSQL İstemcisi ile Uyum: Patroni, PostgreSQL’in istemci yapılandırmalarını ve bağlantı yönetimini yönetir. PostgreSQL servisi otomatik olarak başlatılırsa, bu yapılandırmalar doğru şekilde uygulanamayabilir. Patroni’nin devreye girmesi için PostgreSQL’in durdurulması, bu yapılandırmaların düzgün bir şekilde yapılmasını sağlar.
Bu sebeplerle, Patronicluster kurulumu sırasında PostgreSQL servisini önce durdurmak ve manuel olarak başlatmamak, Patroni’nin düzgün çalışabilmesi ve yüksek erişilebilirlik sağlanabilmesi için kritik bir adımdır.

mkdir /patroni/data

chown -R postgres:postgres /patroni/data
Patroni’nin veritabanı verilerini sakladığı /patroni/data dizininin PostgreSQL’in çalıştıracağı postgres kullanıcısı ve grubuna ait olmasını sağlar. Bu, dosya izinlerinin doğru şekilde yapılandırılması için gereklidir çünkü PostgreSQL, veritabanı dosyalarına yalnızca doğru izinlere sahip bir kullanıcı olarak erişebilir.

vi /etc/patroni/config.yml
scope: patronidb
namespace: patronidc
name: pgsql01-test
restapi:
listen: 10.0.1.104:8008
connect_address: 10.0.1.104:8008
etcd3:
hosts: 10.0.1.100:2379,10.0.1.101:2379,10.0.1.102:2379
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
synchronous_mode: true
synchronous_mode_strict: false
synchronous_standby_names: 'pgsql02-test'
postgresql:
use_pg_rewind: true
parameters:
synchronous_commit: 'on'
max_connections: 500
shared_buffers: 2GB
effective_cache_size: 6GB
maintenance_work_mem: 512MB
work_mem: 16MB
wal_buffers: 16MB
min_wal_size: 1GB
max_wal_size: 4GB
checkpoint_completion_target: 0.9
max_worker_processes: 4
max_parallel_workers_per_gather: 2
max_parallel_workers: 4
max_parallel_maintenance_workers: 2
autovacuum_vacuum_cost_limit: 2000
autovacuum_max_workers: 3
wal_compression: 'on'
archive_mode: 'on'
archive_timeout: 300s
hot_standby: 'on'
wal_level: replica
random_page_cost: 1.1
effective_io_concurrency: 200
initdb:
- encoding: UTF8
- data-checksums
- locale: tr_TR.UTF-8
- lc-collate: tr_TR.UTF-8
- lc-ctype: tr_TR.UTF-8
pg_hba:
- host replication replicator 127.0.0.1/32 trust
- host replication replicator 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5
postgresql:
cluster_name: patronidb
listen: 0.0.0.0:5432
connect_address: 10.0.1.104:5432
data_dir: /patroni/data
bin_dir: /usr/lib/postgresql/16/bin
pgpass: /tmp/pgpass
authentication:
replication:
username: replicator
password: your_password
superuser:
username: postgres
password: your_password
rewind:
username: rewind_user
password: your_password
create_replica_methods:
- basebackup
basebackup:
checkpoint: fast
parameters:
unix_socket_directories: '/var/run/postgresql'
archive_mode: 'on'
archive_timeout: 60s
hot_standby: 'on'
logging_collector: 'on'
log_directory: '/var/log/postgresql'
log_filename: 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age: '1d'
log_rotation_size: '100MB'
log_statement: 'ddl'
log_min_duration_statement: 1000
log_checkpoints: 'on'
log_connections: 'on'
log_disconnections: 'on'
log_lock_waits: 'on'
log_temp_files: 128MB
log_error_verbosity: 'default'
log_timezone: 'Europe/Istanbul'
shared_preload_libraries: timescaledb,pg_stat_statements
use_pg_rewind: true
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
Bu patroni/config.yml dosyası, Patroni’nin PostgreSQL kümeleri için yapılandırma ayarlarını içerir. En önemli bölümler arasında, veritabanı kümesinin temel parametrelerini, yüksek erişilebilirlik (HA) yapılandırmasını, PostgreSQL’in başlatma parametrelerini ve replikasyon ayarlarını içerir. Özellikle, etcd3 ayarları, küme üyelerinin koordinasyonunu sağlar ve postgresql bölümü, PostgreSQL’in çalışacağı adres, bağlantı noktası ve veri dizini gibi temel ayarları belirtir. Ayrıca, bootstrap bölümü, yeni bir Patroni kümesinin nasıl başlatılacağına dair ayarları içerir.
İki node’da aynı yapılandırmanın olması, yüksek erişilebilirlik (HA) sağlamak için kritik öneme sahiptir. Patroni, küme üyeleri arasında senkronizasyonu ve otomatik failover’ı yönettiğinden, her iki node’un da aynı parametrelerle yapılandırılması gereklidir. Bu sayede, bir node arızalandığında, diğer node sorunsuz bir şekilde devreye girerek kesintisiz hizmet sunabilir. Ayrıca, replikasyonun tutarlı olabilmesi için her iki node’un aynı konfigürasyonla başlatılması gerekir.

chown postgres:postgres /etc/patroni/config.yml ve chmod 640 /etc/patroni/config.yml
chown postgres:postgres /etc/patroni/config.yml ve chmod 640 /etc/patroni/config.yml komutları, Patroni konfigürasyon dosyasının güvenliğini sağlamak ve doğru erişim izinlerini vermek için kullanılır.chown postgres:postgres /etc/patroni/config.yml komutu, konfigürasyon dosyasının sahipliğini postgres kullanıcısı ve grubuna atar. Bu, dosyanın yalnızca PostgreSQL işlemleri için yetkilendirilmiş kullanıcılar tarafından erişilebilir olmasını sağlar. Patroni, PostgreSQL servisi tarafından çalıştırıldığı için, konfigürasyon dosyasının da bu kullanıcıya ait olması gerekir.chmod 640 /etc/patroni/config.yml komutu, dosyanın erişim izinlerini ayarlar. 640 izni, dosyanın sahibinin (postgres) okuma ve yazma (rw-) izinlerine sahip olmasını, aynı gruptaki kullanıcıların ise yalnızca okuma (r–) iznine sahip olmasını sağlar. Diğer kullanıcıların ise hiç erişim izni yoktur. Bu, konfigürasyon dosyasının güvenliğini artırarak sadece yetkili kişilerin değiştirebilmesini sağlar.
servisi başlatmadan önce “sudo locale-gen tr_TR.UTF-8” komutu çalıştırmamız gerekiyor.
sudo locale-gen tr_TR.UTF-8 komutu, sistemde Türkçe dil desteği ve karakter seti (UTF-8) için gerekli yerel ayarları (locale) oluşturur. Bu, özellikle sistemin Türkçe dilinde düzgün çalışması, tarih, saat, para birimi ve dil formatlarının doğru şekilde görüntülenmesi için gereklidir. Ayrıca, bazı uygulamalar ve veritabanları doğru bir şekilde çalışabilmek için belirli bir locale’ye ihtiyaç duyar. Bu komut çalıştırıldığında, tr_TR.UTF-8 yerel ayarı sistemde etkinleştirilir ve bu, dil, bölgesel ayarlar ve karakter kodlaması gibi öğelerin Türkçe uyumlu hale gelmesini sağlar.

patronictl -c /etc/patroni/config.yml list
patronictl -c /etc/patroni/config.yml list komutu, Patroni kümesindeki tüm node’ların durumunu listelemek için kullanılır. Bu komut, belirtilen yapılandırma dosyasındaki Patroni kümesinin tüm üyelerini (master ve replica node’lar) gösterir ve her birinin durumunu, lider olup olmadığını, sağlık durumunu ve diğer önemli bilgileri sağlar.

patronictl -c /etc/patroni/config.yml switchover
patronictl -c /etc/patroni/config.yml switchover komutu, Patroni kümesindeki lider PostgreSQL node’unun rolünü değiştirmek için kullanılır. Bu komut, mevcut lider node’u (master) replikalardan birine geçirecek ve yeni lideri belirleyecektir. Bu işlem, özellikle bakım veya güncelleme gereksinimlerinde, kesintisiz hizmet sağlamak amacıyla kullanılır.
Bu sayede PatroniCluster kurup PgSQL servisimizi yönetmiş olduk. Bunlara da yük dengelemesi yapmak için HAProxy arkasına alınabilir.
Hi, this is a comment.
To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
Commenter avatars come from Gravatar.