DEV Community ­čĹęÔÇŹ­čĺ╗­čĹĘÔÇŹ­čĺ╗

DEV Community ­čĹęÔÇŹ­čĺ╗­čĹĘÔÇŹ­čĺ╗ is a community of 963,673 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in

Kaptan ├╝zerinde Patroni Postgresql Sistemi

Ortam i├žerisinde bulunan makineler:

  • HAProxy Sunucusu,
  • Liman1 Sunucusu,
  • Liman2 Sunucusu,
  • Kaptan1 Sunucusu (Patroni01),
  • Kaptan2 Sunucusu (Patroni02)

Sistemde ama├ž Liman'─▒n ve Liman taraf─▒ndan kullan─▒lan Postgresql'in HA (High Availability) ├Âzelli─čini kazanmas─▒n─▒ sa─člamakt─▒r.

Bu yaz─▒da Postgresql'in HA ├Âzelli─čini kazanmas─▒ k─▒sm─▒na bakaca─č─▒z. Halihaz─▒rda HAProxy, Liman'lar i├žin ├žal─▒┼čmaktad─▒r, Kaptan sunucular─▒nda patroni kurulumu yap─▒lm─▒┼čt─▒r. E─čer bu kurulumlar─▒ yapmad─▒ysan─▒z ┼ču linkten ula┼čabilirsiniz.

Genel Sistem Yap─▒s─▒ ve Mimarisi

Sistemimiz a┼ča─č─▒daki g├Ârseldeki gibi 5 farkl─▒ makineden olu┼čuyor. Bu yaz─▒da HAProxy ve Kaptan sunucular─▒ ├╝zerinden anlat─▒m yap─▒lacakt─▒r.

Patroni Cluster Mimarisi

1. ETCD Servisinin Kurulmas─▒ ve Konfig├╝rasyonu

─░lk olarak mimaride, ├╝zerinde ├žal─▒┼č─▒lacak 3 sunucu (HAProxy, Kaptan1, Kaptan2) i├žerisinde ETCD servisinin kurulu olmas─▒ gerekmektedir. Bu a┼ča─č─▒daki komut ile ger├žekle┼čtirilebilir:

sudo yum install etcd
Enter fullscreen mode Exit fullscreen mode

veya

sudo apt install etcd
Enter fullscreen mode Exit fullscreen mode

Daha sonra her sunucu ├╝zerinde etcd servisinin conf dosyas─▒ ├╝zerinde konfig├╝rasyon yap─▒l─▒r. Bu i┼člemi servisin i├žerisinde yazan env-file i├žerisinde yapmam─▒z gerekiyor. ─░┼člemi garantiye almak i├žin her sunucu ├╝zerinde a┼ča─č─▒daki iki dosyan─▒n i├žeri─či d├╝zenlenmelidir.

  1. "/etc/etcd/etcd.conf" dosyas─▒,
  2. "/etc/default/etcd" dosyas─▒

Dosyalar─▒n i├žerikleri a┼ča─č─▒daki gibi d├╝zenlenir:

ETCD_NAME="ha"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://HA_IP_ADRES─░:2380"
ETCD_LISTEN_PEER_URLS="http://localhost:2380,http://HA_IP_ADRES─░:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://HA_IP_ADRES─░:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://HA_IP_ADRES─░:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1"
ETCD_INITIAL_CLUSTER="ha=http://HA_IP_ADRES─░:2380,kaptan1=http://KAPTAN1_IP_ADRES─░:2380,kaptan2=http://KAPTAN2_IP_ADRES─░:2380"
ETCD_INITIAL_CLUSTER_STATE="new"

ETCDCTL_API=2
enable-v2: true 
Enter fullscreen mode Exit fullscreen mode

Kaptan1 ve Kaptan2 sunucusu ├╝zerinde de ayn─▒ dosyalar ├žapraz olarak d├╝zenlenir. Burada dikkat edilmesi gereken hususlar:

  1. ETCD_NAME= Sunucuya ├Âzel olmal─▒d─▒r. Yani bu de─či┼čkenin i├žeri─či her sunucuda farkl─▒ olmal─▒d─▒r (Benim durumumda HAProxy ├╝zerinde = ha,Kaptan1 ├╝zerinde= kaptan1, Kaptan2 ├╝zerinde= kaptan2)
  2. ETCD_INITIAL_CLUSTER_TOKEN= Her sunucuda ayn─▒ olmak zorundad─▒r. Yoksa ileti┼čim kuramazlar.
  3. ETCD_INITIAL_CLUSTER= ─░├žerisinde verilen birimlerin isimlerine dikkat edilmelidir. (ha, kaptan1, kaptan2 ve ip adresleri)
  4. HA_IP_ADRESI yazan yerlere hangi sunucu ├╝zerindeki etcd conf dosyas─▒n─▒ d├╝zenliyorsan─▒z o sunucunun ip adresini vermelisiniz.
  5. Portlara ├žok dikkat etmelisiniz 2379 ve 2380 portlar─▒ dinleme - haberle┼čme ve sistemin ├žal─▒┼čmas─▒ i├žin do─čru ayarlanmal─▒d─▒r.

E─čer 3 sunucu ├╝zerinde de bu i┼člemleri ba┼čar─▒l─▒ bir ┼čekilde yapt─▒ysan─▒z her sunucu ├╝zerindeki etcd servisini ba┼člatabilir ve enable hale getirebilirsiniz.

sudo systemctl enable etcd.service
sudo systemctl start etcd.service
Enter fullscreen mode Exit fullscreen mode

ETCD Kontrol├╝

ETCD kurulumunun ba┼čar─▒l─▒ oldu─čunu anlamak i├žin a┼ča─č─▒daki komut sunucu ├╝zerinde ├žal─▒┼čt─▒r─▒l─▒r ve portlar─▒n i┼člevlerini yerlerine getirip getirmedikleri bak─▒l─▒r.

ss -tlpn | grep etcd
Enter fullscreen mode Exit fullscreen mode

├ľrnek kullan─▒m a┼ča─č─▒daki gibidir:
ss komutu kullan─▒m─▒

Blurlu k─▒s─▒mda sunucunuzun ip adresi yazmal─▒d─▒r. 3 sunucu ├╝zerinde de bu ┼čekilde sonu├ž al─▒yorsan─▒z, etcd kurulumu do─črudur demektir.

Patroninin ETCD ile E┼členmesi

Bu k─▒s─▒mda kurulumu yap─▒lm─▒┼č olan patroni servisinin conf dosyas─▒ a├ž─▒l─▒r

sudo nano /etc/patroni.yml
Enter fullscreen mode Exit fullscreen mode

Gerekli etcd sat─▒r─▒ ├Ârnekteki gibi de─či┼čtirilir.

etcd:
    hosts: HA_IP:2379,KAPTAN1_IP:2379,KAPTAN2_IP:2379
Enter fullscreen mode Exit fullscreen mode

Gerekli de─čerin kesinlikle hosts oldu─čundan emin olun. Bu de─čer normalde host olarak gelmektedir. Host ise ├žoklu yap─▒y─▒ desteklememektedir.

Bu i┼člemi yapt─▒ktan sonra patroni servisine restart atarak leader olup olmad─▒klar─▒na bakabilirsiniz.

sudo systemctl restart patroni
sudo systemctl status patroni
Enter fullscreen mode Exit fullscreen mode

E─čer Postgressql ─░le Sorun Ya┼čarsan─▒z

Patroni'nin dosyalar─▒n─▒n sahipliklerine ve izinlerine dikkat edin. "/data/patroni" dizininin sahiplikleri a┼ča─č─▒daki komutlar ile ayarlanmal─▒d─▒r.

sudo chown -R postgres:postgres /data/
sudo chmod -R 700 /data/
Enter fullscreen mode Exit fullscreen mode

Postgressql'in 5432'den dinledi─činden emin olun.

ss -tlpn | grep postgres
Enter fullscreen mode Exit fullscreen mode

E─čer dinleme yapm─▒yorsa patroni.yml dosyas─▒ i├žerisinde postgresql ayarlar─▒n─▒z─▒ g├Âzden ge├žirmelisiniz.

Sadece bir patroni ├╝zeride s─▒k─▒nt─▒ ya┼č─▒yorsan─▒z, o node'u yeniden reinit edebilirsiniz. Bu sak─▒ncal─▒ bi i┼člem olup /data/patroni dizinini yok edebilmektedir. B├Âyle bir durumda di─čer patroninin /data/patroni dizinini kopyalayabilirsiniz.

patronictl -c /etc/patroni.yml reinit patroni_cluster_ismi node_ismi
Enter fullscreen mode Exit fullscreen mode

Kopyalama sonras─▒ sahipliklere ve izinlere dikkat edilmelidir. E─čer ".swp" uzant─▒l─▒ bir sorun ya┼č─▒yorsan─▒z postgres ├žal─▒┼čm─▒yor hatas─▒nda, o vakit di─čer node ├╝zerinden (anl─▒k olarak leader olan node) o gizli dosyay─▒ secondary d├╝─č├╝mlere kopyalayabilirsiniz.
Bu i┼člemlerden sonra servisi yeniden ba┼člat─▒p ├žal─▒┼č─▒rl─▒─č─▒n─▒ kontrol etmekte fayda var.

sudo systemctl restart patroni
sudo systemctl status patroni
Enter fullscreen mode Exit fullscreen mode

Top comments (0)

­čîÜ Browsing with dark mode makes you a better developer.

It's a scientific fact.