دا یوازې داسې پیښ شوي چې په هغه وخت کې چې ستونزه راپورته شوې وه ، ما دومره تجربه نه درلوده چې یوازې دا حل رامینځته کړم او پیل کړم. او بیا ما ګوګل کول پیل کړل.
زه نه پوهیږم چې کیچ څه شی دی، مګر زه د لسم ځل لپاره له دې حقیقت سره مخ شوی یم چې حتی که زه هر څه ګام په ګام د لارښود په څیر ترسره کړم، د لیکوال په څیر ورته چاپیریال چمتو کړم، بیا هیڅ شی کار نه کوي. زه نه پوهیږم چې مسله څه ده ، مګر کله چې زه بیا له دې سره مخ شوم ، ما پریکړه وکړه چې زه به خپل ټیوټوریل ولیکم کله چې هرڅه کار وکړي. یو چې یقینا به کار وکړي.
په انټرنیټ کې لارښوونې
دا یوازې داسې پیښیږي چې انټرنیټ د مختلف لارښودونو ، لارښودونو ، ګام په ګام او ورته نورو نشتوالي سره مخ نه وي. دا یوازې داسې پیښ شوي چې ما ته دنده ورکړل شوې وه چې په اسانۍ سره د ناکام پوسټګری ایس کیو ایل کلسټر تنظیم او رامینځته کولو لپاره د حل رامینځته کړم ، اصلي اړتیاوې چې د ماسټر سرور څخه ټولو نقلونو ته نقل کول او د ماسټر سرور په صورت کې د ریزرو اتوماتیک چمتو کول وو. ناکامي
scope: pgsql # должно быть одинаковым на всех нодах
namespace: /cluster/ # должно быть одинаковым на всех нодах
name: postgres1 # должно быть разным на всех нодах
restapi:
listen: 192.168.0.143:8008 # адрес той ноды, в которой находится этот файл
connect_address: 192.168.0.143:8008 # адрес той ноды, в которой находится этот файл
etcd:
hosts: 192.168.0.143:2379,192.168.0.144:2379,192.168.0.145:2379 # перечислите здесь все ваши ноды, в случае если вы устанавливаете etcd на них же
# this section (bootstrap) will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster
# and all other cluster members will use it as a `global configuration`
bootstrap:
dcs:
ttl: 100
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
wal_level: replica
hot_standby: "on"
wal_keep_segments: 5120
max_wal_senders: 5
max_replication_slots: 5
checkpoint_timeout: 30
initdb:
- encoding: UTF8
- data-checksums
- locale: en_US.UTF8
# init pg_hba.conf должен содержать адреса ВСЕХ машин, используемых в кластере
pg_hba:
- host replication postgres ::1/128 md5
- host replication postgres 127.0.0.1/8 md5
- host replication postgres 192.168.0.143/24 md5
- host replication postgres 192.168.0.144/24 md5
- host replication postgres 192.168.0.145/24 md5
- host all all 0.0.0.0/0 md5
users:
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: 192.168.0.143:5432 # адрес той ноды, в которой находится этот файл
connect_address: 192.168.0.143:5432 # адрес той ноды, в которой находится этот файл
data_dir: /data/patroni # эту директорию создаст скрипт, описанный выше и установит нужные права
bin_dir: /usr/lib/postgresql/9.6/bin # укажите путь до вашей директории с postgresql
pgpass: /tmp/pgpass
authentication:
replication:
username: postgres
password: postgres
superuser:
username: postgres
password: postgres
create_replica_methods:
basebackup:
checkpoint: 'fast'
parameters:
unix_socket_directories: '.'
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
سکریپټ باید د کلستر په ټولو دریو ماشینونو کې چلول شي، او پورته ترتیب باید په ټولو ماشینونو کې /etc/patroni.yml فایل کې هم ځای په ځای شي.
FROM ubuntu:latest
RUN apt-get update
&& apt-get install -y haproxy rsyslog
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /run/haproxy
COPY haproxy.cfg /etc/haproxy/haproxy.cfg
CMD haproxy -f /etc/haproxy/haproxy.cfg && tail -F /var/log/haproxy.log
محتاط اوسئ، د haproxy.cfg فایل وروستۍ درې کرښې باید ستاسو د ماشینونو پته لیست کړي. HAproxy به د Patroni سره اړیکه ونیسي، د HTTP سرلیکونو کې ماسټر سرور به تل 200 بیرته راولي، او نقل به تل 503 بیرته راولي.
haproxy.cfg
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 192.168.0.143:5432 maxconn 100 check port 8008
server postgresql2 192.168.0.144:5432 maxconn 100 check port 8008
server postgresql3 192.168.0.145:5432 maxconn 100 check port 8008