Dhisida koox PostgreSQL oo aad loo heli karo iyadoo la adeegsanayo Patroni, etcd, HAProxy

Waxaa dhacday in waqtiga dhibaatada la soo bandhigay, aanan haysan waayo-aragnimo ku filan oo aan ku horumariyo oo aan furo xalkan oo keliya. Ka dibna waxaan bilaabay Googling.

Ma aqaano waxa qabashadu tahay, laakiin markii ugu horeysay ee aan la kulmayo xaqiiqda ah in xitaa haddii aan sameeyo wax kasta oo tallaabo tallaabo ah sida casharrada, u diyaari jawi isku mid ah sida qoraaga, ka dibna waxba waligiis shaqeeya. Wax fikrad ah kama haysto waxa arrinku yahay, laakiin markii aan tan la kulmay mar kale, waxaan go'aansaday inaan qoro casharradayda marka wax walba ay shaqeeyaan. Mid hubaal shaqayn doona.

Tilmaamaha internetka

Waxay dhacdaa in internetka uusan la kulmin la'aanta hageyaal kala duwan, casharro, tallaabo-tallaabo iyo wixii la mid ah. Waxaa dhacday in la ii xilsaaray inaan soo saaro xal si ku habboon loo abaabulo oo loo dhiso koox fashilantay oo PostgreSQL ah, shuruudaha ugu muhiimsan ee ka soo qulqulaya server-ka Masterka dhammaan nuqullada iyo bixinta tooska ah ee kaydka haddii ay dhacdo server-ka Master-ka. guuldarro.

Marxaladdan, tignoolajiyada la isticmaalay ayaa la go'aamiyay:

  • PostgreSQL sida DBMS
  • Batrooni sida xal kooxeed
  • iwm sida kaydinta loo qaybiyey Patroni
  • HAproxy ee habaynta hal meel laga soo galo ee codsiyada iyadoo la isticmaalayo xogta macluumaadka

Ku rakibida

Si aad u fiirsato - dhisida koox PostgreSQL oo aad loo heli karo adoo isticmaalaya Patroni, etcd, HAProxy.

Dhammaan hawlgallada waxaa lagu sameeyay mashiinnada farsamada gacanta ee Debian 10 OS lagu rakibay.

iwm

Kuma talinayo in lagu rakibo etcd isla mashiinada meesha patroni iyo postgresql ay ku yaaliin, maadaama culeyska diskku aad muhiim ugu yahay iwm. Laakin ujeeddooyin waxbarasho, waxaan sameyn doonaa taas.
Aynu rakibno iwm.

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

Ku dar nuxurka faylka /etc/default/etcd

[xubin]

ETCD_NAME=datanode1 # magaca martida ee mashiinkaaga
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”

DHAMMAAN CINWAANKA IP-ga waa inay noqdaan kuwo sax ah. LISTTER PEER, MACMIILKA iwm waa in lagu dejiyaa ciwaanka IP-ga martigeliyaha

ETCD_LISTEN_PEER_URLS="http://192.168.0.143:2380» # ciwaanka gaarigaaga
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.143:2379,http://127.0.0.1:2379» # ciwaanka gaarigaaga

[cluster]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.143:2380» # ciwaanka gaarigaaga
ETCD_INITIAL_CLUSTER=»datanode1=http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=http://192.168.0.145:2380» # ciwaannada dhammaan mishiinnada ku jira kooxda iwm
ETCD_INITIAL_CLUSTER_STATE="cusub"
ETCD_INITIAL_CLUSTER_TOKEN = "iwm-cluster-1"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.143:2379» # ciwaanka gaarigaaga

Orod amarka

systemctl restart etcd

PostgreSQL 9.6 + patroni

Waxa ugu horreeya ee aad u baahan tahay inaad sameyso waa inaad dejiso saddex mashiinnada farsamada gacanta si aad ugu rakibto software-ka lagama maarmaanka ah iyaga. Kadib rakibidda mishiinnada, haddii aad raacdo casharradayda, waxaad socodsiin kartaa qoraalkan fudud kaas oo (ku dhawaad) kuu qaban doona wax walba. Wuxuu u shaqeeyaa sida xidid

Fadlan la soco in qoraalka uu isticmaalo nooca PostgreSQL ee 9.6, tani waxay sabab u tahay shuruudaha gudaha ee shirkadeena. Xalka laguma tijaabin noocyada kale ee 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

Marka xigta, faylka /etc/patroni.yml ee aad hadda abuurtay, waxaad u baahan tahay inaad dhigto waxyaabaha soo socda, dabcan beddelka ciwaannada IP-ga ee meel kasta oo aad isticmaasho.
U fiirso faallooyinka yamlkan. U beddel ciwaannada adiga oo iska leh mishiin kasta oo kutlada ku jira.

/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

Qoraalku waa inuu ku shaqeeyaa dhammaan saddexda mashiin ee kutlada, qaabeynta kore waa in sidoo kale lagu dhejiyaa faylka /etc/patroni.yml dhammaan mishiinnada.

Marka aad dhammayso hawlahan dhammaan mishiinnada ku jira kooxda, ku wad amarka soo socda mid kasta oo ka mid ah

systemctl start patroni
systemctl start postgresql

Sug ilaa 30 ilbiriqsi, ka dibna ku wad amarkan mishiinada haray ee kutlada.

HAproxy

Waxaan isticmaalnaa HAproxy-ga cajiibka ah si aan u bixinno hal dhibic oo laga soo galo. Server-ku wuxuu had iyo jeer diyaar ku ahaan doonaa ciwaanka mishiinka lagu rakibay HAproxy

Si aan mashiinka leh HAproxy looga dhigin hal dhibic oo guul darro ah, waxaan ku dhex daadin doonaa weel Docker ah; mustaqbalka waxaa lagu dhex daari karaa kooxda K8 oo ka dhigaysa kooxdeena guuldarraysa xitaa mid la isku halleyn karo.

Samee hage aad ku kaydin karto laba fayl - Dockerfile iyo haproxy.cfg. U tag.

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

Ka digtoonow, saddexda sadar ee ugu dambeeya ee faylka haproxy.cfg waa inay taxdaa ciwaannada mishiinnadaada. HAproxy waxay la xiriiri doontaa Patroni, madax HTTP-yada sayidku wuxuu had iyo jeer soo celin doonaa 200, nuqulkuna wuxuu had iyo jeer soo celin doonaa 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

Inaga oo ku jira tusaha ay ku jiraan labadeena faylal "been", aynu si isdaba joog ah u fulino amarada ku xidhidhiyaha weelka, iyo sidoo kale bilawga gudbinta dekedaha lagama maarmaanka ah:

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

Hadda, adoo furaya ciwaanka mashiinkaaga HAproxy browserka oo aad ku qeexdo dekedda 7000, waxaad arki doontaa tirakoobyada kooxdaada.

Server-ka u ah sayidku wuxuu ahaan doonaa gobolka UP, nuqulkuna wuxuu ahaan doonaa gobolka DOWN. Tani waa caadi, dhab ahaantii way shaqeeyaan, laakiin waxay u muuqdaan sidan sababtoo ah waxay soo celiyaan 503 codsiyada HAproxy. Tani waxay noo ogolaanaysaa inaan mar walba ogaano midka saddexda server ah ee hadda jira.

gunaanad

Waad qurux badan tahay! 30 daqiiqo gudahood waxaad geysay koox xogeed aad u wanaagsan oo u dulqaadan karta qaladka iyo waxqabadka sare oo leh ku celcelinta qulqulka iyo dib u dhaca tooska ah. Haddii aad qorsheyneyso inaad isticmaasho xalkan, iska hubi oo wata dukumeenti rasmi ah oo Patroni, iyo gaar ahaan qaybteeda ku saabsan utility patronictl, kaas oo ku siinaya marin ku habboon maaraynta kooxdaada.

Hambalyo!

Source: www.habr.com

Add a comment