Oracle Linux 8.8'de Yedekli Yapıya Node Nasıl Eklenir?

Yagmur Ocal - Dec 8 '23 - - Dev Community

Bu yazıda, Oracle Linux'ta oluşturulan yedekli yapıya yeni node (node-2 ve node-3) nasıl eklenir göreceğiz.

Yedekli yapının nasıl oluşturulacağını aşağıdaki yazıda bulabilirsiniz:
https://dev.to/aciklab/oracle-linux-88de-postgresql-13-yedekli-yapi-nasil-kurulur-patroni-etcd-haproxy-4711

Node-2

  • Yapıya eklenecek olan makineye ssh ile bağlanılır.
  • İlk yazıdaki gibi PostgreSQL ve Patroni kurulumları yapılır.

PostgreSQL'de oluşturulan kullanıcı ve şifrelerin aynı olmasına dikkat edilmelidir.

  • İkinci makinedeki /etc/patroni.yml dosyasına nano ile girilir ve aşağıdaki gibi düzenlenir.
scope: development
namespace: /db/
name: node-2

restapi:
    listen: <node-2-ip-adresi>:8008
    connect_address: <node-2-ip-adresi>:8008

etcd:
    host: <node-1-ip-adresi>: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 <node-2-ip-adresi>:/0 md5
    - host replication replicator <node-1-ip-adresi>:/0 md5
    - host all all 0.0.0.0/0 md5

    users:
    admin:
            password: admin
            options:
                - createrole
                - createdb

postgresql:
    listen: <node-2-ip-adresi>:5432
    connect_address: <node-2-ip-adresi>:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: postgres-parola
        superuser:
            username: postgres
            password: postgres-parola
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
Enter fullscreen mode Exit fullscreen mode

İkinci makinedeki /etc/systemd/system/patroni.service dosyası birinci makinedeki gibi düzenlenmelidir.

Birinci makineye ssh ile bağlanılır ve aşağıdaki konfigürasyon dosyalarında ikinci düğümü eklemek için gereken düzenlemeler yapılır:

  • /etc/patroni.yml dosyasına nano ile girilir ve aşağıdaki gibi düzenlenir.
scope: development
namespace: /db/
name: node-1

restapi:
    listen: <node-1-ip-adresi>:8008
    connect_address: <node-1-ip-adresi>:8008

etcd:
    host: <node-1-ip-adresi>: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 <node-1-ip-adresi>/0 md5
    - host replication replicator <node-2-ip-adresi>/0 md5
    - host all all 0.0.0.0/0 md5

    users:
    admin:
            password: admin
            options:
                - createrole
                - createdb

postgresql:
    listen: <node-1-ip-adresi>:5432
    connect_address: <node-1-ip-adresi>:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: postgres-parola
        superuser:
            username: postgres
            password: postgres-parola
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
Enter fullscreen mode Exit fullscreen mode
  • /etc/etcd/etcd.conf dosyasına nano ile girilir ve aşağıdaki düzenlemeler yapılır.
ETCD_LISTEN_PEER_URLS="http://<node-1-ip-adresi>:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://<node-1-ip-adresi>:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<node-1-ip-adresi>:2380"
ETCD_INITIAL_CLUSTER="etcd-1=http://<node-1-ip-adresi>:2380,etcd-2=http://<node-2-ip-adresi>:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://<node-1-ip-adresi>:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
Enter fullscreen mode Exit fullscreen mode
  • /etc/haproxy/haproxy.cfg dosyasına nano ile girilir ve aşağıdaki düzenlemeler yapılır.
global
    maxconn 1000

defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s

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 psql-node-1 <node-1-ip-adresi>:5432 maxconn 100 check port 8008
    server psql-node-2 <node-2-ip-adresi>:5432 maxconn 100 check port 8008
Enter fullscreen mode Exit fullscreen mode
  • Birinci makinedeki servisler tekrar başlatılır ve çalışma durumları kontrol edilir.
systemctl restart haproxy
systemctl status hasproxy
systemctl restart etcd
systemctl status etcd
systemctl restart patroni
systemctl status patroni
Enter fullscreen mode Exit fullscreen mode
  • İkinci makinedeki servis dosyaları yeniden yüklenir. PostgreSQL durdurulur. Patroni tekrar başlatılır ve çalışma durumu kontrol edilir.
systemctl daemon-reload
systemctl stop postgresql-13
systemctl restart patroni
systemctl status patroni
Enter fullscreen mode Exit fullscreen mode

Servislerin loglarında hata alınıyorsa güvenlik duvarından kaynaklı olabilir. systemctl stop firewalld komutuyla güvenlik duvarı durdurulabilir.

  • Her iki makinedeki tüm servislerin başarılı olarak çalıştığı kontrol edildikten sonra yedekli yapı aşağıdaki komutla, her iki makineden de kontrol edilebilir.
patronictl -c /etc/patroni.yml list
Enter fullscreen mode Exit fullscreen mode

Bu komutun çıktısı aşağıdaki gibi olmalıdır.

Image description

Lider durumundaki patroni tekrar başlatıldığında eklenen ikinci makine lider durumuna geçmelidir.

systemctl restart patroni
patronictl -c /etc/patroni.yml list
Enter fullscreen mode Exit fullscreen mode

Image description

Node-3

  • Yapıya eklenecek olan makineye ssh ile bağlanılır.
  • İlk yazıdaki ve ikinci makinede yapıldığı gibi PostgreSQL ve Patroni kurulumları yapılır.

PostgreSQL'de oluşturulan kullanıcı ve şifrelerin aynı olmasına dikkat edilmelidir.

  • Üçüncü makinedeki /etc/patroni.yml dosyasına nano ile girilir ve aşağıdaki gibi düzenlenir.
scope: development
namespace: /db/
name: node-3

restapi:
    listen: <node-3-ip-adresi>:8008
    connect_address: <node-3-ip-adresi>:8008

etcd:
    host: <node-1-ip-adresi>: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 <node-3-ip-adresi>:/0 md5
    - host replication replicator <node-1-ip-adresi>:/0 md5
    - host replication replicator <node-2-ip-adresi>:/0 md5
    - host all all 0.0.0.0/0 md5

    users:
    admin:
            password: admin
            options:
                - createrole
                - createdb

postgresql:
    listen: <node-3-ip-adresi>:5432
    connect_address: <node-3-ip-adresi>:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: postgres-parola
        superuser:
            username: postgres
            password: postgres-parola
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

Enter fullscreen mode Exit fullscreen mode

Üçüncü makinedeki /etc/systemd/system/patroni.service dosyası da birinci ve ikinci makinedekiler gibi düzenlenmelidir.

  • İkinci makineye ssh ile bağlanılır ve /etc/patroni.yml dosyasına nano ile girilir ve üçüncü düğüm, aşağıdaki gibi eklenir.
scope: development
namespace: /db/
name: node-2

restapi:
    listen: <node-2-ip-adresi>:8008
    connect_address: <node-2-ip-adresi>:8008

etcd:
    host: <node-1-ip-adresi>: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 <node-2-ip-adresi>:/0 md5
    - host replication replicator <node-1-ip-adresi>:/0 md5
    - host replication replicator <node-3-ip-adresi>:/0 md5
    - host all all 0.0.0.0/0 md5

    users:
    admin:
            password: admin
            options:
                - createrole
                - createdb

postgresql:
    listen: <node-2-ip-adresi>:5432
    connect_address: <node-2-ip-adresi>:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: postgres-parola
        superuser:
            username: postgres
            password: postgres-parola
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
Enter fullscreen mode Exit fullscreen mode

Birinci makineye ssh ile bağlanılır ve aşağıdaki konfigürasyon dosyalarında üçüncü düğümü eklemek için gereken düzenlemeler yapılır:

  • /etc/patroni.yml dosyasına nano ile girilir ve aşağıdaki gibi düzenlenir.
scope: development
namespace: /db/
name: node-1

restapi:
    listen: <node-1-ip-adresi>:8008
    connect_address: <node-1-ip-adresi>:8008

etcd:
    host: <node-1-ip-adresi>: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 <node-1-ip-adresi>/0 md5
    - host replication replicator <node-2-ip-adresi>/0 md5
    - host replication replicator <node-3-ip-adresi>/0 md5
    - host all all 0.0.0.0/0 md5

    users:
    admin:
            password: admin
            options:
                - createrole
                - createdb

postgresql:
    listen: <node-1-ip-adresi>:5432
    connect_address: <node-1-ip-adresi>:5432
    data_dir: /data/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: postgres-parola
        superuser:
            username: postgres
            password: postgres-parola
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
Enter fullscreen mode Exit fullscreen mode
  • /etc/etcd/etcd.conf dosyasına nano ile girilir ve aşağıdaki düzenlemeler yapılır.
ETCD_LISTEN_PEER_URLS="http://<node-1-ip-adresi>:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://<node-1-ip-adresi>:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<node-1-ip-adresi>:2380"
ETCD_INITIAL_CLUSTER="etcd-1=http://<node-1-ip-adresi>:2380,etcd-2=http://<node-2-ip-adresi>:2380,etcd-3=http://<node-3-ip-adresi>:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://<node-1-ip-adresi>:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
Enter fullscreen mode Exit fullscreen mode
  • /etc/haproxy/haproxy.cfg dosyasına nano ile girilir ve aşağıdaki düzenlemeler yapılır.
global
    maxconn 1000

defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s

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 psql-node-1 <node-1-ip-adresi>:5432 maxconn 100 check port 8008
    server psql-node-2 <node-2-ip-adresi>:5432 maxconn 100 check port 8008
    server psql-node-3 <node-3-ip-adresi>:5432 maxconn 100 check port 8008
Enter fullscreen mode Exit fullscreen mode
  • Birinci makinedeki servisler tekrar başlatılır ve çalışma durumları kontrol edilir.
systemctl restart haproxy
systemctl status hasproxy
systemctl restart etcd
systemctl status etcd
systemctl restart patroni
systemctl status patroni
Enter fullscreen mode Exit fullscreen mode
  • İkinci makinedeki Patroni tekrar başlatılır ve çalışma durumu kontrol edilir.
systemctl restart patroni
systemctl status patroni
Enter fullscreen mode Exit fullscreen mode
  • Üçüncü makinedeki servis dosyaları yeniden yüklenir. PostgreSQL durdurulur. Patroni tekrar başlatılır ve çalışma durumu kontrol edilir.
systemctl daemon-reload
systemctl stop postgresql-13
systemctl restart patroni
systemctl status patroni
Enter fullscreen mode Exit fullscreen mode

Servislerin loglarında hata alınıyorsa güvenlik duvarından kaynaklı olabilir. systemctl stop firewalld komutuyla güvenlik duvarı durdurulabilir.

  • Her üç makinedeki tüm servislerin başarılı olarak çalıştığı kontrol edildikten sonra yedekli yapı aşağıdaki komutla, her üç makineden de kontrol edilebilir.
patronictl -c /etc/patroni.yml list
Enter fullscreen mode Exit fullscreen mode

Bu komutun çıktısı aşağıdaki gibi olmalıdır.

Image description

Lider durumundaki patroni tekrar başlatıldığında eklenen ikinci makine lider durumuna geçecektir.

systemctl restart patroni
patronictl -c /etc/patroni.yml list
Enter fullscreen mode Exit fullscreen mode

Image description

İkinci makine lider durumundayken bu makinedeki patroni tekrar başlatılırsa da eklenen üçüncü makine lider duruma geçecektir.

Image description

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .