Hizmet Olarak İş Zekası
PlusClouds Eaglet hizmetini deneyin ve yapay zeka desteğiyle yüksek kaliteli B2B sıcak satış fırsatları ve potansiyel müşteriler bulun.
PostgreSQL açık kaynak kodlu, çok yönlü ve dünyadaki en yaygın veritabanı sistemlerinden biridir. Her ne kadar çok yönlü ve yaygın olsa da Yüksek Erişilebilirlik(HA) için bir çözüm sunmamaktadır.
Patroni yüksek erişilebilir PostgreSQL clusterlarının kurulumlarını, yönetimlerini vb. süreçleriniz otomatize edebileceğiniz bir cluster manager aracıdır. Python diliyle yazılmıştır ve maksimum erişilebilirlik için etcd kullanır. Ek olarak Patroni veritabanı replikasyonu, backup ve konfigürasyon restore etme konularında da yeteneklidir.
Patroni : Yüksek erişilebilir PostgreSQL clusterlarının konfigürasyonu için template sağlar.
ETCD : PostgreSQL clusterının anlık durumunu saklar. Eğer herhangi bir PostgreSQL node'unuzda değişilik olursa Patroni , ETCD içerisinde saklanan key-value değerini günceller. ETCD bu bilgiyi cluster içindeki master node seçimi için kullanır ve clusterı devamlı ayakta tutar.
HAProxy : Master/Slave nodelar arasındaki değişiklikleri takip eder ve herhangi bir clienttan istek geldiğinde master node üzerinde bağlantıyı gerçekleştirir.
Bu yazımızda Ubuntu 20.04 işletim sistemi üzerinde Patroni ile 4 adet node bulunduran cluster kurulumu gerçekleştireceğiz.
Aşağıdaki adımları hiç birini atlamadan takip edin ve kendi node bilgilerinize göre gereken güncellemeleri yapın .
Servers | Application | IP Address |
---|---|---|
node1 | Postgres, Patroni | 10.0.0.1 |
node2 | Postgres, Patroni | 10.0.0.2 |
node3 | etcd | 10.0.0.3 |
node4 | HAProxy | 10.0.0.4 |
İlk olarak yapmanız gereken node1 ve node2 üzerinde PostgreSQL kurulumunu gerçekleştirmek. Aşağıdaki komut ile kolayca PostgreSQL kurulumunu gerçekleştirin.
apt install postgresql postgresql-contrib -y
Kurulumdan sonra aşağıdaki komut ile bütün node'larda PostgreSQL servisini durdurun.
systemctl stop postgresql
Sıradaki adımda, /usr/lib/postgresql/12/bin/ ile /usr/sbin dizinleri arasında symlink'e ihtiyacınız var çünkü Patroni tarafından ihtiyaç duyulan araçlar bu dizinde bulunmakta. Aşağıdaki komut ile işlemi gerçekleştirin.
ln -s /usr/lib/postgresql/12/bin/* /usr/sbin/
İlk olarak, node1 ve node2 üzerinde gerekli paketlerin yüklemesini aşağıdaki komut ile gerçekleştirin.
apt -y install python3-pip python3-dev libpq-dev
Şimdi PIP güncel sürüm yükseltmesini aşağıdaki komut ile gerçekleştirin.
pip3 install --upgrade pip
Son olarak, PIP komutunu kullanarak node1 ve node2 üzerinde Patroni ve diğer gereksinimlerin kurulumunu gerçekleştirin.
pip install patroni
pip install python-etcd
pip install psycopg2
Şu anda Patroni node1 ve node2 makineleri üzerinde kurulmuş durumda.
Şimdi ETCD servisimizin çalışacağı node3 makinesine ulaşın ve aşağıdaki komut ile kurulumu gerçekleştirin.
apt -y install etcd
Kurulumun bitmesinin ardından node4 makinesine giriş yapın ve HAproxy servisini aşağıdaki komut ile yükleyin.
apt -y install haproxy
ETCD ana konfigürasyon dosyası aşağıdaki dizinde bulunmaktadır .
/etc/default/etcd
Nano editör ile konfigürasyon dosyasını düzenleyin.
nano /etc/default/etcd
Aşağıdaki konfigürasyonları ekleyin. Kendi IP bilgilerinize göre güncellemeyi unutmayın .
ETCD_LISTEN_PEER_URLS = "http://10.0.0.3:2380,http://127.0.0.1:7001"
ETCD_LISTEN_CLIENT_URLS = "http://127.0.0.1:2379, http://10.0.0.3379"
ETCD_INITIAL_ADVERTISE_PEER_URLS = "http://10.0.0.3:2380"
ETCD_INITIAL_CLUSTER = "etcd0=http://10.0.0.3:2380"
ETCD_ADVERTISE_CLIENT_URLS = "http://10.0.0.3:2379"
ETCD_INITIAL_CLUSTER_TOKEN = "node1"
ETCD_INITIAL_CLUSTER_STATE = "new"
Konfigürasyon dosyasını düzenleyip ETCD servisini yeniden başlatın.
systemctl restart etcd
Aşağıdaki komut ile servis durumunu görüntüleyebilirsiniz.
systemctl status etcd
Şimdi node1 ve node2 için patroni.yml dosyası oluşturmanız gerekiyor. Node1 üzerinde aşağıdaki komut ile yeni bir patroni.yml dosyası oluşturup sıradaki konfigürasyonları ekleyin.
nano /etc/patroni.yml
scope: postgres
namespace: /db/
name: postgresql0
restapi:
listen: 10.0 .0 .1 : 8008
connect_address: 10.0 .0 .1 : 8008
etcd:
host: 10.0 .0 .3 : 2379
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
initdb:
- encoding: UTF8
- data-checksums
pg_hba:
- host replication replicator 127.0 .0 .1 / 32 md5
- host replication replicator 10.0 .0 .1 / 0 md5
- host replication replicator 10.0 .0 .2 / 0 md5
- host all all 0.0 .0 .0 / 0 md5
users:
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: 10.0 .0 .1 : 5432
connect_address: 10.0 .0 .1 : 5432
data_dir: /mnt/ patroni
pgpass: /tmp/ pgpass
authentication:
replication:
username: replicator
password: "Strong Password"
superuser:
username: postgres
password: "Strong Password"
parameters:
unix_socket_directories: '.'
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
Dosyayı kaydedin, ardından Patroni için bir data dizini oluşturun ve sahipliğini düzenleyin.
mkdir -p /mnt/ patroni
chown postgres:postgres /mnt/ patroni
chmod 700 /mnt/ patroni
Ardından Node2 üzerinde aşağıdaki benzer işlemleri gerçekleştirin.
nano /etc/patroni.yml
Aşağıdaki konfigürasyonları ekleyin.
scope: postgres
namespace: /db/
name: postgresql1
restapi:
listen: 10.0 .0 .2 : 8008
connect_address: 10.0 .0 .2 : 8008
etcd:
host: 10.0 .0 .3 : 2379
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
initdb:
- encoding: UTF8
- data-checksums
pg_hba:
- host replication replicator 127.0 .0 .1 / 32 md5
- host replication replicator 10.0 .0 .1 / 0 md5
- host replication replicator 10.0 .0 .2 / 0 md5
- host all all 0.0 .0 .0 / 0 md5
users:
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: 10.0 .0 .2 : 5432
connect_address: 10.0 .0 .2 : 5432
data_dir: /mnt/ patroni
pgpass: /tmp/ pgpass
authentication:
replication:
username: replicator
password: "Strong Password"
superuser:
username: postgres
password: "Strong Password"
parameters:
unix_socket_directories: '.'
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
Kaydedin ve Node1 üzerinde de yaptığınız gibi data dizini oluşturun.
mkdir -p /mnt/ patroni
chown postgres:postgres /mnt/ patroni
chmod 700 /mnt/ patroni
Patroni İçin Systemd Dosyası Oluşturun.
Node1 ve Node2 üzerinde Patroni servisini yönetmek için aşağıdaki servis dosyasını oluşturun.
nano /etc/systemd/system/patroni.service
Aşağıdaki konfigürasyonları ekleyin.
[Unit]
Description =Runners to orchestrate a high-availability PostgreSQL
After =syslog.target network.target
[Service]
Type =simple
User =postgres
Group =postgres
ExecStart =/usr/local/bin/patroni /etc/patroni.yml
KillMode =process
TimeoutSec =30
Restart = no
[Install]
WantedBy =multi-user.targ
Dosyayı kaydedin ve ardından aşağıdaki komutu çalıştırın.
systemctl daemon-reload
Şimdi Node1 ve Node2 üzerinde Patroni servisini çalıştırın. DİKKAT EDİN YALNIZCA PATRONI .
systemctl start patroni
Patroni servisinin durumunu aşağıdaki komutla kontrol edebilirsiniz.
systemctl status patroni
Yalnızca Patroniyi çalıştırma sebebimize gelecek olursak, Konfigürasyonlardan da gördüğünüz üzere Patroni PostgreSQL ile aynı porta bind edili durumda ve kendine ait farklı bir data dizini ile konfigürasyonları mevcut. Bu da Postgresql servisini patroni üzerinden kullandığımız anlamına geliyor. Yani özetleyecek olursak postgresql ve patroni bir arada çalışıyor olursa 5432 portundan bağlandığınızda replikasyon işlemi gerçekleşmemiş olacak çünkü postgresql data dizini üzerinden bağlanıyor olacaksınız.
Node4 üzerinde HAProxy ana konfigürasyonunu aşağıdaki şekilde düzenleyin.
nano /etc/haproxy/haproxy.cfg
Standart konfigürasyonu kaldırın ve aşağıdaki şekilde güncelleyin
global
maxconn 100
defaults
log global
mode tcp
retries 2
timeout client 30m
timeout connect 4s
timeout server 30m
timeout check 5s
listen stats
mode http
bind *:7000
stats enable
stats uri /
listen postgres
bind *:5000
option httpchk
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server postgresql1 10.0.0.1:5432 maxconn 100 check port 8008
server postgresql2 10.0.0.2:5432 maxconn 100 check port 8008
Dosyayı kaydedin ve HAProxy servisini yeniden başlatın.
systemctl restart haproxy
Durumunu doğrulamak için aşağıdaki komutu kullanabilirsiniz.
systemctl status haproxy
Artık postgresql clusterınız kullanıma hazır. http://10.0.0.4:7000 adresi üzerinden cluster durumunuzu görüntüleyebilir ve 5432 portundan veritabanınıza bağlanarak replikasyon kontrol testlerinizi gerçekleştirebilirsiniz. Bir sonraki yazımızda da Nginx ile clusterınıza nasıl domain tanımlayacağınızı anlatacağız . Görüşmek üzere :)
If you are a journalist, who has desire to dig deep in topics related to businesses and sectors, we want to work with you!
PlusClouds Enthusiast