Fausiaina o le PostgreSQL faʻapipiʻi avanoa e faʻaaoga ai Patroni, etcd, HAProxy

Na tupu lava i le taimi na tulaʻi mai ai le faʻafitauli, e leʻi lava loʻu poto masani e atiaʻe ma faʻalauiloa naʻo aʻu lenei fofo. Ona ou amata loa lea o le Googling.

Ou te le iloa po o le a le puʻe, ae mo le taimi faʻasefululima ua ou feagai ma le mea moni e tusa lava pe ou te faia mea uma i lea laasaga ma lea laasaga e pei o le aʻoaʻoga, saunia le siosiomaga tutusa e pei o le tusitala, e leai se mea e aoga. Ou te le iloa po o le a le mea ua tupu, ae ina ua ou toe feiloai i lenei mea, sa ou filifili o le a ou tusia laʻu lava aʻoaʻoga pe a lelei mea uma. Tasi e mautinoa lava e aoga.

Taiala i luga ole Initaneti

E tupu lava e le afaina le Initaneti i le leai o ni taʻiala eseese, aʻoaʻoga, laasaga taʻitasi ma isi. Na o le mea lava na tupu na faʻatonuina aʻu i le atinaʻeina o se fofo mo le faʻatulagaina lelei ma le fausiaina o se failover PostgreSQL cluster, o mea autu e manaʻomia e tafe mai ai le kopi mai le Master server i faʻataʻitaʻiga uma ma le tuʻuina atu otometi o se faʻaagaaga pe a tupu se Master server. toilalo.

I lenei laʻasaga, o le faʻaputuina o tekinolosi faʻaaogaina na fuafuaina:

  • PostgreSQL o se DBMS
  • Patroni e pei o se fofo faʻapipiʻi
  • etcd e pei o le tufatufaina atu mo Patroni
  • HAproxy mo le faʻatulagaina o se nofoaga e tasi e ulufale ai mo talosaga e faʻaaoga ai le database

faatulagaga

Mo lou faʻalogo - fausia se faʻapipiʻi PostgreSQL avanoa e faʻaaoga ai Patroni, etcd, HAProxy.

O fa'agaioiga uma na fa'atinoina i masini masini fa'atasi ma Debian 10 OS fa'apipi'i.

ma isi mea

Ou te le fautuaina le faʻapipiʻiina o etcd i luga o masini lava e tasi o loʻo i ai patroni ma postgresql, talu ai e taua tele le uta o le disk mo etcd. Ae mo faamoemoega faaleaoaoga, o le a tatou faia na o lena.
Tatou fa'apipi'i etcd.

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

Fa'aopoopo mea i le /etc/default/etcd faila

[sui]

ETCD_NAME=datanode1 # igoa talimalo o lau masini
ETCD_DATA_DIR =”/var/lib/etcd/default.etcd”

UMA IP ADDRESS E TATAU FAAMANA. LISTER PEER, CLIENT etc E TATAU ATU I LE IP ADDRESS O LE HOST

ETCD_LISTEN_PEER_URLS="http://192.168.0.143:2380» # tuatusi o lau taavale
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.143:2379,http://127.0.0.1:2379» # tuatusi o lau taavale

[vaega]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.143:2380» # tuatusi o lau taavale
ETCD_INITIAL_CLUSTER=»datanode1=http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=http://192.168.0.145:2380» # tuatusi o masini uma o lo'o i totonu ole fuifui etcd
ETCD_INITIAL_CLUSTER_STATE="fou"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.143:2379» # tuatusi o lau taavale

Faatino le poloaiga

systemctl restart etcd

PostgreSQL 9.6 + lagolago

O le mea muamua e tatau ona e faia o le faʻatulagaina o masini komepiuta e tolu e faʻapipiʻi ai le polokalama talafeagai ia i latou. A maeʻa ona faʻapipiʻi masini, afai e te mulimuli i laʻu aʻoaʻoga, e mafai ona e faʻataʻitaʻiina lenei tusitusiga faigofie o le a (toetoe lava) faia mea uma mo oe. E tamo'e pei o a'a.

Faamolemole ia matau o loʻo faʻaogaina e le tusitusiga le PostgreSQL version 9.6, e mafua ona o manaoga i totonu o la matou kamupani. O le fofo e leʻi faʻataʻitaʻiina i isi lomiga o 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

O le isi, i le faila /etc/patroni.yml na e faatoa fatuina, e tatau ona e tuʻuina mea o loʻo i lalo, o le mea moni o le suia o tuatusi IP i nofoaga uma i tuatusi e te faʻaaogaina.
Fa'alogo lelei i fa'amatalaga i lenei yaml. Suia tuatusi ia oe lava i masini taitasi i le fuifui.

/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

O le tusitusiga e tatau ona faʻatautaia i masini uma e tolu o le fuifui, ma o le faʻatulagaga o loʻo i luga e tatau foi ona tuʻuina i le /etc/patroni.yml faila i masini uma.

A mae'a loa nei fa'agaioiga i masini uma o lo'o i totonu o le fuifui, fa'ata'ita'i le fa'atonuga lea i so'o se tasi o latou

systemctl start patroni
systemctl start postgresql

Fa'atali pe a ma le 30 sekone, ona fa'atino lea o le fa'atonuga i masini o lo'o totoe i le fuifui.

HAproxy

Matou te faʻaogaina le HAproxy matagofie e tuʻuina atu ai se mea e tasi e ulufale ai. O le a maua pea le server master i le tuatusi o le masini lea e faʻapipiʻi ai HAproxy.

Ina ia aua nei faia le masini ma le HAproxy o se mea e tasi o le toilalo, o le a matou faʻalauiloaina i totonu o se pusa Docker; i le lumanaʻi e mafai ona faʻalauiloaina i totonu o le K8's fuifui ma faʻamalosia atili ai le faʻatuatuaina o la tatou fuifui failover.

Fausia se lisi e mafai ona e teuina ai faila e lua - Dockerfile ma haproxy.cfg. Alu i ai.

faila faila

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

Fa'aeteete, o laina mulimuli e tolu o le faila haproxy.cfg e tatau ona lisi ai tuatusi o au masini. HAproxy o le a faʻafesoʻotaʻi Patroni, i le HTTP headers o le a toe foʻi mai i taimi uma le server master 200, ma o le faʻataʻitaʻiga o le a toe foʻi mai i le 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

O le i ai i totonu o le lisi lea e "pepelo ai" a tatou faila uma, seʻi o tatou faʻasolosolo faʻatonuga mo le teuina o le atigipusa, faʻapea foʻi ma le faʻalauiloaina ma le tuʻuina atu o ports talafeagai:

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

I le taimi nei, e ala i le tatalaina o le tuatusi o lau masini ma HAproxy i le suʻega ma faʻamaonia le taulaga 7000, o le a e vaʻai i fuainumera i lau fuifui.

O le 'auʻaunaga o loʻo avea ma matai o le a i le setete UP, ma o faʻataʻitaʻiga o le a i le setete i lalo. O le mea masani lea, i le mea moni latou te galulue, ae e foliga mai i lenei auala aua latou te toe faafoi 503 mo talosaga mai HAproxy. O lenei mea e mafai ai ona tatou iloa tonu po o ai o le tolu 'auʻaunaga o loʻo i ai nei le matai.

iʻuga

E te aulelei! I le na'o le 30 minute ua e fa'apipi'iina ai se fa'aputuga fa'amaumauga e sili ona lelei e fa'apalepale i fa'aletonu ma maualuga fa'atinoga fa'atasi ai ma fa'agasolo fa'aliliuga ma fa'ato'a toe fo'i. Afai o loʻo e fuafua e faʻaaoga lenei fofo, siaki fa'atasi ai ma fa'amaumauga aloaia a Patroni, aemaise lava i lana vaega e uiga i le aoga patronictl, lea e maua ai le avanoa faigofie i le puleaina o lau fuifui.

Fa'afetai!

puna: www.habr.com

Faaopoopo i ai se faamatalaga