ProHoster > blog > Gweinyddiaeth > Adeiladu clwstwr PostgreSQL argaeledd uchel gan ddefnyddio Patroni, ac ati, HAProxy
Adeiladu clwstwr PostgreSQL argaeledd uchel gan ddefnyddio Patroni, ac ati, HAProxy
Yn union fel y digwyddodd, ar adeg gosod y dasg, nid oedd gennyf ddigon o brofiad i ddatblygu a rhedeg y datrysiad hwn yn unig. Ac yna dechreuais googling.
Nid wyf yn gwybod beth yw'r dalfa, ond am y tro ar ddeg rwyf wedi dod ar draws y ffaith, hyd yn oed os gwnewch bopeth gam wrth gam ag yn y tiwtorial, paratowch yr un amgylchedd â'r awdur, nid yw byth yn gweithio. Does gen i ddim syniad beth sy'n bod, ond pan redais i mewn i hyn eto, penderfynais - a byddaf yn ysgrifennu fy nhiwtorial pan fydd popeth yn gweithio allan. Un a fydd yn bendant yn gweithio.
Canllawiau ar y Rhyngrwyd
Mae'n digwydd felly nad yw'r Rhyngrwyd yn dioddef o ddiffyg canllawiau amrywiol, tiwtorialau, cam wrth gam ac ati. Yn union fel y digwyddodd y cefais y dasg o ddatblygu datrysiad ar gyfer trefnu ac adeiladu clwstwr methu PostgreSQL yn gyfleus, a'r prif ofynion ar eu cyfer oedd ffrydio dyblygu o'r Prif weinydd i bob copi a wrth gefn awtomatig pan fydd y gweinydd Meistr yn methu.
Ar y cam hwn, penderfynwyd ar y pentwr o dechnolegau a ddefnyddiwyd:
HAproxy am drefnu un pwynt mynediad ar gyfer ceisiadau sy'n defnyddio'r gronfa ddata
Gosod
Eich sylw yw adeiladu clwstwr PostgreSQL argaeledd uchel gan ddefnyddio Patroni, ac ati, HAProxy.
Perfformiwyd yr holl weithrediadau ar beiriannau rhithwir gyda Debian 10 OS wedi'i osod.
etcd
Nid wyf yn argymell gosod ac ati ar yr un peiriannau lle bydd patroni a postgresql wedi'u lleoli, gan fod llwyth disg yn bwysig iawn ar gyfer ac ati. Ond at ddibenion addysgol, byddwn yn gwneud hynny.
Gosod etcd.
#!/bin/bash
apt-get update
apt-get install etcd
Ychwanegu cynnwys i ffeil /etc/default/etcd
[aelod]
ETCD_NAME=nod data1 # enw gwesteiwr eich peiriant
ETCD_DATA_DIR = "/var/lib/etcd/default.etcd"
DYLAI POB CYFEIRIAD IP FOD YN DDILYS. DYLID GOSOD CYFEILLION RHESTR, CLEIENT ac ati I GYFEIRIAD IP Y GWESTIWR
Y peth cyntaf i'w wneud yw sefydlu tri pheiriant rhithwir i osod y feddalwedd angenrheidiol arnynt. Ar ôl gosod y peiriannau, os dilynwch fy nhiwtorial, gallwch chi redeg y sgript syml hon a fydd (bron) yn gwneud popeth i chi. Yn rhedeg fel gwraidd.
Sylwch fod y sgript yn defnyddio fersiwn PostgreSQL 9.6, mae hyn oherwydd gofynion mewnol ein cwmni. Nid yw'r datrysiad wedi'i brofi ar fersiynau PostgreSQL eraill.
Nesaf, yn y ffeil /etc/patroni.yml rydych chi newydd ei greu, mae angen i chi roi'r cynnwys canlynol, wrth gwrs gan newid y cyfeiriadau ip ym mhob man i'r cyfeiriadau rydych chi'n eu defnyddio.
Rhowch sylw i'r sylwadau yn yr iaml hwn. Newidiwch y cyfeiriadau i'ch rhai chi, ar bob peiriant yn y clwstwr.
/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
Rhaid rhedeg y sgript ar y tri pheiriant yn y clwstwr, yn union fel y mae'n rhaid gosod y ffurfweddiad uchod yn y ffeil /etc/patroni.yml ar bob peiriant.
Pan fyddwch wedi gwneud y gweithrediadau hyn ar bob peiriant clwstwr, rhedwch y gorchymyn canlynol ar unrhyw un ohonynt
Arhoswch tua 30 eiliad, yna rhedeg y gorchymyn hwn ar weddill y peiriannau yn y clwstwr.
HAproxy
Rydym yn defnyddio'r HAproxy gwych i ddarparu un pwynt mynediad. Bydd y prif weinydd bob amser ar gael yng nghyfeiriad y peiriant lle mae HAproxy yn cael ei ddefnyddio.
Er mwyn peidio â gwneud y peiriant gyda HAproxy yn un pwynt methiant, byddwn yn ei redeg mewn cynhwysydd Docker, yn y dyfodol bydd yn bosibl ei redeg mewn clwstwr K8 a gwneud ein clwstwr methiant hyd yn oed yn fwy dibynadwy.
Creu cyfeiriadur lle gallwch storio dwy ffeil - Dockerfile a haproxy.cfg. Ewch i mewn iddo.
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
Byddwch yn ofalus, dylai tair llinell olaf y ffeil haproxy.cfg restru cyfeiriadau eich peiriannau. Bydd HAproxy yn cysylltu â Patroni, ym mhenawdau HTTP bydd y prif weinydd bob amser yn dychwelyd 200, a bydd y replica bob amser yn dychwelyd 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
Gan ein bod yn y cyfeiriadur y mae ein dwy ffeil yn “gorwedd ynddo”, byddwn yn gweithredu'r gorchmynion ar gyfer pacio'r cynhwysydd yn olynol, yn ogystal â'i lansio gyda'r porthladdoedd angenrheidiol a anfonwyd ymlaen:
Nawr, pan fyddwch chi'n agor cyfeiriad eich peiriant gyda HAproxy yn y porwr a nodi porthladd 7000, fe welwch yr ystadegau ar gyfer eich clwstwr.
Bydd y gweinydd sy'n feistr yn y cyflwr UP, a bydd y copïau yn y cyflwr I LAWR. Mae hyn yn normal, mewn gwirionedd maent yn gweithio, ond maent yn cael eu harddangos yn y ffurflen hon oherwydd eu bod yn dychwelyd 503 ar geisiadau gan HAproxy. Mae hyn yn caniatáu inni bob amser wybod yn union pa un o'r tri gweinydd yw'r meistr presennol.
Casgliad
Rwyt ti'n brydferth! Mewn dim ond 30 munud, rydych chi wedi defnyddio clwstwr cronfa ddata methiant a pherfformiad gwych gyda dyblygu ffrydio a methiant awtomatig. Os ydych chi'n bwriadu defnyddio'r datrysiad hwn, gweler gyda dogfennaeth swyddogol Patroni, ac yn enwedig gyda'i ran ynghylch y cyfleustodau nawddoglyd, sy'n darparu mynediad cyfleus i reoli'ch clwstwr.