Manangana kluster PostgreSQL tena azo ampiasaina amin'ny fampiasana Patroni, sns, HAProxy

Soa ihany fa tamin'ny fotoana nipoiran'ny olana dia tsy nanana traikefa ampy hamolavolana sy hamoahana io vahaolana io irery aho. Ary avy eo dia nanomboka Googling aho.

Tsy fantatro hoe inona no tratra, fa fanintelony aho dia miatrika ny zava-misy fa na dia manao ny zava-drehetra tsikelikely toy ny ao amin'ny lesona aza aho, manomana tontolo mitovy amin'ny mpanoratra, dia tsy misy na inona na inona mandeha. Tsy fantatro hoe inona no olana, fa rehefa nifanena tamin'izany indray aho dia nanapa-kevitra fa hanoratra ny torolalako manokana aho rehefa mandeha ny zava-drehetra. Iray azo antoka fa hahomby.

TorolΓ lana amin'ny Internet

Sendra ny Internet dia tsy mijaly noho ny tsy fahampian'ny mpitari-dalana isan-karazany, fampianarana, dingana-by-dingana sy ny toy izany. Nitranga izany fa nasaina namolavola vahaolana aho mba handaminana sy hananganana kluster PostgreSQL failover, ny fepetra lehibe indrindra dia ny fandefasana kopia avy amin'ny mpizara Master mankany amin'ny kopia rehetra sy ny fanomezana automatique ny tahiry raha misy mpizara Master. tsy fahombiazana.

Amin'ity dingana ity, nofaritana ny fitambaran'ny teknolojia ampiasaina:

  • PostgreSQL ho DBMS
  • Patroni ho toy ny vahaolana clustering
  • etcd ho tahiry zaraina ho an'ny Patroni
  • HAproxy amin'ny fandaminana teboka fidirana tokana ho an'ny fampiharana mampiasa ny angon-drakitra

fametrahana

Ho an'ny sainao - manangana cluster PostgreSQL tena azo ampiasaina amin'ny fampiasana Patroni, etcd, HAProxy.

Ny asa rehetra dia natao tamin'ny milina virtoaly misy Debian 10 OS napetraka.

sns

Tsy manoro hevitra ny fametrahana etcd amin'ny milina iray izay misy ny patroni sy postgresql aho, satria ny enta-mavesatra dia tena zava-dehibe amin'ny etcd. Fa ho an'ny tanjona fanabeazana dia hanao izany izahay.
Andao hametraka sns.

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

Ampio votoaty amin'ny rakitra /etc/default/etcd

[mpikambana]

ETCD_NAME=datanode1 # anarana mpampiantrano ny milinanao
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”

TOKONY HO VALIO NY ADDRESS IP REHETRA. LISTER PEER, CLIENT sns TOKONY Apetraka amin'ny adiresy IP an'ny mpampiantrano

ETCD_LISTEN_PEER_URLS="http://192.168.0.143:2380Β»# adiresin'ny fiaranao
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.143:2379,http://127.0.0.1:2379Β»# adiresin'ny fiaranao

[cluster]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.143:2380Β»# adiresin'ny fiaranao
ETCD_INITIAL_CLUSTER=Β»datanode1=http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=http://192.168.0.145:2380Β» adiresin'ny milina rehetra ao amin'ny cluster etcd
ETCD_INITIAL_CLUSTER_STATE="vaovao"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1β€³
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.143:2379Β»# adiresin'ny fiaranao

Alefaso ny baiko

systemctl restart etcd

PostgreSQL 9.6 + patroni

Ny zavatra voalohany tokony hataonao dia manangana milina virtoaly telo hametrahana ny rindrambaiko ilaina amin'izy ireo. Aorian'ny fametrahana ny milina, raha manaraka ny torolalako ianao, dia azonao atao ny mampandeha ity script tsotra ity izay (saika) hanao ny zava-drehetra ho anao. Mihazakazaka toy ny faka.

Mariho fa ny script dia mampiasa PostgreSQL version 9.6, izany dia noho ny fepetra takian'ny orinasanay. Ny vahaolana dia tsy nosedraina tamin'ny dikan-teny hafa amin'ny 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

Manaraka izany, ao amin'ny rakitra /etc/patroni.yml vao noforoninao dia mila mametraka ireto atiny manaraka ireto ianao, mazava ho azy fa manova ny adiresy IP amin'ny toerana rehetra amin'ny adiresy ampiasainao.
Tandremo ny fanehoan-kevitra amin'ity yaml ity. Hanova ny adiresy ho anao manokana amin'ny milina tsirairay ao amin'ny cluster.

/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

Ny script dia tsy maintsy atao amin'ny milina telo ao amin'ny cluster, ary tsy maintsy apetraka ao amin'ny rakitra /etc/patroni.yml amin'ny milina rehetra ihany koa ny fanitsiana etsy ambony.

Rehefa vitanao ireo asa ireo amin'ny milina rehetra ao amin'ny cluster dia araho ity baiko manaraka ity amin'ny iray amin'izy ireo

systemctl start patroni
systemctl start postgresql

Andraso eo amin'ny 30 segondra eo ho eo, ary ampiharo ity baiko ity amin'ireo milina sisa ao amin'ny cluster.

HAproxy

Mampiasa ny HAproxy mahafinaritra izahay mba hanomezana toerana fidirana tokana. Ny mpizara master dia ho hita foana amin'ny adiresin'ny milina izay ametrahana HAproxy.

Mba tsy hahatonga ny milina miaraka amin'ny HAproxy ho teboka iray tsy fahombiazana, dia halefantsika ao anaty container Docker izy io; amin'ny ho avy dia azo apetraka ao amin'ny cluster K8 izy io ary hahatonga ny cluster failover ho azo antoka kokoa.

Mamorona lahatahiry ahafahanao mitahiry rakitra roa - Dockerfile sy haproxy.cfg. Mandehana any.

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

Tandremo fa ny andalana telo farany amin'ny rakitra haproxy.cfg dia tokony mitanisa ny adiresin'ny milinanao. Hifandray amin'i Patroni ny HAproxy, ao amin'ny lohatenin'ny HTTP dia hiverina 200 foana ny mpizara master, ary hiverina 503 foana ny kopia.

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

Ao amin'ny lahatahiry misy ny rakitra roa "mandainga", andao hanatanteraka ny baiko amin'ny famenoana ny kaontenera, ary koa ny fandefasana azy amin'ny fandefasana ireo seranana ilaina:

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

Ankehitriny, amin'ny fanokafana ny adiresin'ny masininao miaraka amin'ny HAproxy ao amin'ny navigateur ary mamaritra ny seranan-tsambo 7000 dia hahita antontan'isa amin'ny cluster ianao.

Ny mpizara izay tompony dia ho ao amin'ny fanjakana UP, ary ny kopia dia ho any amin'ny fanjakana DOWN. Ara-dalΓ na izany, raha ny marina dia miasa izy ireo, saingy miseho toy izao izy ireo satria mamerina ny 503 ho an'ny fangatahana avy amin'ny HAproxy. Izany dia ahafahantsika mahafantatra tsara hoe iza amin'ireo mpizara telo no tompony ankehitriny.

famaranana

Tsara tarehy ianao! Tao anatin'ny 30 minitra monja dia nametraka kluster angon-drakitra mahazaka lesoka tsara sy mahomby ianao miaraka amin'ny replication streaming sy fiverenana mandeha ho azy. Raha mikasa ny hampiasa ity vahaolana ity ianao dia jereo miaraka amin'ny antontan-taratasy ofisialy Patroni, ary indrindra amin'ny anjarany momba ny utility patronictl, izay manome fidirana mora amin'ny fitantanana ny cluster anao.

Arahabaina!

Source: www.habr.com

Add a comment