Iwulite ụyọkọ PostgreSQL dị nke ukwuu site na iji Patroni, wdgd, HAProxy

Ọ bụ ezie na n'oge nsogbu ahụ, enweghị m ahụmahụ zuru oke iji mepụta na ịmalite ngwọta a naanị. Ma maliteziri m Googling.

Amaghị m ihe nwude ahụ bụ, ma maka oge nke iri na ụma, m na-eche eziokwu ahụ ihu na ọ bụrụgodị na m na-eme ihe ọ bụla site na nzọụkwụ dị ka nkuzi, kwadebe otu gburugburu ebe obibi dị ka onye edemede, mgbe ahụ ọ dịghị ihe na-arụ ọrụ. Amaghị m ihe ọ bụ, mana mgbe m zutere nke a ọzọ, ekpebiri m na m ga-ede nkuzi nke m mgbe ihe niile na-arụ ọrụ. Otu nke ga-arụ ọrụ.

Ntuziaka na ịntanetị

Ọ bụ naanị na ịntanetị anaghị ata ahụhụ site na enweghị ntuziaka dị iche iche, nkuzi, nzọụkwụ-site-nzọụkwụ na ihe ndị yiri ya. Ọ dị otu a ka e nyere m ọrụ ịmepụta ihe ngwọta maka ịhazi nke ọma na iwulite ụyọkọ PostgreSQL na-adịghị mma, ihe bụ isi ihe achọrọ bụ nke na-ebugharị nsụgharị site na ihe nkesa Master na ihe niile na-emepụta ihe na-akpaghị aka na ihe omume nke ihe nkesa Master. ọdịda.

N'oge a, a na-ekpebi nchịkọta teknụzụ eji eme ihe:

  • PostgreSQL dị ka DBMS
  • Onye nkwado dị ka ngwọta nchịkọta
  • wdgd dị ka nchekwa ekesa maka Patroni
  • HAproxy maka ịhazi otu ntinye ntinye maka ngwa site na iji nchekwa data

ọnọdụ

Maka nlebara anya gị - wulite ụyọkọ PostgreSQL dị nke ukwuu site na iji Patroni, wdgd, HAProxy.

Emere ọrụ niile na igwe mebere nke etinyere Debian 10 OS.

wdg

Anaghị m akwado ịwụnye etcd n'otu igwe ebe patroni na postgresql ga-adị, ebe ọ bụ na ibu diski dị ezigbo mkpa maka wdg. Mana maka ebumnuche nkuzi, anyị ga-eme nke ahụ.
Ka anyị tinye wdgd.

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

Tinye ọdịnaya na /etc/default/etcd faịlụ

[onye otu]

ETCD_NAME=datanode1 # aha nnabata nke igwe gị
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”

Adreesị IP niile kwesịrị ekwesị. E KWESỊRỊ EKWESỊRỊ NDỊ LISTER PEER, CLIENT etc na adreesị IP nke onye ọbịa

ETCD_LISTEN_PEER_URLS="http://192.168.0.143:2380» # adreesị ụgbọ ala gị
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.143:2379,http://127.0.0.1:2379» # adreesị ụgbọ ala gị

[ụyọkọ]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.143:2380» # adreesị ụgbọ ala gị
ETCD_INITIAL_CLUSTER=»datanode1=http://192.168.0.143:2380,datanode2=http://192.168.0.144:2380,datanode3=http://192.168.0.145:2380» # adreesị igwe niile dị na ụyọkọ wdgd
ETCD_INITIAL_CLUSTER_STATE = " ọhụrụ"
ETCD_INITIAL_CLUSTER_TOKEN = "etcd-ụyọkọ-1"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.143:2379» # adreesị ụgbọ ala gị

Gbaa iwu ahụ

systemctl restart etcd

PostgreSQL 9.6 + onye nkwado

Ihe mbụ ị ga-eme bụ ịtọlite ​​​​igwe mebere igwe atọ iji wụnye ngwanrọ dị mkpa na ha. Mgbe ị wụnyechara igwe, ọ bụrụ na ị na-agbaso nkuzi m, ị nwere ike ịgba ọsọ edemede a dị mfe nke ga-emere gị ihe niile. Na-agba ọsọ dị ka mgbọrọgwụ.

Biko mara na edemede ahụ na-eji ụdị PostgreSQL 9.6, nke a bụ n'ihi ihe dị n'ime ụlọ ọrụ anyị chọrọ. A nwalebeghị azịza ya na ụdị PostgreSQL ndị ọzọ.

#!/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

Na-esote, na faịlụ /etc/patroni.yml nke ị mepụtara, ịkwesịrị idobe ọdịnaya ndị a, n'ezie na-agbanwe adreesị IP n'ebe niile gaa na adreesị ị na-eji.
Lezienụ anya na nkọwa ndị dị na yaml a. Gbanwee adrees gị ka ọ bụrụ nke gị na igwe ọ bụla dị na ụyọkọ ahụ.

/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

Edemede ga-agba ọsọ na igwe atọ niile nke ụyọkọ ahụ, a ga-etinyekwa nhazi nke dị n'elu na faịlụ /etc/patroni.yml na igwe niile.

Ozugbo ịmechara ọrụ ndị a na igwe niile dị na ụyọkọ ahụ, gbanye iwu a na nke ọ bụla n'ime ha

systemctl start patroni
systemctl start postgresql

Chere ihe dị ka sekọnd 30, wee mee iwu a na igwe ndị fọdụrụ na ụyọkọ ahụ.

HAproxy

Anyị na-eji HAproxy mara mma nye otu ebe ntinye. Ihe nkesa nna ukwu ga-adị mgbe niile na adreesị igwe nke etinyere HAproxy.

Ka anyị wee ghara ime igwe nwere HAproxy ka ọ bụrụ otu ebe ọdịda, anyị ga-ebunye ya n'ime akpa Docker; n'ọdịnihu enwere ike ịmalite ya n'ime ụyọkọ K8 ma mee ka ụyọkọ ọdịda anyị bụrụ nke a pụrụ ịdabere na ya.

Mepụta ndekọ ebe ị nwere ike ịchekwa faịlụ abụọ - Dockerfile na haproxy.cfg. Gaa na ya.

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

Kpachara anya, ahịrị atọ ikpeazụ nke faịlụ haproxy.cfg kwesịrị ịdepụta adreesị nke igwe gị. HAproxy ga-akpọtụrụ Patroni, na HTTP nkụnye eji isi mee ihe nkesa nna ukwu ga-alaghachi 200 mgbe niile, na oyiri ga-alaghachi 503 mgbe niile.

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

N'ịbụ ndị nọ na ndekọ nke faịlụ anyị abụọ 'gha ụgha,' ka anyị mee iwu n'usoro maka ịkwakọ akpa ahụ, yana ịmalite ya na ibugharị ọdụ ụgbọ mmiri ndị dị mkpa:

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

Ugbu a, site na imepe adreesị igwe gị na HAproxy na ihe nchọgharị wee kọwaa ọdụ ụgbọ mmiri 7000, ị ga-ahụ ọnụ ọgụgụ na ụyọkọ gị.

Ihe nkesa nke bụ nna ukwu ga-adị na steeti UP, na oyiri ga-adị na ala ala. Nke a bụ ihe nkịtị, n'ezie ha na-arụ ọrụ, mana ha na-apụta n'ụzọ dị otú a n'ihi na ha na-eweghachi 503 maka arịrịọ HAproxy. Nke a na-enye anyị ohere ịmara mgbe niile nke sava atọ bụ nna ukwu ugbu a.

nkwubi

Ị mara mma! N'ime naanị nkeji iri atọ, ibunyela ụyọkọ nchekwa data na-anagide mmejọ yana arụmarụ dị elu nwere mmegharị nkwanye ugwu yana ndaghachi azụ akpaaka. Ọ bụrụ na ị na-eme atụmatụ iji ngwọta a, lelee ya na akwụkwọ ikike Patroni, na karịsịa na akụkụ ya gbasara akụrụngwa patronictl, nke na-enye ohere dị mma maka ijikwa ụyọkọ gị.

Ekele!

isi: www.habr.com

Tinye a comment