ProHoster > Blogs > Administrācija > Ļoti pieejama PostgreSQL klastera izveide, izmantojot Patroni, etcd, HAProxy
Ļoti pieejama PostgreSQL klastera izveide, izmantojot Patroni, etcd, HAProxy
Tā sagadījās, ka brīdī, kad problēma tika izvirzīta, man nebija pietiekami daudz pieredzes, lai izstrādātu un uzsāktu šo risinājumu vienatnē. Un tad es sāku googlēt.
Nezinu, kas tas ir, bet jau neskaitāmo reizi saskaros ar faktu, ka pat tad, ja visu daru soli pa solim kā pamācībā, sagatavoju tādu pašu vidi kā autors, tad nekas nekad neizdodas. Man nav ne jausmas, kas par lietu, bet, kad atkal saskāros ar to, es nolēmu, ka uzrakstīšu savu pamācību, kad viss izdosies. Tāds, kas noteikti darbosies.
Ceļveži internetā
Tā nu ir sagadījies, ka internets necieš no dažādu ceļvežu, pamācību, soli pa solim un tamlīdzīgi trūkuma. Sagadījās, ka man tika uzdots izstrādāt risinājumu ērtai kļūmjpārlēces PostgreSQL klastera organizēšanai un izveidei, kura galvenās prasības bija straumēšanas replikācija no galvenā servera uz visām replikām un automātiska rezerves nodrošināšana galvenā servera gadījumā. neveiksme.
Šajā posmā tika noteikts izmantoto tehnoloģiju kopums:
HAproxy, lai organizētu vienotu ievades punktu lietojumprogrammām, izmantojot datu bāzi
Uzstādīšana
Jūsu uzmanībai - ļoti pieejama PostgreSQL klastera izveide, izmantojot Patroni, etcd, HAProxy.
Visas darbības tika veiktas virtuālajās mašīnās ar instalētu Debian 10 OS.
utt
Es neiesaku instalēt etcd tajās pašās mašīnās, kur atradīsies patroni un postgresql, jo diska slodze ir ļoti svarīga etcd. Bet izglītības nolūkos mēs to darīsim.
Instalēsim etcd.
#!/bin/bash
apt-get update
apt-get install etcd
Pievienojiet saturu failam /etc/default/etcd
[biedrs]
ETCD_NAME=datanode1 # jūsu mašīnas resursdatora nosaukums
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
VISĀM IP ADRESĒM JĀBŪT DERĪGAS. LISTER PEER, CLIENT utt.
Pirmā lieta, kas jums jādara, ir iestatīt trīs virtuālās mašīnas, lai tajās instalētu nepieciešamo programmatūru. Pēc mašīnu instalēšanas, ja sekojat manai apmācībai, varat palaist šo vienkāršo skriptu, kas (gandrīz) izdarīs visu jūsu vietā. Darbojas kā root.
Lūdzu, ņemiet vērā, ka skripts izmanto PostgreSQL versiju 9.6, tas ir saistīts ar mūsu uzņēmuma iekšējām prasībām. Risinājums nav pārbaudīts citās PostgreSQL versijās.
Tālāk tikko izveidotajā /etc/patroni.yml failā ir jāievieto šāds saturs, protams, visās vietās mainot IP adreses uz jūsu izmantotajām adresēm.
Pievērsiet uzmanību komentāriem šajā yaml. Mainiet adreses uz savu katrā klastera mašīnā.
/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
Skripts ir jāpalaiž visās trīs klastera iekārtās, un iepriekš minētā konfigurācija ir jāievieto arī /etc/patroni.yml failā visās iekārtās.
Kad esat pabeidzis šīs darbības visās klastera mašīnās, palaidiet šo komandu jebkurā no tām
Uzgaidiet apmēram 30 sekundes, pēc tam palaidiet šo komandu pārējām iekārtām klasterī.
HAproxy
Mēs izmantojam brīnišķīgo HAproxy, lai nodrošinātu vienu ieejas punktu. Galvenais serveris vienmēr būs pieejams tās iekārtas adresē, kurā ir izvietots HAproxy.
Lai mašīna ar HAproxy nekļūtu par vienu atteices punktu, mēs to palaidīsim Docker konteinerā; nākotnē to varēs palaist K8 klasterī un padarīt mūsu kļūmjpārlēces kopu vēl uzticamāku.
Izveidojiet direktoriju, kurā varat glabāt divus failus - Dockerfile un haproxy.cfg. Iet uz to.
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
Esiet piesardzīgs, pēdējās trīs faila haproxy.cfg rindās ir jānorāda jūsu datoru adreses. HAproxy sazināsies ar Patroni, HTTP galvenēs galvenais serveris vienmēr atgriezīs 200, bet replika vienmēr atgriezīs 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
Atrodoties direktorijā, kurā “guļ” abi mūsu faili, secīgi izpildīsim komandas konteinera iepakošanai, kā arī tā palaišanai ar nepieciešamo portu pārsūtīšanu:
Tagad, pārlūkprogrammā atverot datora adresi, izmantojot HAproxy, un norādot portu 7000, jūs redzēsit klastera statistiku.
Serveris, kas ir galvenais, būs UP stāvoklī, un kopijas būs DOWN stāvoklī. Tas ir normāli, patiesībā tie darbojas, taču tie parādās šādi, jo tie atgriež 503 par pieprasījumiem no HAproxy. Tas ļauj mums vienmēr precīzi zināt, kurš no trim serveriem ir pašreizējais galvenais.
Secinājums
Tu esi krāšņs! Tikai 30 minūšu laikā esat izvietojis izcilu kļūdu izturīgu un augstas veiktspējas datu bāzes kopu ar straumēšanas replikāciju un automātisku atkāpšanos. Ja plānojat izmantot šo risinājumu, pārbaudiet ar oficiālo Patroni dokumentāciju, un jo īpaši tā daļa, kas attiecas uz patronictl utilītu, kas nodrošina ērtu piekļuvi jūsu klastera pārvaldībai.