ProHoster > Блог > Maamulka > Dhisida koox PostgreSQL oo aad loo heli karo iyadoo la adeegsanayo Patroni, etcd, HAProxy
Dhisida koox PostgreSQL oo aad loo heli karo iyadoo la adeegsanayo Patroni, etcd, HAProxy
Waxaa dhacday in waqtiga dhibaatada la soo bandhigay, aanan haysan waayo-aragnimo ku filan oo aan ku horumariyo oo aan furo xalkan oo keliya. Ka dibna waxaan bilaabay Googling.
Ma aqaano waxa qabashadu tahay, laakiin markii ugu horeysay ee aan la kulmayo xaqiiqda ah in xitaa haddii aan sameeyo wax kasta oo tallaabo tallaabo ah sida casharrada, u diyaari jawi isku mid ah sida qoraaga, ka dibna waxba waligiis shaqeeya. Wax fikrad ah kama haysto waxa arrinku yahay, laakiin markii aan tan la kulmay mar kale, waxaan go'aansaday inaan qoro casharradayda marka wax walba ay shaqeeyaan. Mid hubaal shaqayn doona.
Tilmaamaha internetka
Waxay dhacdaa in internetka uusan la kulmin la'aanta hageyaal kala duwan, casharro, tallaabo-tallaabo iyo wixii la mid ah. Waxaa dhacday in la ii xilsaaray inaan soo saaro xal si ku habboon loo abaabulo oo loo dhiso koox fashilantay oo PostgreSQL ah, shuruudaha ugu muhiimsan ee ka soo qulqulaya server-ka Masterka dhammaan nuqullada iyo bixinta tooska ah ee kaydka haddii ay dhacdo server-ka Master-ka. guuldarro.
Marxaladdan, tignoolajiyada la isticmaalay ayaa la go'aamiyay:
Fadlan la soco in qoraalka uu isticmaalo nooca PostgreSQL ee 9.6, tani waxay sabab u tahay shuruudaha gudaha ee shirkadeena. Xalka laguma tijaabin noocyada kale ee PostgreSQL.
Marka xigta, faylka /etc/patroni.yml ee aad hadda abuurtay, waxaad u baahan tahay inaad dhigto waxyaabaha soo socda, dabcan beddelka ciwaannada IP-ga ee meel kasta oo aad isticmaasho.
U fiirso faallooyinka yamlkan. U beddel ciwaannada adiga oo iska leh mishiin kasta oo kutlada ku jira.
/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
Qoraalku waa inuu ku shaqeeyaa dhammaan saddexda mashiin ee kutlada, qaabeynta kore waa in sidoo kale lagu dhejiyaa faylka /etc/patroni.yml dhammaan mishiinnada.
Marka aad dhammayso hawlahan dhammaan mishiinnada ku jira kooxda, ku wad amarka soo socda mid kasta oo ka mid ah
Sug ilaa 30 ilbiriqsi, ka dibna ku wad amarkan mishiinada haray ee kutlada.
HAproxy
Waxaan isticmaalnaa HAproxy-ga cajiibka ah si aan u bixinno hal dhibic oo laga soo galo. Server-ku wuxuu had iyo jeer diyaar ku ahaan doonaa ciwaanka mishiinka lagu rakibay HAproxy
Si aan mashiinka leh HAproxy looga dhigin hal dhibic oo guul darro ah, waxaan ku dhex daadin doonaa weel Docker ah; mustaqbalka waxaa lagu dhex daari karaa kooxda K8 oo ka dhigaysa kooxdeena guuldarraysa xitaa mid la isku halleyn karo.
Samee hage aad ku kaydin karto laba fayl - Dockerfile iyo haproxy.cfg. U tag.
Dockerfile
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
Ka digtoonow, saddexda sadar ee ugu dambeeya ee faylka haproxy.cfg waa inay taxdaa ciwaannada mishiinnadaada. HAproxy waxay la xiriiri doontaa Patroni, madax HTTP-yada sayidku wuxuu had iyo jeer soo celin doonaa 200, nuqulkuna wuxuu had iyo jeer soo celin doonaa 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
Inaga oo ku jira tusaha ay ku jiraan labadeena faylal "been", aynu si isdaba joog ah u fulino amarada ku xidhidhiyaha weelka, iyo sidoo kale bilawga gudbinta dekedaha lagama maarmaanka ah:
Server-ka u ah sayidku wuxuu ahaan doonaa gobolka UP, nuqulkuna wuxuu ahaan doonaa gobolka DOWN. Tani waa caadi, dhab ahaantii way shaqeeyaan, laakiin waxay u muuqdaan sidan sababtoo ah waxay soo celiyaan 503 codsiyada HAproxy. Tani waxay noo ogolaanaysaa inaan mar walba ogaano midka saddexda server ah ee hadda jira.
gunaanad
Waad qurux badan tahay! 30 daqiiqo gudahood waxaad geysay koox xogeed aad u wanaagsan oo u dulqaadan karta qaladka iyo waxqabadka sare oo leh ku celcelinta qulqulka iyo dib u dhaca tooska ah. Haddii aad qorsheyneyso inaad isticmaasho xalkan, iska hubi oo wata dukumeenti rasmi ah oo Patroni, iyo gaar ahaan qaybteeda ku saabsan utility patronictl, kaas oo ku siinaya marin ku habboon maaraynta kooxdaada.