Bu yazıda, Oracle Linux 8.8 makinede yedekli veritabanı yapısı (PostgreSQL 13.13 , Patroni 3.2.1 , ETCD 3.5.10 ve HAProxy 1.8.27) kurulumu nasıl yapılır göreceğiz.
- Sanal makineye
ssh
ile bağlanılır.
ETCD Kurulumu:
İlk olarak, curl
, wget
ve vim
paketleri kurulur. Sonrasında, ETCD'nin son sürümü GitHub'dan indirilir. İndirilen sürüm açılır ve /usr/local/bin klasörüne taşınır. ETCD'nin kurulum durumunu kontrol etmek için sürüm bilgisi görüntülenir.
sudo dnf -y install curl wget vim
ETCD_RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d '"' -f 4)
echo $ETCD_RELEASE
wget https://github.com/etcd-io/etcd/releases/download/${ETCD_RELEASE}/etcd-${ETCD_RELEASE}-linux-amd64.tar.gz
tar xvf etcd-${ETCD_RELEASE}-linux-amd64.tar.gz
cd etcd-${ETCD_RELEASE}-linux-amd64
sudo mv etcd* /usr/local/bin
ls /usr/local/bin
/usr/local/bin/etcd --version
Kurulumun devamında, ETCD'nin depolama sisteminin kullanımı için gerekli olan düzenlemeler yapılır. ETCD'nin veritabanını saklamak için /var/lib/etcd/ dizini oluşturulur. ETCD'nin konfigüraasyon dosyalarını saklamak için /etc/etcd dizini oluşturulur. ETCD için sistem kullanıcı grubu oluşturulur. ETCD için sistem kullanıcısını oluşturur. /var/lib/etcd/ dizini ve içeriği, ETCD için oluşturulan kullanıcı ve gruba ait olarak düzenlenir. /var/lib/etcd/ dizini kullanıcısı ve grup üyelerine yazma ve okuma yetkisi verilir.
sudo mkdir -p /var/lib/etcd/
sudo mkdir /etc/etcd
sudo groupadd --system etcd
sudo useradd -s /sbin/nologin --system -g etcd etcd
sudo chown -R etcd:etcd /var/lib/etcd/
sudo chmod 0775 /var/lib/etcd/
/etc/systemd/system/etcd.service dosyasının içine nano
ile girilir ve aşağıdaki düzenlemeler yapılır.
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target
[Service]
User=etcd
Type=notify
EnvironmentFile=/etc/etcd/etcd.conf
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%m
ExecStart=/usr/local/bin/etcd --enable-v2=true
Restart=always
RestartSec=10s
LimitNOFILE=40000
[Install]
WantedBy=multi-user.target
Konfigürasyon dosyalarında, boşluklardan kaynaklı çalışmama durumu olabiliyor. Tekrar yazmayı deneyebilirsiniz. :)
/etc/etcd/etcd.conf dosyasının içine 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="default=http://<node-1-ip-adresi>:2380,"
ETCD_ADVERTISE_CLIENT_URLS="http://<node-1-ip-adresi>:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
Servis dosyalarında yapılan değişiklikler olduğundan bu dosyalar yeniden yüklenir ve ETCD servisinin, sistem başlangıcında otomatik başlatılması sağlanır.
sudo systemctl daemon-reload
sudo systemctl enable etcd.service
SELinux'un kullanıldığı sistemde ETCD'nin düzgün bir şekilde çalışabilmesi için gerekli ayarlar yapılır.
sudo ausearch -c '(etcd)' --raw | audit2allow -M my-etcd
sudo semodule -X 300 -i my-etcd.pp
sudo restorecon -Rv /usr/local/bin/etcd
Son olarak, ETCD servisi tekrar başlatılır ve servis durumu kontrol edilir.
systemctl restart etcd
systemctl status etcd
PostgreSQL Kurulumu:
İlk olarak, PostgreSQL'in yum deposunun RPM paketi indirilir. yum deposunun yapılandırma dosyasının içeriği görüntülenir. PostgreSQL deposunun başarıyla eklenip eklenmediğini kontrol etmek için yum deposu listesi görüntülenir. PostgreSQL modülü devre dışı bırakılır. Mevcut depolarda PostgreSQL 13 ile ilgili paketler aranır. PostgreSQL 13 sunucu paketleri yüklenir. PostgreSQL başlatılır ve başlangıç veritabanı oluşturulur.
sudo dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
cat /etc/yum.repos.d/pgdg-redhat-all.repo
sudo dnf repolist
sudo dnf -qy module disable postgresql
sudo dnf search postgresql13
sudo dnf install postgresql13 postgresql13-server
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
PostgreSQL servisinin sistem başlangıcında otomatik başlatılması sağlanır ve servis durumu kontrol edilir.
sudo systemctl enable --now postgresql-13
systemctl status postgresql-13
PostgreSQL veritabanına bağlanılır.
su - postgres
psql
Yedekli yapıda kullanılacak veritabanı kullanıcıları ve şifreleri oluşturulur.
ALTER ROLE postgres WITH PASSWORD 'postgres-parola';
CREATE ROLE replicator WITH ENCRYPTED PASSWORD 'postgres-parola';
PostgreSQL'den çıkış yapılır.
\q
exit
Patroni Kurulumu:
Patroni yüklenir.
sudo yum install patroni
Python 3 için pip paket yöneticisi, Python 3 geliştirme dosyaları ve PostgreSQL geliştirme dosyaları yüklenir. Pip güncellenir. Python 3 ve PostgreSQL geliştirme dosyaları kurulur ve bazı Python paketleri yüklenir.
sudo yum install python3-pip python3-devel postgresql-devel -y
pip3 install --upgrade pip
pip install patroni python-etcd psycopg2
PostgreSQL 13 için bir bağlantı linki oluşturulur.
sudo ln -s /usr/pgsql-13/bin/* /usr/sbin/
/data/patroni dizini oluşturulur ve dizinin altındaki dosylar ve dizinler 'postgres' kullanıcısına ve 'postgres' grubuna atanır. Okuma, yazma ve çalıştırma izinleri 'postgres' kullanıcısına verilir.
sudo mkdir -p /data/patroni
sudo chown -R postgres:postgres /data/
sudo chmod -R 700 /data/
/etc/patroni.yml dosyasının içine nano
ile girilir ve aşağıdaki düzenlemeler yapılır.
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 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
/etc/systemd/system/patroni.service dosyasının içine nano
ile girilir ve aşağıdaki düzenlemeler yapılır.
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
User=postgres
Group=postgres
ExecStart=/usr/bin/patroni /etc/patroni.yml
KillMode=process
TimeoutSec=30
Restart=no
[Install]
WantedBy=multi-user.target
Servis dosyaları yeniden yüklenir. PostgreSQL durdurulur. Patroni servisi tekrar başlatılır ve çalışma durumu kontrol edilir.
systemctl daemon-reload
systemctl stop postgresql-13
systemctl restart patroni
systemctl status patroni
HAProxy Kurulumu:
HAProxy yüklenir.
sudo yum install haproxy
/etc/haproxy/haproxy.cfg dosyasının içine 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
HAProxy servisi tekrar başlatılır ve çalışma durumu kontrol edilir.
systemctl restart haproxy
systemctl status haproxy
Yapının Kontrol Edilmesi:
Aşağıdaki komut ile sistemin çalışıp çalışmadığı kontrol edilir.
patronictl -c /etc/patroni.yml list
Bu komutun çıktısı aşağıdaki gibi olmalıdır.
Önemli Notlar:
- Herhangi bir aşamada portlarla ilgili bağlantı hatası alınıyorsa
ss -tlnp
komutu ile dinlenen portlar kontrol edilebilir. - Servisler güvenlik duvarı açık olduğu için çalışmıyor olabilir. Aşağıdaki komut ile güvenlik duvarı durdurulabilir.
systemctl stop firewalld
Nasıl yeni düğüm ekleneceğini aşağıdaki yazıda bulabilirsiniz: https://dev.to/aciklab/oracle-linux-88de-yedekli-yapiya-node-nasil-eklenir-34a
Top comments (2)
Teşekkürler. Detaylı bir yazı olmuş.
Emeğine sağlık. Tebrik ederim :)