ProHoster > Blog > Tsamaiso > Ho aha sehlopha se fumanehang haholo sa PostgreSQL ho sebelisa Patroni, etcd, HAProxy
Ho aha sehlopha se fumanehang haholo sa PostgreSQL ho sebelisa Patroni, etcd, HAProxy
Ho ile ha etsahala hore nakong eo bothata bo neng bo hlahisoa, ke ne ke se na phihlelo e lekaneng ea ho hlahisa le ho qala tharollo ena feela. Eaba ke qala Google.
Ha ke tsebe hore na ho tšoasa ke eng, empa ka nako ea leshome le metso e 'meli ke tobane le taba ea hore le haeba ke etsa ntho e' ngoe le e 'ngoe mohato ka mohato joaloka thutong, ke lokisetsa tikoloho e tšoanang le ea mongoli, joale ha ho letho le kileng la sebetsa. Ha ke tsebe hore na bothata ke eng, empa ha ke kopana le sena hape, ke ile ka etsa qeto ea hore ke tla ngola thuto ea ka ha tsohle li sebetsa. E 'ngoe e tla sebetsa ka sebele.
Litataiso ho Marang-rang
Hoa etsahala hore Marang-rang ha a utloe bohloko ka lebaka la khaello ea litataiso tse fapaneng, lithupelo, mohato ka mohato le tse ling tse joalo. Ho ile ha etsahala hore ke be le mosebetsi oa ho hlahisa tharollo bakeng sa ho hlophisa le ho haha sehlopha sa failover PostgreSQL, litlhoko tse ka sehloohong tseo e neng e le ho pheta-pheta ho tloha ho seva sa Master ho ea ho likopi tsohle le ho fana ka sebaka sa polokelo ka mokhoa o itekanetseng ha ho ka ba le seva sa Master. ho hloleha.
Tabeng ena, palo ea lisebelisoa tsa thekenoloji e ile ea khethoa:
etcd joalo ka polokelo e abiloeng bakeng sa Patroni
HAproxy bakeng sa ho hlophisa sebaka se le seng sa ho kena bakeng sa lits'ebetso tse sebelisang database
bophirima
Bakeng sa tlhokomelo ea hau - ho haha sehlopha sa PostgreSQL se fumanehang haholo u sebelisa Patroni, etcd, HAProxy.
Lits'ebetso tsohle li entsoe ka mechini ea sebele e kentsoeng Debian 10 OS.
jj
Ha ke khothaletse ho kenya etcd mechine e tšoanang moo patroni le postgresql li tla ba teng, kaha disk load e bohlokoa haholo bakeng sa joalo-joalo. Empa bakeng sa merero ea thuto, re tla etsa sona seo.
Ha re kenyeng etcd.
#!/bin/bash
apt-get update
apt-get install etcd
Kenya litaba ho file ea /etc/default/etcd
[setho]
ETCD_NAME=datanode1 # lebitso la moamoheli la mochini oa hau
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
LIADDRESS TSOHLE tsa IP li TŠOANELE HO SEBELISA. LISTER PEER, CLIENT jj E LOKELA HO BEWA HO IP ADDRESS OF HOST
Ntho ea pele eo u lokelang ho e etsa ke ho theha mechine e meraro ea sebele ho kenya software e hlokahalang ho eona. Ka mor'a ho kenya mechine, haeba u latela thuto ea ka, u ka tsamaisa script ena e bonolo e tla (hoo e ka bang) e tla u etsetsa ntho e 'ngoe le e' ngoe. E matha joalo ka motso.
Ka kopo hlokomela hore script e sebelisa PostgreSQL version 9.6, sena se bakoa ke litlhoko tsa ka hare tsa k'hamphani ea rona. Tharollo ha e so lekoe liphetolelong tse ling tsa PostgreSQL.
Ka mor'a moo, faeleng ea /etc/patroni.yml eo u sa tsoa e etsa, u lokela ho beha litaba tse latelang, ho hlakile hore u fetola liaterese tsa IP libakeng tsohle ho ea ho liaterese tseo u li sebelisang.
Ela hloko maikutlo a ho yaml ena. Fetola liaterese hore e be tsa hau mochining o mong le o mong o sehlopheng.
/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
Script e tlameha ho tsamaisoa ho mechine eohle e meraro ea sehlopha, 'me tlhophiso e ka holimo e tlameha ho kenngoa faeleng ea /etc/patroni.yml mechineng eohle.
Ha u se u qetile ts'ebetso ena ho mechini eohle e sehlopheng, tsamaisa taelo e latelang ho e 'ngoe ea tsona
Ema metsotsoana e ka bang 30, ebe u tsamaisa taelo ena ho mechini e setseng sehlopheng.
HA proxy
Re sebelisa HAproxy e babatsehang ho fana ka ntlha e le 'ngoe ea ho kena. Seva e kholo e tla lula e le teng atereseng ea mochini oo HAproxy e sebelisoang ho oona.
E le hore re seke ra etsa mochini o nang le HAproxy ntlha e le 'ngoe ea ho hloleha, re tla o tsebisa ka sejaneng sa Docker; nakong e tlang e ka kenngoa sehlopheng sa K8 mme ea etsa hore sehlopha sa rona sa failover se tšepahale le ho feta.
Theha bukana moo u ka bolokang lifaele tse peli - Dockerfile le haproxy.cfg. E-ea ho eona.
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
Hlokomela, mela e meraro ea ho qetela ea faele ea haproxy.cfg e lokela ho thathamisa liaterese tsa mochini oa hau. HAproxy e tla ikopanya le Patroni, lihloohong tsa HTTP seva se seholo se tla lula se khutlisa 200, 'me replica e tla lula e khutlela 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
Ha re le bukeng eo lifaele tsa rona ka bobeli li "letsang," a re phetheng ka tatellano litaelo tsa ho paka setshelo, hammoho le ho e qala ka ho fetisetsa likou tse hlokahalang:
Joale, ka ho bula aterese ea mochini oa hau ka HAproxy ho sebatli le ho totobatsa port 7000, u tla bona lipalo-palo ho sehlopha sa hau.
Seva eo e leng eona master e tla ba maemong a UP, 'me likopi li tla ba maemong a TLASE. Sena se tloaelehile, ha e le hantle ba sebetsa, empa ba hlaha ka tsela ena hobane ba khutlisetsa 503 bakeng sa likōpo tse tsoang HAproxy. Sena se re fa monyetla oa ho tseba hantle hore na ho li-server tse tharo ke mang ea teng hona joale.
fihlela qeto e
O motle! Ka metsotso e 30 feela, u kentse sehlopha sa polokelo ea litaba se sebetsang hantle haholo se mamellang liphoso le se sebetsang hantle se nang le phetisetso ea ho phallela le ho khutlela morao. Haeba u rera ho sebelisa tharollo ena, hlahloba ka litokomane tsa semmuso tsa Patroni, mme haholo-holo ka karolo ea eona mabapi le ts'ebeliso ea patronictl, e fanang ka phihlello e bonolo ea ho laola sehlopha sa hau.