
Bu bölümde PostgreSQL Patroni Cluster Kurulumu isimli yazımızda , PostgreSQL için yüksek erişilebilirlik sağlayan Patroni kümesinde kullanılacak Etcd ve Patroni bileşenlerinin kurulumu ve yapılandırılması adım adım ele alacağım.
PostgreSQL Patroni Cluster Kurulumu-Part1 adımlarını önceki yazımızda inceleyebilirsiniz.
Etcd Nedir?
Etcd, Patroni’nin cluster durumu, liderlik bilgisi ve diğer meta verileri saklamak için kullandığı bir anahtar-değer (key-value) deposudur. Patroni’nin sağlıklı çalışması için merkezi bir yapılandırma deposu olan Etcd’nin doğru bir şekilde yapılandırılması çok önemlidir. ETCD ye alternatif olarak Consul kullanılabilir.
Öncelikle Etcd paketleri sistemimize kurulmalıdır. Kurulumdan sonra yapılandırma dosyası yedeği alınarak özelleştirilmelidir. Her düğümün kendine ait bir ismi ve veri dizini olmalıdır. Ayrıca, diğer Etcd düğümleri ile haberleşmesini sağlayacak peer
URL’leri ve cluster bilgileri tanımlanır. Şimdi kurulum adımlarını inceleyelim.
- İlk adımda, Etcd paketini resmi PostgreSQL reposundan sisteminize yükleyin:
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/pgdg-rhel9-extras/redhat/rhel-9-x86_64/etcd-3.5.9-1.rhel9.x86_64.rpm
- Etcd Yapılandırması
Bizim mimarimizde 3 db node üzerinde etcd kurulumu yapacağımızı belirtmiştik. etcd.conf dosyasında aşağıdaki değişiklikler yapılıp 3 sunucuda da aşağıdaki conf bilgileri düzenlenmelidir. Diğer sunucularda ip ve host bilgilerini değiştirmeyi unutmayalım!!
sudo vi /etc/etcd/etcd.conf
ETCD_NAME=postgres1
ETCD_DATA_DIR="/var/lib/etcd/postgres1"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://192.168.26.101:2380,http://127.0.0.1:7001"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.26.101:2380"
ETCD_INITIAL_CLUSTER="postgres1=http://192.168.26.101:2380,postgres2=http://192.168.26.102:2380,postgres3=http://192.168.26.103:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ENABLE_V2="true"
Patroni Kurulumu?
Etcd kurulumu ve yapılandırması tamamlandıktan sonra sıra Patroni bileşenine gelir. Patroni, PostgreSQL sunucularını yöneten ve küme kontrolünü sağlayan ana uygulamadır.
Patroni kurulumu için şu bileşenler yüklenmelidir:
- Python bağımlılıkları
- Geliştirme kütüphaneleri (
gcc
,python3-devel
) - Patroni ile birlikte gelen Etcd ve diğer destek paketleri
Kurulum sonrasında Patroni’nin yapılandırma dosyası (patroni.yml
) oluşturulmalı ve yapılandırılmalıdır. Bu dosya içinde:
- PostgreSQL ayarları
- Replikasyon yapılandırması
- Etcd bağlantı bilgileri
- Kullanıcı tanımları
- Cluster bilgileri yer alır
Her düğüm, bu dosyada kendine ait IP adresleri ve isimlerle tanımlanmalıdır.
- Patroni Kurulum Adımları
Aşağıdaki adımlar 3 db node da uygulanır.
sudo yum install python3-devel gcc -y
pip3 install patroni[etcd]
Gerekli diğer RPM paketleri:
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-9-x86_64/python3-cdiff-1.0-1.rhel9.noarch.rpm
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-9-x86_64/python3-ydiff-1.2-10.rhel9.noarch.rpm
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-9-x86_64/python3-etcd-0.4.5-20.rhel9.noarch.rpm
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-9-x86_64/patroni-etcd-3.2.1-1PGDG.rhel9.noarch.rpm
sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-9-x86_64/patroni-3.2.1-1PGDG.rhel9.noarch.rpm
Patroni config dosyası /etc/patroni/patroni.yml altına oluşturmaktadır. Bu dosyanın yedeği alınıp ayarlar yapılır.
sudo cp /etc/patroni/patroni.yml /etc/patroni/patroni.yml_org
sudo vi /etc/patroni/patroni.yml
scope: pg_cluster
namespace: /service/
name: postgres1
restapi:
listen: postgres1:8008
connect_address: postgres1:8008
etcd:
hosts: postgres1:2379,postgres2:2379,postgres3: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:
- encoding: UTF8
- data-checksums
pg_hba:
- host replication replicator 127.0.0.1/32 md5
- host replication replicator 0.0.0.0/0 md5
- host all all 0.0.0.0/0 md5
users:
admin:
password: P22.4416mr
options:
- createrole
- createdb
postgresql:
listen: postgres1:5432
connect_address: postgres1:5432
data_dir: /data
bin_dir: /usr/pgsql-15/bin
pgpass: /tmp/pgpass
authentication:
replication:
username: replicator
password: replication
superuser:
username: postgres
password: postgres
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
Cluster adımız pg_cluster olarak belirledik. Bu configurasyonlar diğer node larda da düzenlenmelidir. Düzenleme yapılırken host ve ip bilgilerine dikkat edilmelidir.
ETCD ve Patroni kurulum ve config ler yapıldıktan sonra servisler start edilip restart sonrası otomatik başlaması için enable edilmelidir.
sudo systemctl start patroni.service
sudo systemctl start etcd.service
sudo systemctl enable patroni.service
sudo systemctl enable etcd.service
- Profile dosyasının düzenlenmesi
vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export PGDATA="/data"
export ETCDCTL_API="3"
export PATRONI_ETCD_URL="http://127.0.0.1:2379"
export PATRONI_SCOPE="pg_cluster"
postgres1=192.168.26.101
postgres2=192.168.26.102
postgres3=192.168.26.103
ENDPOINTS=$postgres1:2379,$postgres2:2379,$postgres3:2379
- ETCD ve Patroni kontrol
Profile dosyamızı güncelleyip set ettikten sonra ETCD de hangi node un leader olup olmadığını aşağıdaki gibi kontrol edebiliriz.
. .bash_profile
etcdctl endpoint status --write-out=table --endpoints=$ENDPOINTS
Çıktısı aşağıdaki gibi olmalıdır.
+----------------------+------------------+---------+---------+-----------+-----------+------------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX |
+----------------------+------------------+---------+---------+-----------+-----------+------------+
| 192.168.26.101:2379 | fa909102f35acd83 | 3.2.21 | 25 kB | true | 3 | 9 |
| 192.168.26.102:2379 | a545f408a185aed7 | 3.2.21 | 25 kB | false | 3 | 9 |
| 192.168.26.103:2379 | da59bcfc99b8f3bc | 3.2.21 | 25 kB | false | 3 | 9 |
+----------------------+------------------+---------+---------+-----------+-----------+------------+
patronictl list komutu ile cluster durumunu kontrol ederbiliriz.
[root@postgres1 ~]$ patronictl list
+ Cluster: pg_cluster (7309472612642748567) +-----------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+----------------+----------------+---------+-----------+----+-----------+
| postgres1 | postgres1 | Replica | running | 18 | 0 |
| postgres2 | postgres2 | Leader | running | 18 | |
| postgres3 | postgres3 | Replica | streaming | 18 | 0 |
+----------------+----------------+---------+-----------+----+-----------+
Bu yazımızda da PostgreSQL Patroni Cluster Kurulumu-ETCD-PATRONI yapılandırmasını adım adım ele aldık. Bir sonraki yazımızda mimarimizdeki haprxypb sunucusundaki HAProxy ve PGBouncer kurulum ve adımlarını anlatacağım.
HAProxy ve PgBouncer kurulum yazımı incelemek için tıklayınız.
Resmi dökümantasyon için tıklayınız.
Leave a Comment