Anasayfa » PostgreSQL Patroni Cluster Kurulumu-ETCD-PATRONI-Part2

PostgreSQL Patroni Cluster Kurulumu-ETCD-PATRONI-Part2

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.

More Reading

Post navigation

Leave a Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir