Ag tógáil braisle PostgreSQL atá ar fáil go mór ag baint úsáide as Patroni, etcd, HAProxy

Tharla sé mar sin nach raibh go leor taithí agam ag an am a tháinig an fhadhb chun an réiteach seo a fhorbairt agus a sheoladh liom féin. Agus ansin thosaigh mé ag Googling.

Níl a fhios agam cad é an ghabháil, ach don umpteenth uair tá mé ag tabhairt aghaidhe ar an bhfíric go fiú má dhéanann mé gach rud céim ar chéim mar atá sa rang teagaisc, a ullmhú ar an timpeallacht chéanna leis an údar, ansin ní oibríonn aon rud riamh. Níl aon smaoineamh agam cad é an t-ábhar, ach nuair a tháinig mé ar seo arís, chinn mé go scríobhfaidh mé mo chuid teagaisc féin nuair a bheidh gach rud réidh. Ceann a oibreoidh go cinnte.

Treoracha ar an Idirlíon

Tarlaíonn sé mar sin nach mbíonn an Idirlíon thíos le heaspa treoracha, ranganna teagaisc, céim ar chéim agus a leithéidí. Is amhlaidh a tharla go raibh sé de chúram orm réiteach a fhorbairt chun braisle PostgreSQL teip a eagrú agus a thógáil go caothúil, arb iad na príomhriachtanais a bhí ann ná macasamhlú a shruthú ón Máistirfhreastalaí chuig gach macasamhail agus soláthar uathoibríoch cúlchiste i gcás Máistirfhreastalaí. teip.

Ag an gcéim seo, socraíodh stoic na dteicneolaíochtaí a úsáideadh:

  • PostgreSQL mar DBMS
  • Pátrúin mar réiteach braisle
  • etcd mar stóras dáilte do Patroni
  • HAproxy chun pointe iontrála aonair a eagrú d’fheidhmchláir a úsáideann an bunachar sonraí

Suiteáil

Chun d'aird - ag tógáil braisle PostgreSQL atá ar fáil go mór ag baint úsáide as Patroni, etcd, HAProxy.

Все операции выполнялись на виртуальных машинах с установленной ОС Debian 10.

srl

Ní mholaim etcd a shuiteáil ar na meaisíní céanna ina mbeidh patroni agus postgresql suite, ós rud é go bhfuil ualach diosca an-tábhachtach le haghaidh srl. Ach chun críocha oideachais, déanfaimid é sin.
Déanaimis suiteáil etcd.

#!/bin/bash
apt-get update
apt-get install etcd

Cuir ábhar leis an gcomhad /etc/default/etcd

[ball]

ETCD_NAME=nóid sonraí1 # óstaighainm do mheaisín
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”

BA CHÓIR GACH SEOLADH IP A BHÍ BAILÍ. BA CHÓIR LIOSTA Piaraí, CLIAINT srl A CHUR CHUN SEOLADH IP AN ÓSTA

ETCD_LISTEN_PEER_URLS="http://192.168.0.143:2380» # seoladh do charr
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.143:2379,http://127.0.0.1:2379» # seoladh do charr

[braisle]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.143:2380» # seoladh do charr
ETCD_INITIAL_CLUSTER=»nod sonraí1=http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=http://192.168.0.145:2380» # seoltaí na meaisíní go léir sa chnuasach srl
ETCD_INITIAL_CLUSTER_STATE="nua"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.143:2379» # seoladh do charr

Rith an t-ordú

systemctl restart etcd

PostgreSQL 9.6 + pátrún

Is é an chéad rud is gá duit a dhéanamh ná trí mheaisín fhíorúla a bhunú chun na bogearraí riachtanacha a shuiteáil orthu. Tar éis duit na meaisíní a shuiteáil, má leanann tú mo chuid teagaisc, is féidir leat an script shimplí seo a rith a dhéanfaidh (beagnach) gach rud duit. Ritheann mar fhréamh.

Tabhair faoi deara le do thoil go n-úsáideann an script leagan PostgreSQL 9.6, tá sé seo mar gheall ar riachtanais inmheánacha ár gcuideachta. Níor tástáladh an réiteach ar leaganacha eile de 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

Ansin, sa chomhad /etc/patroni.yml a chruthaigh tú díreach, ní mór duit an t-ábhar seo a leanas a chur, ar ndóigh na seoltaí IP a athrú i ngach áit chuig na seoltaí a úsáideann tú.
Tabhair aird ar na tuairimí sa yaml seo. Athraigh na seoltaí chuig do chuid féin ar gach meaisín sa bhraisle.

/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

Ní mór an script a rith ar na trí mheaisín den bhraisle, agus ní mór an chumraíocht thuas a chur sa chomhad /etc/patroni.yml ar gach meaisín freisin.

Nuair a bheidh na hoibríochtaí seo críochnaithe agat ar gach meaisín sa bhraisle, rith an t-ordú seo a leanas ar aon cheann acu

systemctl start patroni
systemctl start postgresql

Fan thart ar 30 soicind, ansin rith an t-ordú seo ar na meaisíní atá fágtha sa bhraisle.

HAproxy

Bainimid úsáid as an HAproxy iontach chun pointe iontrála amháin a sholáthar. Beidh an máistirfhreastalaí ar fáil i gcónaí ag seoladh an mheaisín ar a n-imscartar HAproxy.

Chun nach mbeidh an meaisín le HAproxy mar phointe teip amháin, seolfaimid é i gcoimeádán Docker; sa todhchaí is féidir é a sheoladh isteach i mbraisle K8 agus ár mbraisle teip a dhéanamh níos iontaofa fós.

Cruthaigh eolaire inar féidir leat dhá chomhad a stóráil - Dockerfile agus haproxy.cfg. Téigh go dtí é.

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

Bí cúramach, ba cheart go liostódh na trí líne dheireanacha den chomhad haproxy.cfg seoltaí do mheaisíní. Déanfaidh HAproxy teagmháil le Patroni, sna ceannteidil HTTP beidh an máistirfhreastalaí ar ais i gcónaí 200, agus tabharfaidh an macasamhail 503 ar ais i gcónaí.

haprocsa.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

A bheith san eolaire ina bhfuil an dá chomhad “luíonn,” déanaimis na horduithe chun an coimeádán a phacáil a fhorghníomhú go seicheamhach, chomh maith lena sheoladh agus na poirt riachtanacha a chur ar aghaidh:

docker build -t my-haproxy .
docker run -d -p5000:5000 -p7000:7000 my-haproxy 

Anois, trí sheoladh do mheaisín a oscailt le HAproxy sa bhrabhsálaí agus port 7000 a shonrú, feicfidh tú staitisticí ar do bhraisle.

Beidh an freastalaí arb é an máistir é sa stát UP, agus beidh na macasamhla sa stát DOWN. Is gnách é seo, i ndáiríre oibríonn siad, ach tá an chuma orthu ar an mbealach seo toisc go dtugann siad 503 ar ais le haghaidh iarratais ó HAproxy. Ligeann sé seo dúinn a bheith ar an eolas i gcónaí go díreach cé acu de na trí fhreastalaí atá ar an máistir reatha.

Conclúid

Tá tú go hálainn! I díreach 30 nóiméad tá braisle bunachar sonraí ardfheidhmíochta atá fabht-fhulangach curtha i bhfeidhm agat le macasamhlú sruthaithe agus cúltaca uathoibríoch. Má tá sé beartaithe agat an réiteach seo a úsáid, seiceáil amach le doiciméadú oifigiúil Patroni, agus go háirithe lena chuid maidir leis an áirgiúlacht patronictl, a sholáthraíonn rochtain áisiúil chun do bhraisle a bhainistiú.

Comhghairdeas!

Foinse: will.com

Ceannaigh óstáil iontaofa do shuímh le cosaint DDoS, freastalaithe VPS VDS 🔥 Ceannaigh óstáil gréasáin iontaofa le cosaint DDoS, freastalaithe VPS VDS | ProHoster