ProHoster > Blog > Stjórnsýsla > Að byggja upp mjög fáanlegur PostgreSQL þyrping með því að nota Patroni, etcd, HAProxy
Að byggja upp mjög fáanlegur PostgreSQL þyrping með því að nota Patroni, etcd, HAProxy
Það gerðist bara þannig að á þeim tíma sem vandamálið kom upp hafði ég ekki næga reynslu til að þróa og koma þessari lausn af stað einn. Og svo byrjaði ég að googla.
Ég veit ekki hver gripurinn er, en í margfættasta skiptið stend ég frammi fyrir því að jafnvel þótt ég geri allt skref fyrir skref eins og í kennslunni, undirbúi sama umhverfi og höfundurinn, þá virkar aldrei neitt. Ég hef ekki hugmynd um hvað er að, en þegar ég rakst á þetta aftur ákvað ég að skrifa mitt eigið námskeið þegar allt gengur upp. Einn sem mun örugglega virka.
Leiðbeiningar á Netinu
Það vill svo til að internetið þjáist ekki af skorti á ýmsum leiðbeiningum, leiðbeiningum, skref-fyrir-skref og þess háttar. Það gerðist bara þannig að mér var falið að þróa lausn til að skipuleggja og byggja upp bilunar- PostgreSQL þyrping á þægilegan hátt, þar sem helstu kröfurnar voru að streyma afritun frá Master miðlara yfir á allar eftirmyndir og sjálfvirk úthlutun varasjóðs ef um Master miðlara væri að ræða. bilun.
Á þessu stigi var stafla af tækni sem notuð var ákvörðuð:
HAproxy til að skipuleggja einn aðgangsstað fyrir forrit sem nota gagnagrunninn
Uppsetning
Fyrir athygli þína - byggja upp mjög fáanlegur PostgreSQL þyrping með því að nota Patroni, etcd, HAProxy.
Allar aðgerðir voru gerðar á sýndarvélum með Debian 10 OS uppsett.
osfrv
Ég mæli ekki með því að setja upp etcd á sömu vélunum þar sem patroni og postgresql verða staðsett, þar sem diskálag er mjög mikilvægt fyrir etcd. En í fræðsluskyni munum við gera einmitt það.
Við skulum setja upp etcd.
Það fyrsta sem þú þarft að gera er að setja upp þrjár sýndarvélar til að setja upp nauðsynlegan hugbúnað á þær. Eftir að hafa sett upp vélarnar, ef þú fylgir kennslunni minni, geturðu keyrt þetta einfalda handrit sem mun (næstum) gera allt fyrir þig. Keyrir sem rót.
Vinsamlegast athugaðu að handritið notar PostgreSQL útgáfu 9.6, þetta er vegna innri krafna fyrirtækisins okkar. Lausnin hefur ekki verið prófuð á öðrum útgáfum af PostgreSQL.
Næst, í /etc/patroni.yml skránni sem þú varst að búa til, þarftu að setja eftirfarandi innihald, auðvitað að breyta IP tölunum á öllum stöðum í vistföngin sem þú notar.
Gefðu gaum að athugasemdunum í þessari yaml. Breyttu heimilisföngunum í þitt eigið á hverri vél í klasanum.
/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
Forskriftin verður að keyra á öllum þremur vélum þyrpingarinnar og ofangreindar stillingar verða einnig að vera settar í /etc/patroni.yml skrána á öllum vélum.
Þegar þú hefur lokið þessum aðgerðum á öllum vélum í klasanum skaltu keyra eftirfarandi skipun á einhverri þeirra
Bíddu í um það bil 30 sekúndur, keyrðu síðan þessa skipun á þeim vélum sem eftir eru í þyrpingunni.
HAproxy
Við notum hið frábæra HAproxy til að bjóða upp á einn aðgangsstað. Aðalþjónninn verður alltaf tiltækur á heimilisfangi vélarinnar sem HAproxy er sett á.
Til þess að gera vélina með HAproxy ekki að einum bilunarpunkti munum við ræsa hana í Docker gámi; í framtíðinni er hægt að ræsa hana í K8 þyrpinguna og gera bilunarklasann okkar enn áreiðanlegri.
Búðu til möppu þar sem þú getur geymt tvær skrár - Dockerfile og haproxy.cfg. Farðu í það.
Dockerfil
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
Vertu varkár, síðustu þrjár línurnar í haproxy.cfg skránni ættu að skrá heimilisföng vélanna þinna. HAproxy mun hafa samband við Patroni, í HTTP hausunum mun aðalþjónninn alltaf skila 200 og eftirmyndin mun alltaf skila 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
Verum í möppunni þar sem báðar skrárnar okkar „ligga“, skulum framkvæma skipanirnar í röð til að pakka ílátinu, ásamt því að ræsa hann með áframsendingu nauðsynlegra gátta:
Nú, með því að opna heimilisfang vélarinnar þinnar með HAproxy í vafranum og tilgreina port 7000, muntu sjá tölfræði um þyrpinguna þína.
Miðlarinn sem er meistarinn verður í UPP ástandinu og eftirmyndirnar verða í NIÐUR ástandinu. Þetta er eðlilegt, reyndar virka þeir, en þeir birtast þannig vegna þess að þeir skila 503 fyrir beiðnir frá HAproxy. Þetta gerir okkur kleift að vita alltaf nákvæmlega hver af þremur netþjónum er núverandi skipstjóri.
Ályktun
Þú ert stórglæsileg! Á aðeins 30 mínútum hefurðu komið fyrir frábærum bilanaþolnum og afkastamiklum gagnagrunnsþyrpingum með straumafritun og sjálfvirkri fallback. Ef þú ætlar að nota þessa lausn, skoðaðu þá með opinberum Patroni skjölum, og sérstaklega með hluta þess varðandi patronictl tólið, sem veitir þægilegan aðgang að stjórnun klasans þíns.