دا یوازې داسې پیښ شوي چې په هغه وخت کې چې ستونزه راپورته شوې وه ، ما دومره تجربه نه درلوده چې یوازې دا حل رامینځته کړم او پیل کړم. او بیا ما ګوګل کول پیل کړل.
زه نه پوهیږم چې کیچ څه شی دی، مګر زه د لسم ځل لپاره له دې حقیقت سره مخ شوی یم چې حتی که زه هر څه ګام په ګام د لارښود په څیر ترسره کړم، د لیکوال په څیر ورته چاپیریال چمتو کړم، بیا هیڅ شی کار نه کوي. زه نه پوهیږم چې مسله څه ده ، مګر کله چې زه بیا له دې سره مخ شوم ، ما پریکړه وکړه چې زه به خپل ټیوټوریل ولیکم کله چې هرڅه کار وکړي. یو چې یقینا به کار وکړي.
په انټرنیټ کې لارښوونې
دا یوازې داسې پیښیږي چې انټرنیټ د مختلف لارښودونو ، لارښودونو ، ګام په ګام او ورته نورو نشتوالي سره مخ نه وي. دا یوازې داسې پیښ شوي چې ما ته دنده ورکړل شوې وه چې په اسانۍ سره د ناکام پوسټګری ایس کیو ایل کلسټر تنظیم او رامینځته کولو لپاره د حل رامینځته کړم ، اصلي اړتیاوې چې د ماسټر سرور څخه ټولو نقلونو ته نقل کول او د ماسټر سرور په صورت کې د ریزرو اتوماتیک چمتو کول وو. ناکامي
پدې مرحله کې، د کارول شویو ټیکنالوژیو سټیک ټاکل شوی و:
- PostgreSQL د DBMS په توګه
- د کلستر کولو حل په توګه
- etcd د پټروني لپاره د توزیع شوي ذخیره په توګه
- HAproxy د ډیټابیس کارولو غوښتنلیکونو لپاره د ننوتلو یو واحد ځای تنظیم کولو لپاره
د جوړولو
ستاسو د پاملرنې لپاره - د Patroni, etcd, HAProxy په کارولو سره د خورا شتون لرونکي PostgreSQL کلستر جوړول.
Все операции выполнялись на виртуальных машинах с установленной ОС Debian 10.
etcd
زه په ورته ماشینونو کې د etcd نصبولو وړاندیز نه کوم چیرې چې Patroni او postgresql به موقعیت ولري ، ځکه چې د ډیسک بار د etcd لپاره خورا مهم دی. مګر د تعلیمي موخو لپاره، موږ به دا کار وکړو.
راځئ چې etcd نصب کړو.
#!/bin/bash
apt-get update
apt-get install etcd/etc/default/etcd فایل ته مینځپانګه اضافه کړئ
[غړی]
ETCD_NAME=datanode1 # ستاسو د ماشین کوربه نوم
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ټول IP پتې باید د اعتبار وړ وي. د لیستر ملګری، پیرودونکي او نور باید د کوربه IP پتې لپاره تنظیم شي
ETCD_LISTEN_PEER_URLS="» # ستاسو د موټر پته
ETCD_LISTEN_CLIENT_URLS="» # ستاسو د موټر پته
[کلستر]
ETCD_INITIAL_ADVERTISE_PEER_URLS="» # ستاسو د موټر پته
ETCD_INITIAL_CLUSTER=»Datanode1=»# په etcd کلستر کې د ټولو ماشینونو پته
ETCD_INITIAL_CLUSTER_STATE="نوی"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS="» # ستاسو د موټر پته
کمانډ چل کړئ
systemctl restart etcdPostgreSQL 9.6 + patroni
لومړی شی چې تاسو یې کولو ته اړتیا لرئ په دوی کې د اړین سافټویر نصبولو لپاره درې مجازی ماشینونه تنظیم کړئ. د ماشینونو نصبولو وروسته، که تاسو زما ټیوټوریل تعقیب کړئ، تاسو کولی شئ دا ساده سکریپټ چل کړئ چې (تقریبا) به ستاسو لپاره هرڅه وکړي. د ریښې په توګه چلیږي.
مهرباني وکړئ په یاد ولرئ چې سکریپټ د PostgreSQL نسخه 9.6 کاروي، دا زموږ د شرکت داخلي اړتیاو له امله دی. حل د PostgreSQL په نورو نسخو کې نه دی ازمول شوی.
#!/bin/bash
apt-get install gnupg -y
echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" >> /etc/apt/sources.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get install postgresql-9.6 python3-pip python3-dev libpq-dev -y
systemctl stop postgresql
pip3 install --upgrade pip
pip install psycopg2
pip install patroni[etcd]
echo "
[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
" > /etc/systemd/system/patroni.service
mkdir -p /data/patroni
chown postgres:postgres /data/patroni
chmod 700 /data/patroniпо
touch /etc/patroni.ymlبیا، په /etc/patroni.yml فایل کې چې تاسو یې جوړ کړی، تاسو اړتیا لرئ لاندې مینځپانګې ځای په ځای کړئ، البته د IP پتې په ټولو ځایونو کې هغه پتې ته بدل کړئ چې تاسو یې کاروئ.
په دې یامل کې نظرونو ته پام وکړئ. په کلستر کې په هر ماشین کې پتې خپل ځان ته بدل کړئ.
/etc/patroni.yml
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 فایل کې هم ځای په ځای شي.
یوځل چې تاسو دا عملیات په کلستر کې په ټولو ماشینونو کې بشپړ کړئ ، لاندې کمانډ په هر یو کې پرمخ وړئ
systemctl start patroni
systemctl start postgresqlشاوخوا 30 ثانیې انتظار وکړئ ، بیا دا کمانډ په کلستر کې پاتې ماشینونو کې پرمخ وړئ.
HAproxy
موږ د ننوتلو یو واحد نقطه چمتو کولو لپاره عالي HAproxy کاروو. ماسټر سرور به تل د ماشین په پته کې شتون ولري په کوم کې چې HAproxy ځای په ځای شوی.
د دې لپاره چې ماشین د HAproxy سره د ناکامۍ یو واحد نقطه نه کړي، موږ به دا په ډاکر کانټینر کې پیل کړو؛ په راتلونکي کې دا د K8 کلستر ته لیږدول کیدی شي او زموږ د ناکامۍ کلستر نور هم باوري کړي.
یو لارښود جوړ کړئ چیرې چې تاسو دوه فایلونه ذخیره کولی شئ - Dockerfile او haproxy.cfg. هغه ته لاړ شه.
ډکولر
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
په لارښود کې پاتې کیدل چیرې چې زموږ دواړه فایلونه "دروغ" دي ، راځئ چې په ترتیب سره د کانټینر بسته کولو امرونه اجرا کړو ، او همدارنګه د اړین بندرونو لیږلو سره یې پیل کړو:
docker build -t my-haproxy .
docker run -d -p5000:5000 -p7000:7000 my-haproxy اوس، په براوزر کې د HAproxy سره ستاسو د ماشین پته خلاصولو او د 7000 پورټ مشخص کولو سره، تاسو به په خپل کلستر کې احصایې وګورئ.
هغه سرور چې ماسټر دی به په UP ریاست کې وي، او نقلونه به په لاندې حالت کې وي. دا عادي خبره ده، په حقیقت کې دوی کار کوي، مګر دوی دا ډول ښکاري ځکه چې دوی د HAproxy څخه د غوښتنو لپاره 503 بیرته راګرځوي. دا موږ ته اجازه راکوي چې تل په سمه توګه پوه شو چې د دریو سرورونو څخه کوم یو اوسنی ماسټر دی.
پایلې
تاسو ښکلی یاست! یوازې په 30 دقیقو کې تاسو د سټریمینګ نقل او اتوماتیک فال بیک سره عالي غلطۍ زغمونکی او د لوړ فعالیت ډیټابیس کلسټر ځای په ځای کړی دی. که تاسو د دې حل کارولو پلان لرئ، وګورئ ، او په ځانګړي توګه د هغې برخې سره چې د سرپرست کارونې په اړه دي ، کوم چې ستاسو د کلستر اداره کولو لپاره اسانه لاسرسی چمتو کوي.
مبارک شه!
سرچینه: www.habr.com
