A’ togail cruinneachadh PostgreSQL a tha ri fhaighinn gu mòr a’ cleachdadh Patroni, msaa, HAProxy

Tha e dìreach mar sin a thachair, aig an àm a chaidh an duilgheadas a thogail, nach robh eòlas gu leòr agam airson am fuasgladh seo a leasachadh agus a chuir air bhog leis fhèin. Agus an uairsin thòisich mi air Googling.

Chan eil fios agam dè a th’ ann an glacadh, ach airson an umpteenth turas tha mi a’ cur aghaidh ris, eadhon ged a nì mi a h-uile càil ceum air cheum mar a tha san oideachadh, gun ullaich mi an aon àrainneachd ris an ùghdar, nach obraich dad a-riamh. Chan eil dad a dh’ fhios agam dè a th’ ann, ach nuair a choinnich mi ri seo a-rithist, cho-dhùin mi gun sgrìobh mi an oideachadh agam fhìn nuair a dh’ obraicheas a h-uile càil. Aon a bhios gu cinnteach ag obair.

Stiùireadh air an eadar-Lìon a

Tha e dìreach mar sin a’ tachairt nach eil an eadar-lìn a’ fulang le dìth diofar stiùiridhean, clasaichean oideachaidh, ceum air cheum is an leithid. Tha e dìreach mar sin a thachair gun robh e mar dhleastanas orm fuasgladh a leasachadh airson cruinneachadh PostgreSQL a chuir air dòigh agus a thogail gu h-iomchaidh, agus b’ e na prìomh riatanasan airson ath-riochdachadh bhon phrìomh fhrithealaiche gu gach mac-samhail agus solar tèarmann gu fèin-ghluasadach ma bha Prìomh fhrithealaiche ann. fàilligeadh.

Aig an ìre seo, chaidh an cruach de theicneòlasan a chaidh a chleachdadh a dhearbhadh:

  • PostgreSQL mar DBMS
  • Pàtran mar fhuasgladh cnuasachaidh
  • msaa mar stòradh sgaoilte airson Patroni
  • HAproxy airson aon àite inntrigidh a chuir air dòigh airson tagraidhean a’ cleachdadh an stòr-dàta

suidheachadh

Airson d ’aire - a’ togail cruinneachadh PostgreSQL a tha ri fhaighinn gu mòr a ’cleachdadh Patroni, msaa, HAProxy.

Chaidh a h-uile gnìomh a dhèanamh air innealan brìgheil le Debian 10 OS air a chuir a-steach.

etc

Chan eil mi a’ moladh a bhith a’ stàladh msaa air na h-aon innealan far am bi patroni agus postgresql suidhichte, leis gu bheil luchd diosc glè chudromach airson msaa. Ach airson adhbharan foghlaim, nì sinn dìreach sin.
Nach stàlaich sinn etcd.

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

Cuir susbaint ris an fhaidhle /etc/default/etcd

[ball]

ETCD_NAME=nóid dàta1 # ainm òstair an inneil agad
ETCD_DATA_DIR =”/var/lib/etcd/default.etcd”

FEUMAIDH A h-uile seòladh IP a bhith dligheach. FEUMAIDH LISTER PEER, CLIENT etc A CHUID GU SEADH IP AN Aoigh

ETCD_LISTEN_PEER_URLS="http://192.168.0.143:2380» # seòladh a’ chàir agad
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.143:2379,http://127.0.0.1:2379» # seòladh a’ chàir agad

[cnuasach]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.143:2380» # seòladh a’ chàir agad
ETCD_INITIAL_CLUSTER=»node data1=http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=http://192.168.0.145:2380» # seòlaidhean a h-uile inneal anns a’ bhuidheann msaa
ETCD_INITIAL_CLUSTER_STATE="ùr"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.143:2379» # seòladh a’ chàir agad

Ruith an àithne

systemctl restart etcd

PostgreSQL 9.6 + neach-taic

Is e a’ chiad rud a dh’ fheumas tu a dhèanamh a bhith a’ stèidheachadh trì innealan brìgheil gus am bathar-bog riatanach a chuir a-steach orra. Às deidh dhut na h-innealan a chuir a-steach, ma leanas tu an oideachadh agam, faodaidh tu an sgriobt sìmplidh seo a ruith a nì (cha mhòr) a h-uile càil dhut. A 'ruith mar root.

Thoir an aire gu bheil an sgriobt a’ cleachdadh dreach PostgreSQL 9.6, tha seo mar thoradh air riatanasan a-staigh a’ chompanaidh againn. Cha deach am fuasgladh a dhearbhadh air dreachan 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

An ath rud, anns an fhaidhle /etc/patroni.yml a chruthaich thu, feumaidh tu an t-susbaint a leanas a chuir, gu dearbh ag atharrachadh nan seòlaidhean IP anns a h-uile àite gu na seòlaidhean a chleachdas tu.
Thoir an aire do na beachdan anns an yaml seo. Atharraich na seòlaidhean dhut fhèin air gach inneal sa bhuidheann.

/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

Feumaidh an sgriobt a bhith air a ruith air na trì innealan den bhuidheann, agus feumar an rèiteachadh gu h-àrd a chuir anns an fhaidhle /etc/patroni.yml air a h-uile inneal.

Aon uair ‘s gu bheil thu air na h-obraichean seo a chrìochnachadh air a h-uile inneal sa bhuidheann, ruith an àithne a leanas air gin dhiubh

systemctl start patroni
systemctl start postgresql

Fuirich timcheall air 30 diog, agus an uairsin ruith an àithne seo air na h-innealan a tha air fhàgail sa bhuidheann.

HAproxy

Bidh sinn a’ cleachdadh an HAproxy mìorbhaileach gus aon àite inntrigidh a thoirt seachad. Bidh am prìomh fhrithealaiche an-còmhnaidh ri fhaighinn aig seòladh an inneil air a bheil HAproxy air a chleachdadh.

Gus nach dèan an inneal le HAproxy aon phuing fàiligeadh, cuiridh sinn air bhog e ann an soitheach Docker; san àm ri teachd faodar a chuir air bhog a-steach do bhuidheann K8 agus ar cruinneachadh teip a dhèanamh eadhon nas earbsaiche.

Cruthaich eòlaire far an urrainn dhut dà fhaidhle a stòradh - Dockerfile agus haproxy.cfg. Rach thuige.

Faidhle docker

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

Bi faiceallach, bu chòir dha na trì loidhnichean mu dheireadh den fhaidhle haproxy.cfg seòlaidhean nan innealan agad a liostadh. Cuiridh HAproxy fios gu Patroni, anns na cinn HTTP bidh am prìomh fhrithealaiche an-còmhnaidh a’ tilleadh 200, agus bidh am mac-samhail an-còmhnaidh a’ tilleadh 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

Le bhith anns an eòlaire anns a bheil an dà fhaidhle againn “na laighe,” leig leinn na h-òrdughan airson a bhith a’ pacadh an t-soithich a chuir an gnìomh, a bharrachd air a chuir air bhog le bhith a’ cur air adhart na puirt riatanach:

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

A-nis, le bhith a’ fosgladh seòladh an inneil agad le HAproxy sa bhrobhsair agus a’ sònrachadh port 7000, chì thu staitistig air a’ bhuidheann agad.

Bidh am frithealaiche a tha na mhaighstir anns an stàit UP, agus bidh na mac-samhail anns an stàit DOWN. Tha seo àbhaisteach, gu dearbh tha iad ag obair, ach tha iad a 'nochdadh mar seo oir tha iad a' tilleadh 503 airson iarrtasan bho HAproxy. Leigidh seo leinn fios a bhith againn an-còmhnaidh dè dìreach de na trì frithealaichean a tha na mhaighstir gnàthach.

co-dhùnadh

Tha thu àlainn! Ann an dìreach 30 mionaidean tha thu air cruinneachadh stòr-dàta sàr-mhath a tha fulangach le lochdan agus àrd-choileanadh a chuir a-steach le ath-riochdachadh sruthadh agus tuiteam air ais fèin-ghluasadach. Ma tha thu an dùil am fuasgladh seo a chleachdadh, thoir sùil air le sgrìobhainnean oifigeil Patroni, agus gu sònraichte leis a’ phàirt aige a thaobh goireas patronictl, a bheir cothrom goireasach air a bhith a’ riaghladh do bhuidheann.

Meal do naidheachd!

Source: www.habr.com

Cuir beachd ann